ls на устройстве без его монтажа

9

Можно ли запустить lsустройство без предварительной установки?
Что-то вроде этого:

# ls /dev/sda1
пасквиль
источник
С какой целью?
Дауд
Я так не думаю. Вам определенно понадобится инструмент, кроме того ls.
стружка
Нет. Почему бы вам не рассказать нам, чего вы пытаетесь достичь?
Джейсонвриан
1
в те времена я хотел смонтировать какое-то устройство, но не помню, если это sda1 / 2/3/4/5/6 и т. д. Просто нужно перечислить файлы на этом устройстве, чтобы дать мне понять, является ли это устройство я ищу
фонарь
Кстати, если у вас есть образ диска (не раздела), вы можете увидеть его файлы testdisk, запустив testdiskкоманду с путем к файлу образа в качестве первого параметра в командной строке.
Аббафей

Ответы:

11

Вы можете использовать debugfsпрограмму e2fsprogs . Несмотря на свое историческое название, он будет работать на файловых системах ext2 / 3/4. Использование простое:

# 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
 …   

где "ls -l" - это debugfsконкретная команда, которая действует в основном как ls -l; Вы не можете использовать любую произвольную команду оболочки там. По умолчанию debugfs открывает диск в режиме только для чтения, так что это относительно безопасно; например, попытка выполнить это на не ext2 / 3/4 разделе просто дает диагностику:

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

Не могу сказать, что считаю это рекомендуемой практикой, но она будет делать то, что вы просите.

MSW
источник
3

Весь смысл монтирования файловой системы заключается в доступе к ее файлам. Так что нет, в общем, вы не можете получить доступ к файлам файловой системы без ее монтирования.

Есть несколько утилит , которые получают доступ к файлу напрямую , без монтажа, таких как debugfs для ext2 / ext3 / ext4 файловых системы и Исспользуя для файловых систем FAT.

Для ext2 / ext3 / ext4 вместо того, чтобы вызывать опасную и сложную в использовании программу debugfs, вы можете указать ее последнее местоположение монтирования:

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

Однако это полезно только в том случае, если последнее место монтирования было записано.

Большинство типов файловых систем поддерживают назначение меток файловых систем (например tune2fs -L foo). Так что дайте всем вашим файловым системам уникальный ярлык. Затем смонтируйте файловую систему по метке:

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

или

mount LABEL=foo /media/foo
Жиль "ТАК - перестань быть злым"
источник
2

Простой ответ: вы не можете. lsиспользует стандартные подпрограммы libc, которые преобразуются в системные вызовы, которые обслуживаются драйвером файловой системы, поэтому невозможно использовать ls(или что-либо подобное с использованием этих системных вызовов) без монтирования файловой системы.

Вы могли бы написать утилиту, которая обошла бы это, имея собственную копию некоторых частей драйвера файловой системы (такая вещь существует, например, для чтения файловых систем Ext2 из Windows), но это довольно непрактично.

Если ваша проблема заключается только в идентификации разделов, вам, вероятно, следует начать использовать GPT, в котором есть место для имен разделов (72 байта на раздел). Некоторые базовые решения (например, Linux MD или LVM) также допускают именование.

peterph
источник
1

Как ранее описано, debugfs работает хорошо.

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

Для NTFS есть ntfsls из ntfs-3g.

ntfsls /dev/sda2

Для FAT есть mdir, из mtools.

mdir -i /dev/sdc1

Для exFAT я не уверен, хотя. Кажется, exfat-utils не содержит никаких инструментов, подобных описанным выше. Хотя есть dumpexfat, но я не думаю, что он предоставит запрашиваемую информацию.

Чтобы узнать больше информации о подключенных дисках, есть lsblk.

lsblk

Лично я предпочитаю это, и установил псевдоним для этого:

alias lsblk="lsblk -o MODEL,TRAN,NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MAJ:MIN"
Мика Норен
источник