Обнаружение файловой системы Linux - PullRequest
11 голосов
/ 16 апреля 2011

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

Что я действительно не могу обернуть, так это то, что я могу 'Чтобы понять, как Linux обнаруживает тип файловой системы, в linux поддерживается gazillion файловых систем, каждая со своими особенностями.

Может ли кто-нибудь указать мне на фрагмент кода в ядре, который должен различать, скажем, жирный иext4?

MBR не содержит такого рода информацию, и суперблок каждого типа отличается.

При выдаче mount /dev/whatever /media нет необходимости добавлять тип файловой системы.

Ответы [ 3 ]

17 голосов
/ 16 апреля 2011

Причина, по которой вы не можете его найти, заключается в том, что по большей части его нет в ядре - он находится в служебной программе mount пользователя, которая находится в пакете util-linux.Если вы не зададите ему тип файловой системы или если вы дадите ему тип «any», mount просто просматривает список всех файловых систем, о которых знает ядро, и пробует каждую из них по порядку, пока одна изони успешно монтируются (или возвращают ошибку, если ни один из них не делает).

Как узнать, о каких типах файловых систем знает ядро?Он читает файл /proc/filesystems, который просматривает связанный список file_systems в fs/filesystems.c.Когда драйвер файловой системы загружен, он вызывает register_filesystem в том же файле, чтобы добавить себя в этот список.Например, есть вызов register_filesystem в init_ext2_fs в fs/ext2/super.c - init_ext2_fs - это функция module-init для модуля ext2.

Некоторые файловые системы шумят и выдают ошибки при отладке ядраЖурнал, когда кто-то пытается смонтировать устройство с неверной файловой системой, поэтому, например, вы можете увидеть ошибки о «недопустимой файловой системе XFS», когда успешно монтирует файловую систему ext4, если mount попыталсяСначала xfs.

7 голосов
/ 27 июля 2011

blkid -o value -s TYPE /dev/path/to/device

5 голосов
/ 16 апреля 2011

Из mount Страница man:

Если не задана опция -t или задан автоматический тип, mount попытается угадать нужный тип.Если mount был скомпилирован с библиотекой blkid, угадывание выполняется этой библиотекой.В противном случае Маунт сам догадается, исследуя суперблок;если это не приводит к тому, что выглядит знакомо, mount попытается прочитать файл / etc / filesystems или, если он не существует, / proc / filesystems.Будут проверены все перечисленные типы файловых систем, кроме тех, которые помечены как «nodev» (например, devpts, proc, nfs и nfs4).Если / etc / filesystems оканчивается строкой только с одним *, mount впоследствии будет читать / proc / filesystems.

Кроме того, в моем окне ubuntu есть man-страница mount (упоминается библиотека volume_id))

Если не указана опция -t или задан автоматический тип, mount попытается угадать нужный тип.Mount использует библиотеку blkid или volume_id для определения типа файловой системы;если это не приводит к тому, что выглядит знакомо, mount попытается прочитать файл / etc / filesystems или, если он не существует, / proc / filesystems.Будут проверены все перечисленные типы файловых систем, кроме тех, которые помечены как «nodev» (например, devpts, proc и nfs).Если / etc / filesystems заканчивается строкой только с одним *, mount будет читать / proc / filesystems впоследствии.

...