Что такое / etc / mtab в Linux?

30

Что есть /etc/mtabв Linux?

Зачем это нужно и какие преимущества у него есть?

Сатиш Кумар
источник
Я нахожу это расстраивающим, что man 5 mtabотсутствует.
Вейцзюнь Чжоу
3
Также: unix.stackexchange.com/q/24182/117549
Джефф Шаллер

Ответы:

51
% file / etc / mtab
/ etc / mtab: символическая ссылка на ../proc/self/mounts
% file / proc / mounts
/ proc / mounts: символическая ссылка на себя / mounts
%

/etc/mtabэто механизм совместимости. Несколько десятилетий назад в Unix не было системного вызова для чтения существующей информации о монтировании. Вместо этого программы, которые монтировали файловые системы, должны были совместно и добровольно вести таблицу /etc/mtabтого, где и где были смонтированы.

По понятным причинам это был не идеальный механизм.

Linux получил понятие «procfs», и одной из вещей, которую он получил, была поддерживаемая ядром версия этой таблицы в форме mountsпсевдорегулярного файла. «Системный вызов» для чтения информации о монтировании из ядра превратился в последовательность «открытый для чтения и закрытия» для этого файла, с последующим анализом результата от читабельной до машиночитаемой формы (что-то, что имеет некоторые тонкие уловки, как вы можно увидеть из сообщений об ошибках чуть более двух недель назад).

/etc/mtabтаким образом, популярно стало символической ссылкой на /proc/mounts, позволяя программам, которые зашифровали это имя, продолжать чтение таблицы монтирования из этого файла, что программы, которые монтировали и размонтировали файловые системы, больше не должны явно делать что-либо сами, чтобы оставаться в курсе. (Однако некоторые из них все равно будут, если /etc/mtabокажется, что это обычный файл с возможностью записи. И есть несколько угловых случаев, когда нормализованная информация, в mountsкоторой отсутствуют все неядерные данные, не совсем то, что нужно; хотя они не перевешивают общие проблемы с /etc/mtab.)

Каждый процесс может в настоящее время имеет свой индивидуальный вид , что установлен, и есть , как следствие теперь отдельные mountsфайлы для каждого процесса в PROCFS, собственная таблица каждого процесса является доступным для него через selfсимволическую ссылку , как self/mountsи /proc/mountsявляется также теперь совместимостью механизм. (Интересно, что ни текущий процесс, mountsни формат mountsне документированы в текущем документе Linux, хотя подобный mountinfoпсевдорегулярный файл есть.)

SunOS / Solaris имеет аналогичный механизм. /etc/mnttabФайл на самом деле является одним файлом файловой системы, и в дополнение к чтению таблицы, с помощью дескриптора открытого файла в этот файл, с read()системным вызовом, можно наблюдать за изменениями монтажа точки с poll()и получить различные дополнительные фрагменты информации с ioctl().

В HP-UX /etc/mnttabаналогично имя файла, но начиная с версии 11 это все еще был обычный файл, содержимое которого совместно поддерживалось программами системной утилиты.

AIX не экспортирует читабельную текстовую таблицу, которую должны анализировать программы, и не существует эквивалентного файла. Точно так же BSD имеют полнофункциональные системные вызовы getfsstat()во FreeBSD и OpenBSD для программ, которые получают таблицу монтирования из ядра в машиночитаемой форме, не распределяя ее через читаемую человеком промежуточную форму.

дальнейшее чтение

JdeBP
источник
В дополнение к моему комментарию в этом вопросе mtab(5)из старых времен: man.cat-v.org/unix_8th/5/mtab .
Вейцзюнь Чжоу
2
не только /proc/mounts, но /proc/self/mountsи сам по себе механизм совместимости; это только показывает подмножество информации, доступной в /proc/self/mountinfo. Формат /proc/self/mountsдокумента задокументирован proc(5)какfstab(5)
mosvy
правда, fstab (5) говорит только о том, что пробелы заменяются восьмеричными escape- символами, а пробелы, табуляции, переводы строки и обратные
слеши
Я знаю псевдо-файлы и обычные файлы, но что такое псевдо-обычный файл?
Геррит
@gerrit это обычный файл, который имеет размер 0, но все еще содержит данные ;-)
mosvy
12

По словам man mount:

Программы mount и umount традиционно поддерживают список монтируемых в настоящее время файловых систем в файле / etc / mtab. Этот настоящий файл mtab по-прежнему поддерживается, но в современных системах Linux лучше сделать его символической ссылкой на / proc / mounts, поскольку обычный файл mtab, поддерживаемый в пространстве пользователя, не может надежно работать с пространствами имен, контейнерами и другими расширенными функциями Linux.

При монтаже без записи в /etc/mtab:

-n, --no-mtab

Смонтировать без записи в / etc / mtab. Это необходимо, например, когда / etc находится в файловой системе только для чтения.

Еще много нюансов дано на странице руководства.

Кристофер
источник