Руководство по администрированию файловых систем ZFS Solaris

Монтирование и совместное использование файловых систем ZFS

В этом разделе описывается управление точками монтирования и совместно используемыми файловыми системами в ZFS.

Управление точками монтирования 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. Для получения дополнительной информации о старых точках монтирования см. Старые точки монтирования.

При изменении стратегии управления точками монтирования применяются следующие модели поведения:

Автоматические точки монтирования

Для корневого набора данных при создании также можно указать точку монтирования по умолчанию с помощью команды 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 автоматически монтирует файловые системы при их создании или начальной загрузке системы. Команда 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

devices/nodevices

exec

exec/noexec

readonly

ro/rw

setuid

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

Для размонтирования файловых систем используется подкоманда 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

Подобно точкам монтирования, 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

В то время как для большинства файловых систем разрешение или запрет совместного использования устанавливаются автоматически в ходе начальной загрузки, создания и уничтожения, некоторые файловые системы требуют явного запрета совместного использования. Для этого применяется команда zfs unshare. Пример:


# zfs unshare tank/home/tabriz

Выполнение этой команды приводит к запрету совместного использования файловой системы tank/home/tabriz. Для запрета совместного использования всех файловых систем ZFS необходимо указать параметр - a.


# zfs unshare -a

Разрешение совместного использования файловых систем ZFS

В большинстве случаев автоматическое поведение 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 значительно проще и требует меньших усилий, чем традиционная модель. Однако в некоторых случаях может оказаться удобнее управлять совместным использованием файловой системы согласно уже знакомой модели.