/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 для программ, которые получают таблицу монтирования из ядра в машиночитаемой форме, не распределяя ее через читаемую человеком промежуточную форму.
не только /proc/mounts, но /proc/self/mountsи сам по себе механизм совместимости; это только показывает подмножество информации, доступной в /proc/self/mountinfo. Формат /proc/self/mountsдокумента задокументирован proc(5)какfstab(5)
Я знаю псевдо-файлы и обычные файлы, но что такое псевдо-обычный файл?
Геррит
@gerrit это обычный файл, который имеет размер 0, но все еще содержит данные ;-)
mosvy
12
По словам man mount:
Программы mount и umount традиционно поддерживают список монтируемых в настоящее время файловых систем в файле / etc / mtab. Этот настоящий файл mtab по-прежнему поддерживается, но в современных системах Linux лучше сделать его символической ссылкой на / proc / mounts, поскольку обычный файл mtab, поддерживаемый в пространстве пользователя, не может надежно работать с пространствами имен, контейнерами и другими расширенными функциями Linux.
При монтаже без записи в /etc/mtab:
-n, --no-mtab
Смонтировать без записи в / etc / mtab. Это необходимо, например, когда / etc находится в файловой системе только для чтения.
man 5 mtab
отсутствует.Ответы:
/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 для программ, которые получают таблицу монтирования из ядра в машиночитаемой форме, не распределяя ее через читаемую человеком промежуточную форму.дальнейшее чтение
/proc/self/mountinfo
с \ r в пути монтирования . # 35137. Ошибки GNU coreutils./proc/mounts
, Документация / файловые системы / proc.txt . Linux 5.1.fstab-decode
. Ошибка # 567071. Ошибки Debian.getfsstat()
, Руководство по системным вызовам FreeBSD . 2016-12-27.источник
mtab(5)
из старых времен: man.cat-v.org/unix_8th/5/mtab ./proc/mounts
, но/proc/self/mounts
и сам по себе механизм совместимости; это только показывает подмножество информации, доступной в/proc/self/mountinfo
. Формат/proc/self/mounts
документа задокументированproc(5)
какfstab(5)
По словам
man mount
:При монтаже без записи в
/etc/mtab
:Еще много нюансов дано на странице руководства.
источник