• Команды mount(8) и umount(8) автоматически заводят файл /etc/mtab, который содержит информацию, сходную с информацией в файле /proc/mounts, но являющуюся более детальной. В частности, файл /etc/mtab содержит специфичные для файловой системы параметры, передаваемые команде mount(8), которые не показаны в файле /proc/mounts. Однако поскольку системные вызовы mount() и umount() не обновляют файл /etc/mtab, информация в нем может оказаться неточной, если какое-либо приложение, которое монтирует или размонтирует устройства, не обновит его.
• Файл /etc/fstab, который обслуживается системным администратором, содержит описания всех доступных файловых систем в системе. Он используется командами mount(8), umount(8) и fsck(8).
Формат файлов /proc/mounts, /etc/mtab и /etc/fstab одинаков и описан на странице руководства fstab(5). Приведу пример строки из файла /proc/mounts:
/dev/sda9 /boot ext3 rw 0 0
Эта строка содержит шесть полей, таких как:
• имя монтируемого устройства;
• точка монтирования этого устройства;
• тип файловой системы;
• флаги монтирования. В приведенном примере флаг rw означает, что файловая система была смонтирована для чтения/записи;
• число, которое используется для управления операцией резервного копирования файловой системы с помощью команды dump(8). Данное поле и следующее за ним используются только в файле /etc/fstab; для файлов /proc/mounts и /etc/mtab эти поля всегда равны 0;
• число, которое используется для управления порядком проверки файловых систем командой fsck(8) во время загрузки системы.
На страницах руководства getfsent(3) и getmntent(3) документированы функции, которые можно использовать для чтения записей из этих файлов.
14.8.1. Монтирование файловой системы: mount()
Системный вызов mount() монтирует файловую систему, содержащуюся на устройстве, указанном в аргументе source, в каталог
#include
int mount(const char *
unsigned long
Возвращает 0 при успешном завершении и –1 при ошибке
Для первых двух аргументов использованы имена source и target, поскольку системный вызов mount() может выполнять и другие операции, помимо монтирования дисковой файловой системы в каталоги.
Аргумент fstype является строкой, которая идентифицирует тип файловой системы, расположенной на устройстве, например, ext4 или btrfs.
Аргумент mountflags является битовой маской, составленной с помощью команды ИЛИ (|) для нуля или для нескольких флагов, показанных в табл. 14.1. Эти флаги будут описаны подробнее далее.
Завершающий аргумент системного вызова mount() — data — является указателем на буфер с информацией, интерпретация которой зависит от файловой системы. Для большинства типов файловых систем этот аргумент представляет собой строку, в которой через запятую приведены значения параметров. Полный перечень этих параметров можно найти на странице руководства mount(8) (или в документации к файловой системе, если она не описана на странице mount(8)).
Таблица 14.1. Значения флагов mountflags системного вызова mount()
Флаг — Назначение
MS_BIND — Создать связанную точку монтирования (начиная с версии Linux 2.4)
MS_DIRSYNC — Сделать обновления каталогов синхронными (начиная с версии Linux 2.6)
MS_MANDLOCK — Разрешить обязательную блокировку файлов
MS_MOVE — Автоматически переносить точку монтирования в новое местоположение
MS_NOATIME — Не обновлять время последнего доступа для файлов
MS_NODEV — Не разрешать доступ к каталогм
MS_NODIRATIME — Не обновлять время последнего доступа для каталогов
MS_NOEXEC — Не разрешать выполнение программ
MS_NOSUID — Отключить программы с полномочиями setuid и setgid
MS_RDONLY — Монтировать только для чтения; создавать или изменять файлы нельзя
MS_REC — Рекурсивное монтирование (начиная с версии Linux 2.6.20)
MS_RELATIME — Обновлять время последнего доступа, только если оно старше времени последнего изменения или последнего изменения статуса (начиная с версии Linux 2.4.11)
MS_REMOUNT — Повторное монтирование с новыми аргументами mountflags и data
MS_STRICTATIME — Всегда обновлять время последнего доступа (начиная с версии Linux 2.6.30)
MS_SYNCHRONOUS — Сделать все обновления файлов и каталогов синхронными
Аргумент mountflags является битовой маской флагов, которые влияют на выполнение системного вызова mount(). Для этого аргумента можно не указывать флаг или же использовать следующие.
• MS_BIND (начиная с версии Linux 2.4) — создает связанную точку монтирования. Мы описываем эту функцию в разделе 14.9.4. Если указан этот флаг, аргументы fstype, mountflags и data игнорируются.