4

Существуют ли инструменты командной строки для определения типа файловой системы на блочном устройстве перед его монтированием?и как это достигается?

Я считаю, что это возможно, так как я обычно монтирую внешние диски с

$ mount /dev/sdXX /mnt

mount автоматически определяет файловую систему для вас. современные инструменты GUI даже проверяют использование диска и другую информацию, не монтируя файловую систему, если драйвер для этого fs присутствует.

сценарий здесь таков

  • тип раздела и тип файловой системы могут не совпадать.
  • большинство файловых систем linux используют тип раздела "83", который не предоставляет много информации о fs, которые она содержит.
  • соответствующий диск может отсутствовать, отсутствуют xfsprogs, hfsprogs и т. д.

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

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

Достаточно ли необработанного дампа данных XXX байтов в начале, чтобы определить тип fs? Есть ли стандарт, где и в каком формате хранить такую информацию?

Любое понимание этого вопроса высоко ценится.

= - =

Обновить:

Спасибо за ответ Филага. так что обычный file подход на самом деле лучший.

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

более глубокое изучение документации file (возможно, системные вызовы, которые он использует) должно помочь мне лучше понять эту проблему.

1 ответ1

3

Первые байты (не буквально, но обычно в первых 4 КБ) содержат подпись, которая специально создана для того, чтобы быть уникальной. file утилита может определять эти подписи. Посмотреть на себя:

$ # Create an example file we can write to. vdisk stands for your partition.
$ dd if=/dev/zero of=vdisk bs=1M count=40
$ mkfs.ext2 -qF vdisk
$ file vdisk
vdisk: Linux rev 1.0 ext2 filesystem data, UUID=cce25572-...-f4eba2957279
$ mkfs.xfs -fq vdisk
$ file vdisk
vdisk: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
$ # How does file find out? Let's look inside the partition
$ hexdump vdisk -C  | head -n 1
00000000  58 46 53 42 00 00 10 00  00 00 00 00 00 00 28 00  |XFSB..........(.|

Чтобы получить подробный список файловых систем, которые распознает file , взгляните на magic/Magdir/filesystems в исходном коде file . Если вас интересуют только те, которые поддерживаются вашим ядром, просмотрите include/linux/magic.h в ваших исходных кодах ядра.

Если вас интересует блочное устройство, также полезна специальная опция -s , как и -L которая будет следовать (разыменовывать) символические ссылки, а не работать с самой ссылкой. Например, если используется логический том и устройство отображения, что-то вроде:

file -Ls /dev/mapper/home

может быть полезным

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .