В этом разделе описывается управление точками монтирования и совместно используемыми файловыми системами в ZFS.
По умолчанию все файловые системы ZFS монтируются ZFS при начальной загрузке с помощью службы SMF (Service Management Facility) svc://system/filesystem/local. Файловые системы монтируются в каталог /путь, где путь обозначает имя файловой системы.
Точку монтирования по умолчанию можно переопределить путем указания для свойства mountpoint определенного пути при помощи команды zfs set. При необходимости ZFS автоматически создает эту точку монтирования и монтирует файловую систему по команде zfs mount -a, не требуя предварительного редактирования файла /etc/vfstab.
Свойство mountpoint является наследуемым. Например, если для pool/home свойство mountpoint имеет значение /export/stuff, то pool/home/user путем наследования получает значение /export/stuff/user для свойства mountpoint.
Для предотвращения монтирования файловой системы свойству mountpoint можно присвоить значение none. Возможность монтирования файловой системы определяется свойством canmount. Для получения дополнительной информации о свойстве canmount см. Свойство canmount.
При необходимости управление файловыми системами также можно осуществлять открыто через старые интерфейсы монтирования путем выбора для свойства mountpoint значения legacy с помощью команды zfs set. Это позволяет предотвратить автоматическое монтирование файловой системы ZFS. Вместо этого необходимо использовать старые средства, включая команды mount и umount, а также файл /etc/vfstab. Для получения дополнительной информации о старых точках монтирования см. Старые точки монтирования.
При изменении стратегии управления точками монтирования применяются следующие модели поведения:
поведение автоматической точки монтирования;
поведение старой точки монтирования.
При изменении установленных значений legacy или none ZFS автоматически монтирует файловую систему.
В случае размонтирования файловой системы, находящейся под управлением ZFS, и последующего изменения значения свойства mountpoint файловая система остается размонтированной.
Для корневого набора данных при создании также можно указать точку монтирования по умолчанию с помощью команды zpool create с параметром -m. Для получения дополнительной информации о создании пулов см. Создание пула устройств хранения данных ZFS.
Управление всеми наборами данных, для свойства mountpoint которых не установлено значение legacy, осуществляется ZFS. Ниже приведен пример создания набора данных с автоматическим управлением точкой монтирования.
# zfs create pool/filesystem # zfs get mountpoint pool/filesystem NAME PROPERTY VALUE SOURCE pool/filesystem mountpoint /pool/filesystem default # zfs get mounted pool/filesystem NAME PROPERTY VALUE SOURCE pool/filesystem mounted yes - |
Свойство mountpoint также можно указать явно, как показано в следующем примере:
# zfs set mountpoint=/mnt pool/filesystem # zfs get mountpoint pool/filesystem NAME PROPERTY VALUE SOURCE pool/filesystem mountpoint /mnt local # zfs get mounted pool/filesystem NAME PROPERTY VALUE SOURCE pool/filesystem mounted yes - |
При изменении свойства mountpoint файловая система автоматически размонтируется из старой точки монтирования и монтируется в новой точке. При необходимости создаются каталоги точки монтирования. Если автоматическое размонтирование файловой системы по причине ее активности невозможно, появляется сообщение об ошибке. В этом случае требуется принудительное размонтирование вручную.
Управление файловыми системами ZFS можно осуществлять при помощи старых средств. Для этого свойство mountpoint должно иметь значение legacy. Управление старыми файловыми системами должно осуществляться с помощью команд mount и umount и файла /etc/vfstab. ZFS не выполняет автоматическое монтирование старых файловых систем при начальной загрузке, и для наборов данных этого типа команды ZFS mount и umount не используются. В следующих примерах демонстрируется настройка и администрирование набора данных ZFS в режиме "legacy":
# zfs set mountpoint=legacy tank/home/eschrock # mount -F zfs tank/home/eschrock /mnt |
Для автоматического монтирования старой файловой системы при начальной загрузке необходимо добавить соответствующую запись в файл /etc/vfstab. В следующем примере показано, как может выглядеть запись в файле /etc/vfstab:
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # tank/home/eschrock - /mnt zfs - yes - |
Обратите внимание, что записи device to fsck и fsck pass имеют значение -. Этот синтаксис используется по причине того, что команда fsck не применима по отношению к файловым системам ZFS. Для получения дополнительной информации о целостности данных и отказе от применения команды fsck в ZFS см. Транзакционная семантика.
ZFS автоматически монтирует файловые системы при их создании или начальной загрузке системы. Команда zfs mount необходима только при изменении параметров монтирования, а также при явном монтировании или размонтировании файловых систем.
Команда zfs mount без аргументов используется для отображения всех смонтированных в настоящее время файловых систем под управлением ZFS. Старые точки монтирования не отображаются. Пример:
# zfs mount tank /tank tank/home /tank/home tank/home/bonwick /tank/home/bonwick tank/ws /tank/ws |
Для монтирования всех файловых систем под управлением ZFS используется параметр -a. Старые файловые системы не монтируются. Пример:
# zfs mount -a |
По умолчанию ZFS запрещает монтирование поверх непустого каталога. Для принудительного монтирования поверх непустого каталога необходимо указать параметр -O. Пример:
# zfs mount tank/home/lalt cannot mount '/export/home/lalt': directory is not empty use legacy mountpoint to allow this behavior, or use the -O flag # zfs mount -O tank/home/lalt |
Управление старыми точками монтирования должно осуществляться с использованием старых средств. Попытка применения средств ZFS приводит к ошибке. Пример:
# zfs mount pool/home/billm cannot mount 'pool/home/billm': legacy mountpoint use mount(1M) to mount this filesystem # mount -F zfs tank/home/billm |
При монтировании файловой системы используется ряд параметр монтирования на основе значений свойств, связанных с набором данных. Между свойствами и параметрами монтирования существует следующая корреляция:
Параметры монтирования
devices/nodevices
exec/noexec
ro/rw
setuid/nosetuid
Параметр монтирования nosuid является псевдонимом для nodevices,nosetuid.
Если какие-либо из вышеупомянутых параметров устанавливаются явно с использованием параметра -o команды zfs mount, то связанное значение свойства временно переопределяется. Эти значения свойств отображаются как temporary (временные) в команде zfs get и возвращаются к исходным значениям после размонтирования файловой системы. При изменении значения свойства во время монтирования набора данных это изменение применяется немедленно, и все временные значения переопределяются.
В следующем примере в файловой системе tank/home/perrin временно устанавливается параметр монтирования только для чтения.
# zfs mount -o ro tank/home/perrin |
В этом примере предполагается, что файловая система будет размонтирована. Для временного изменения свойства в уже смонтированной файловой системе следует использовать специальный параметр remount. В следующем примере показано временное изменение значения свойства atime на off в смонтированной файловой системе.
# zfs mount -o remount,noatime tank/home/perrin # zfs get atime tank/home/perrin NAME PROPERTY VALUE SOURCE tank/home/perrin atime off temporary |
Для получения дополнительной информации о команде zfs mount см. zfs(1M).
Для размонтирования файловых систем используется подкоманда zfs unmount. В качестве аргументов команда unmount принимает точку монтирования или имя файловой системы.
В следующем примере размонтируется файловая система с указанным именем:
# zfs unmount tank/home/tabriz |
В следующем примере размонтируется файловая система с указанной точкой монтирования:
# zfs unmount /export/home/tabriz |
Выполнение команды unmount в случае активности или занятости системы невозможно. Для принудительного размонтирования файловой системы используется параметр -f. При принудительном размонтировании файловой системы необходимо проверить, что ее содержимое не используется. В противном случае результатом может стать непредсказуемое поведение приложения.
# zfs unmount tank/home/eschrock cannot unmount '/export/home/eschrock': Device busy # zfs unmount -f tank/home/eschrock |
В целях обеспечения обратной совместимости для размонтирования файловых систем ZFS может использоваться старая команда umount. Пример:
# umount /export/home/bob |
Для получения дополнительной информации о команде zfs umount см. zfs(1M).
Подобно точкам монтирования, ZFS может автоматически разрешать совместное использование файловых систем с помощью свойства sharenfs. Этот метод позволяет не изменять файл /etc/dfs/dfstab при добавлении новой файловой системы. Свойство sharenfs представляет собой список разделенных запятыми параметров для команды share. Специальное значение on является псевдонимом для параметров совместного использования по умолчанию, согласно которым все пользователи имеют разрешения read/write. Специальное значение off указывает на то, что файловая система не управляется ZFS и может совместно использоваться при помощи традиционных средств, таких как файл /etc/dfs/dfstab. Все файловые системы, у которых для свойства sharenfs указано значение, отличное от off , определяются как совместно используемые при начальной загрузке.
По умолчанию все файловые системы не подлежат совместному использованию. Для разрешения совместного использования новой файловой системы применяется синтаксис zfs set, аналогичный следующему:
# zfs set sharenfs=on tank/home/eschrock |
Это свойство наследуется, и файловые системы автоматически определяются как совместно используемые при их создании, если для наследуемого свойства не установлено значение off. Например:
# zfs set sharenfs=on tank/home # zfs create tank/home/bricker # zfs create tank/home/tabriz # zfs set sharenfs=ro tank/home/tabriz |
Системы tank/home/bricker и tank/home/tabriz изначально являются совместно используемыми и открытыми для записи, поскольку наследуют свойство sharenfs от tank/home. При установке для этого свойства значения ro (только чтение) система tank/home/tabriz становится совместно используемой только для чтения, вне зависимости от свойства sharenfs , настроенного для tank/home.
В то время как для большинства файловых систем разрешение или запрет совместного использования устанавливаются автоматически в ходе начальной загрузки, создания и уничтожения, некоторые файловые системы требуют явного запрета совместного использования. Для этого применяется команда zfs unshare. Пример:
# zfs unshare tank/home/tabriz |
Выполнение этой команды приводит к запрету совместного использования файловой системы tank/home/tabriz. Для запрета совместного использования всех файловых систем ZFS необходимо указать параметр - a.
# zfs unshare -a |
В большинстве случаев автоматическое поведение ZFS с разрешением совместного использования при начальной загрузке и создании не требует дополнительных настроек. Если по каким-либо причинам необходимо снять запрет на совместное использование файловой системы, это можно сделать при помощи команды zfs share. Пример:
# zfs share tank/home/tabriz |
Для разрешения совместного использования всех файловых систем ZFS можно использовать параметр -a.
# zfs share -a |
Если для свойства sharenfs установлено значение off, то ZFS не предпринимает попыток разрешить или запретить совместное использование файловой системы. Этот параметр позволяет выполнять администрирование традиционными средствами, например с помощью файла /etc/dfs/dfstab.
В отличие от традиционной команды mount, традиционные команды share и unshare по-прежнему могут использоваться в файловых системах ZFS. Таким образом, можно вручную настроить совместное использование файловой системы и выбрать параметры, отличные от значений свойства sharenfs. Использовать такую административную модель не рекомендуется. Необходимо выбрать, будет ли управление совместным использованием в NFS осуществляться полностью через ZFS или посредством файла /etc/dfs/dfstab. Административная модель ZFS значительно проще и требует меньших усилий, чем традиционная модель. Однако в некоторых случаях может оказаться удобнее управлять совместным использованием файловой системы согласно уже знакомой модели.