ls en el dispositivo sin montarlo


9

¿Es posible ejecutar lsen un dispositivo sin montarlo primero?
Algo como esto:

# ls /dev/sda1

¿Con que propósito?
Dawud

No lo creo. Definitivamente necesitarías una herramienta además ls.
strugee

No. ¿Por qué no nos dices lo que estás tratando de lograr?
jasonwryan

1
para esos momentos quiero montar algún dispositivo pero no recuerdo si es sda1 / 2/3/4/5/6 etc. Solo necesito enumerar los archivos en ese dispositivo para darme una idea de si es el dispositivo que soy buscando
lampoon

Por cierto: si tiene una imagen de un disco (no una partición), puede ver sus archivos testdiskejecutando el testdiskcomando con una ruta de archivo de imagen como primer parámetro en la línea de comandos.
Abbafei

Respuestas:


11

Puedes usar el debugfsprograma de e2fsprogs . A pesar de su nombre histórico, funcionará en sistemas de archivos ext2 / 3/4. El uso es simple:

# debugfs -R "ls -l" /dev/sda6
  2   40755 (2)   1001   1001    4096 17-Sep-2013 04:03 .
  2   40755 (2)   1001   1001    4096 17-Sep-2013 04:03 ..
 16  100644 (1)   1001   1001    9085 17-Sep-2013 04:03 avserver.conf
 17  100644 (1)   1001   1001    2177 17-Sep-2013 04:03 bash.bashrc
 26  100644 (1)   1001   1001     722 17-Sep-2013 04:03 crontab
 …   

donde "ls -l" es un debugfscomando específico que actúa principalmente como ls -l; no puede usar ningún comando de shell arbitrario allí. De forma predeterminada, debugfs abre una unidad en modo de solo lectura, por lo que es relativamente seguro; por ejemplo, intentar esto en una partición no ext2 / 3/4 solo da un diagnóstico:

# debugfs -R "ls -l" /dev/sda2
/dev/sda2: Bad magic number in super-block while opening filesystem
ls: Filesystem not open

No puedo decir que considero esta práctica recomendable, pero hará lo que me pidas.


3

El objetivo de montar un sistema de archivos es acceder a sus archivos. Entonces, no, en general, no puede acceder a los archivos de un sistema de archivos sin montarlo.

Hay algunas utilidades que acceden a un archivo directamente sin montaje, como debugfs para sistemas de archivos ext2 / ext3 / ext4 y mtools para sistemas de archivos FAT.

Para un ext2 / ext3 / ext4, en lugar de invocar el programa peligroso y difícil de usar debugfs, puede enumerar su última ubicación de montaje:

tune2fs -l /dev/sda1 | grep 'Last mounted'

Sin embargo, esto solo es útil si se ha registrado la última ubicación de montaje.

La mayoría de los tipos de sistemas de archivos admiten dar etiquetas a los sistemas de archivos (por ejemplo tune2fs -L foo) Así que dele a todos sus sistemas de archivos una etiqueta única. Luego monte el sistema de archivos por etiqueta:

mount /dev/disks/by-label/foo /media/foo

o

mount LABEL=foo /media/foo

2

Respuesta simple: no puedes. lsusa rutinas libc estándar que se traducen en llamadas al sistema atendidas por el controlador del sistema de archivos, por lo tanto, no es posible usar ls(o cualquier cosa que use esas llamadas del sistema) sin montar el sistema de archivos.

Puede escribir una utilidad que evite esto al tener su propia copia de algunas partes del controlador del sistema de archivos (tal cosa existe, por ejemplo, para leer sistemas de archivos Ext2 desde Windows), pero eso es poco práctico.

Si su problema es solo identificar las particiones, probablemente debería comenzar a usar GPT que tiene espacio para los nombres de las particiones (72 bytes por partición). Algunas soluciones superpuestas (Linux MD o LVM, por ejemplo) también permiten la denominación.


1

Como se describió anteriormente, debugfs funciona bien.

debugfs -R "ls -l" /dev/sda1

Para NTFS, hay ntfsls de ntfs-3g.

ntfsls /dev/sda2

Para FAT, hay mdir, de mtools.

mdir -i /dev/sdc1

Sin embargo, para exFAT no estoy seguro. Parece que exfat-utils no incluye ninguna herramienta similar a las descritas anteriormente. Sin embargo, hay dumpexfat, pero no creo que proporcione la información solicitada.

Para obtener más detalles sobre las unidades conectadas, hay lsblk.

lsblk

Personalmente, prefiero esto, y he establecido un alias para ello:

alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.