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

Глава 6 Управление файловыми системами ZFS

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

Файловая система ZFS строится на основе пула устройств хранения. Файловые системы могут динамически создаваться и уничтожаться без необходимости распределения или форматирования основного пространства. Поскольку файловые системы являются легковесными и представляют собой центральную точку администрирования в ZFS, обычно создается множество таких систем.

Администрирование файловых систем ZFS осуществляется с помощью команды zfs. Команда zfs имеет ряд подкоманд, выполняющих определенные операции в файловых системах. В данной главе эти подкоманды рассматриваются более подробно. С помощью этой команды также осуществляется управление снимками, томами и клонами, однако в данной главе эти функции описываются очень кратко. Для получения дополнительной информации о снимках и клонах см. Глава 7Работа со снимками и клонами ZFS. Для получения дополнительной информации о томах ZFS см. Тома ZFS.


Примечание –

Термин набор данных используется в этой главе как общий термин, обозначающий файловую систему, снимок, клон или том.


В этой главе содержатся следующие разделы:

Создание и уничтожение файловых систем ZFS

Для создания и уничтожения файловых систем ZFS используются команды zfs create и zfs destroy.

Создание файловой системы ZFS

Файловые системы ZFS создаются с помощью команды zfs create. Подкоманда create может иметь только один аргумент: имя создаваемой файловой системы. Имя файловой системы указывается в качестве пути, начиная с имени пула:

имя_пула/[имя_файловой_системы/]имя_файловой_системы

Имя пула и следующие за ним имена файловых систем определяют путь к местоположению в иерархии, где будет создана новая файловая система. Все промежуточные файловые системы должны уже существовать в пуле. Последнее имя в пути определяет имя файловой системы, которую требуется создать. Имя файловой системы должно соответствовать соглашениям по присвоению имен, описанным в разделе Требования к именованию компонентов ZFS.

В следующем примере файловая система с именем bonwick создается в файловой системе tank/home.


# zfs create tank/home/bonwick

ZFS автоматически монтирует новую файловую систему в случае ее успешного создания. По умолчанию файловые системы монтируются как /набор_данных с использованием пути, указанного для файловой системы с помощью подкоманды create. В этом примере новая файловая система bonwick монтируется как /tank/home/bonwick. Дополнительная информация об автоматическом управлении точками монтирования приведена в разделе Управление точками монтирования ZFS.

Для получения дополнительной информации о команде zfs create см. zfs(1M).

При создании файловой системы также можно указать ее свойства.

В следующем примере для файловой системы tank/home указывается и создается точка монтирования /export/zfs.


# zfs create -o mountpoint=/export/zfs tank/home

Для получения дополнительной информации о свойствах файловой системы см. Введение в свойства ZFS.

Уничтожение файловой системы ZFS

Для уничтожения файловой системы ZFS используется команда zfs destroy. Уничтоженная файловая система автоматически размонтируется, и ее совместное использование прекращается. Дополнительная информация об автоматическом управлении монтированием или общими ресурсами приведена в разделе Автоматические точки монтирования.

В следующем примере уничтожается файловая система tabriz.


# zfs destroy tank/home/tabriz

Внимание – Внимание –

Запрос на подтверждение при указании подкоманды destroy не выводится. При выполнении этой команды следует соблюдать особую осторожность.


Если уничтожаемая файловая система находится в состоянии занятости и не может быть размонтирована, то команда zfs destroy завершится сбоем. Для уничтожения активной файловой системы можно указать параметр -f. Этот параметр следует использовать с осторожностью, поскольку он может приводить к размонтированию, прекращению совместного использования и уничтожению активных файловых систем, что может вызвать непредсказуемое поведение приложений.


# zfs destroy tank/home/ahrens
cannot unmount 'tank/home/ahrens': Device busy

# zfs destroy -f tank/home/ahrens

Команда zfs destroy также не может быть выполнена при наличии в файловой системе дочерних элементов. Для рекурсивного уничтожения файловой системы и всех дочерних элементов используется параметр -r. Следует отметить, что при рекурсивном уничтожении также уничтожаются снимки, поэтому этот параметр следует использовать с осторожностью.


# zfs destroy tank/ws
cannot destroy 'tank/ws': filesystem has children
use '-r' to destroy the following datasets:
tank/ws/billm
tank/ws/bonwick
tank/ws/maybee

# zfs destroy -r tank/ws

Если для файловой системы, подлежащей уничтожению, существуют непрямые зависимые элементы, то выполнение описанной команды для рекурсивного уничтожения также невозможно. Для уничтожения всех зависимых элементов, включая клонированные файловые системы вне целевой иерархии, необходимо указать параметр -R. Будьте особенно осторожны с этим параметром.


# zfs destroy -r tank/home/schrock
cannot destroy 'tank/home/schrock': filesystem has dependent clones
use '-R' to destroy the following datasets:
tank/clones/schrock-clone

# zfs destroy -R tank/home/schrock

Внимание – Внимание –

При указании параметра -f, -r или -R запрос подтверждения не выводится, поэтому эти параметры следует использовать с осторожностью.


Для получения дополнительной информации о снимках и клонах см. Глава 7Работа со снимками и клонами ZFS.

Переименование файловой системы ZFS

Для переименования файловых систем используется команда zfs rename. С помощью подкоманды rename выполняются следующие операции:

В следующем примере подкоманда rename используется для простого переименования файловой системы:


# zfs rename tank/home/kustarz tank/home/kustarz_old

В данном примере файловая система kustarz переименовывается в kustarz_old.

Ниже приведен пример использования команды zfs rename для перемещения файловой системы.


# zfs rename tank/home/maybee tank/ws/maybee

В этом примере файловая система maybee перемещается из tank/home в tank/ws. При перемещении файловой системы посредством переименования новое местоположение должно находиться в пределах того же пула и иметь достаточную емкость для размещения новой файловой системы. Если новое местоположение не обеспечивает достаточного пространства, возможно, по причине превышения квоты, переименование невозможно.

Для получения дополнительной информации о квотах см. Настройки квот и резервируемого пространства в ZFS.

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

Для получения информации о переименовании снимков см. Переименование снимков ZFS.

Введение в свойства ZFS

Свойства – это основной механизм, используемый для управления поведением файловых систем, томов, снимков и клонов. Если не указано иное, свойства, определенные в разделе, применяются ко всем типам наборов данных.

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

Большинство устанавливаемых свойств также наследуется. Наследуемое свойство – это свойство, которое при установке для родительского элемента распространяется на все дочерние элементы.

Все наследуемые свойства имеют связанный источник. Этот источник определяет выбор значения свойства. Ниже перечислены возможные значения источников свойств:

local

Источник local указывает, что свойство было явно задано для набора данных с помощью команды zfs set, как описано в разделе Установка свойств ZFS.

inherited from имя_набора_данных

Значение inherited from имя_набора_данных означает, что свойство было унаследовано от соответствующего родительского элемента.

default

Значение default означает, что значение свойства не было унаследовано или установлено на локальном уровне. Этот источник задается при отсутствии родительского элемента с источником local.

В следующей таблице перечислены системные свойства файловой системы ZFS – как доступные только для чтения, так и настраиваемые. Особо выделены системные свойства, доступные только для чтения. Все прочие системные свойства, перечисленные в этой таблице, являются настраиваемыми. Для получения информации о пользовательских свойствах см. Пользовательские свойства ZFS.

Таблица 6–1 Описание системных свойств ZFS

Имя свойства 

Тип 

Значение по умолчанию 

Описание 

aclinherit

Строка 

secure

Используется для управления наследованием записей списков ACL при создании файлов и каталогов. Возможные значения: discard, noallow, secure и passthrough. Описание этих значений приведено в разделе Режимы свойств списков ACL.

aclmode

Строка 

groupmask

Используется для управления изменением записей списков ACL при выполнении операции chmod. Возможные значения: discard, groupmask и passthrough. Описание этих значений приведено в разделе Режимы свойств списков ACL.

atime

Логическое значение 

on

Используется для управления обновлением времени доступа к файлам при их чтении. Отключение этого свойства запрещает трафик записи при чтении файлов и может существенно повысить быстродействие, но при этом могут возникнуть трудности с почтовыми программами и подобными им служебными программами.

available

Число 

нет 

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

На это свойство можно также ссылаться по сокращенному имени столбца avail.

Для получения дополнительной информации об учете пространства см. Учет пространства ZFS.

canmount

Логическое значение 

on

Определяет возможность монтирования данной файловой системы с помощью команды zfsmount. Это свойство можно установить в любой файловой системе, и само свойство не является наследуемым. При значении этого свойства off точка монтирования может быть унаследована дочерними файловыми системами, но сама файловая система никогда не монтируется.

Когда задан параметр noauto, набор данных можно монтировать и размонтировать только явно. Набор данных не монтируется автоматически при его создании или импорте. Он также не монтируется командой zfs mount- a и не размонтируется командой zfs unmount-a.

Дополнительные сведения приведены в разделе Свойство canmount.

checksum

Строка 

on

Используется для настройки контрольной суммы в целях проверки целостности данных. По умолчанию используется значение on, задающее автоматический выбор соответствующего алгоритма (в данном случае fletcher2). Возможные значения: on, off, fletcher2, fletcher4 и sha256. Значение off отключает проверку целостности пользовательских данных. Значение off использовать не рекомендуется.

compression

Строка 

off

Включение или выключение сжатия для этого набора данных. Доступные значения: on , off, lzjb, gzip и gzip-N. В настоящее время значения lzjb, gzip и gzip- N имеют тот же эффект, что и значение on. По умолчанию установлено значение off. Активация сжатия в файловой системе с существующими данными приводит к сжатию только новых данных. Существующие данные не сжимаются.

Это свойство может также указываться сокращенным именем столбца: compress.

compressratio

Число 

нет 

Свойство только для чтения, определяющее достигнутую степень сжатия для набора данных, выражаемую в виде множителя. Включить сжатие можно с помощью команды zfs set compression=on набор_данных.

Рассчитывается на основе логического размера всех файлов и объема связанных физических данных. Включает явное сокращение, достигаемое за счет использования свойства compression .

copies

Число 

1

Задает количество копий пользовательских данных для файловой системы. Доступные значения: 1, 2 или 3. Эти копии являются дополнительными по отношению к избыточности уровня пула. Пространство, используемое несколькими копиями пользовательских данных, относится на счет соответствующего файла и набора данных с учетом квот и резервирований. Кроме того, если разрешено создание нескольких копий, то обновляется свойство used. Это свойство устанавливается при создании файловой системы, поскольку изменение его значения в существующей файловой системе влияет только на новые данные.

creation

Строка 

нет 

Свойство только для чтения, определяющее дату и время создания набора данных.

devices

Логическое значение 

on

Определяет возможность открытия файлов устройств в файловой системе.

exec

Логическое значение 

on

Определяет возможность выполнения программ в файловой системе. Кроме того, при установке значения off запрещаются вызовы mmap(2) с PROT_EXEC.

mounted

Логическое значение 

нет 

Свойство только для чтения, которое определяет, монтируется ли в настоящее время файловая система, клон или снимок. Это свойство не применяется в отношении томов. Возможные значения: yes или no.

mountpoint

Строка 

нет 

Определяет точку монтирования, используемую для этой файловой системы. При изменении свойства mountpoint для файловой системы эта файловая система и все дочерние элементы, наследующие точку монтирования, размонтируются. При установке значения legacy они остаются размонтированными. В противном случае они автоматически перемонтируются в новом местоположении, если свойство ранее имело значениеlegacy или none, либо если они были смонтированы до изменения свойства. Кроме того, настройки совместного использования всех файловых систем адаптируются согласно новому местоположению.

Для получения дополнительной информации об использовании этого свойства см. Управление точками монтирования ZFS.

primarycache

Строка 

off

Управляет содержимым для кэширования в ARC. Возможными значениями являются all, none и metadata. При установке на all выполняется кэширование данных пользователя и метаданных. При установке на none кэширование данных пользователя и метаданных не выполняется. При установке на metadata выполняется кэширование только метаданных. По умолчанию установлено значение all.

origin

Строка 

нет 

Свойство только для чтения, предназначенное для клонированных файловых систем или томов и определяющее снимок, на основе которого был создан клон. До тех пор пока клон существует, источник не может быть уничтожен (даже при помощи параметров -r и -f).

Для неклонированных файловых систем устанавливается значение none.

quota

Число (или none)

none

Определяет пределы пространства, которое могут занимать набор данных и дочерние элементы. Это свойство устанавливает жесткий предел по используемому пространству, включая все пространство, занимаемое дочерними элементами, в т.ч. файловыми системами и снимками. Установка квоты для дочернего элемента набора данных, для которого уже задана квота, не переопределяет квоту родительского элемента, но устанавливает дополнительный предел. Квоты не могут быть заданы для томов, поскольку свойство volsize выступает в качестве неявной квоты.

Для получения информации об установке квот см. Установка квот в файловых системах ZFS.

readonly

Логическое значение 

off

Определяет возможность изменения набора данных. При установке значения on изменить набор данных невозможно.

Это свойство может также указываться сокращенным именем столбца: rdonly.

recordsize

Число 

128K

Указывает рекомендуемый размер блока для файлов в файловой системе.

Это свойство может также указываться сокращенным именем столбца: recsize. Подробное описание приведено в разделе Свойство recordsize.

referenced

Число 

нет 

Свойство только для чтения, определяющее объем данных набора, которые могут использоваться (или не использоваться) совместно с другими наборами данных в пуле.

При создании снимка или клона для него первоначально задается тот же объем пространства, что и для файловой системы или снимка, на основе которого он был создан, поскольку их содержание идентично. 

Это свойство может также указываться сокращенным именем столбца: refer.

refquota

Число (или "none") 

none

Свойство задает объем пространства, доступного для набора данных. Посредством этого свойства устанавливается жесткий лимит объема используемого пространства. Этот жесткий предел не включает пространство, используемое дочерними элементами, такими как снимки и клоны.

refreservation

Число (или "none") 

none

Свойством определяется минимальный объем пространства, гарантированного для набора данных без учета дочерних элементов, таких как снимки и клоны. Если объем используемого пространства ниже этого значения, то считается, что набор данных занимает пространство, указанное свойством refreservation. Резервирование refreservationучитывается при расчете используемого пространства родительских наборов данных и сопоставляется с квотами и резервированием для родительских наборов данных.

Если указано свойство refreservation, то иметь снимок разрешается только при наличии в пуле достаточного свободного пространства (за пределами данного резервирования) для размещения текущего объема байт referenced в наборе данных.

Это свойство может также указываться сокращенным именем столбца: refreserv.

reservation

Число (или "none") 

none

Минимальный объем пространства, гарантированного для набора данных и дочерних элементов. Если объем используемого пространства ниже этого значения, то считается, что набор данных занимает указанное резервируемое пространство. Резервирование учитывается при расчете используемого пространства родительских наборов данных и сопоставляется с квотами и резервированием для родительских наборов данных.

Это свойство может также указываться сокращенным именем столбца: reserv.

Для получения дополнительной информации см. Настройка резервируемого пространства в файловых системах ZFS.

secondarycache

Строка 

off

Управляет содержимым для кэширования в L2ARC. Возможными значениями являются all, none и metadata. При установке на all выполняется кэширование данных пользователя и метаданных. При установке на none кэширование данных пользователя и метаданных не выполняется. При установке на metadata выполняется кэширование только метаданных. По умолчанию установлено значение all.

setuid

Логическое значение 

on

Определяет значение бита setuid в файловой системе.

sharenfs

Строка 

off

Определяет доступность файловой системы через NFS и используемые для этого параметры. При выборе значения on команда zfs share вызывается без каких-либо параметров. В противном случае команда zfs share вызывается с параметрами, эквивалентными содержимому свойства. При выборе значения off управление файловой системой осуществляется с использованием старых команд share и unshare и файла dfstab.

Для получения дополнительной информации о совместном использовании файловых систем ZFS см. Разрешение и запрет совместного использования файловых систем ZFS.

snapdir

Строка 

hidden

Определяет, является ли каталог .zfs скрытым или видимым в корне файловой системы. Дополнительная информация об использовании снимков приводится в разделе Краткий обзор снимков ZFS.

type

Строка 

нет 

Свойство только для чтения, определяющее набор данных как filesystem (файловая система или клон), volume (том) или snapshot (снимок).

used

Число 

нет 

Свойство только для чтения, определяющее объем пространства, занимаемого набором данных и всеми дочерними элементами.

Подробное описание приведено в разделе Свойство used.

usedbychildren

Число 

off 

Доступное только для чтения свойство, определяющее объем пространства, используемого дочерними элементами этого набора данных, который будет освобожден после разрушения всех этих дочерних элементов. Сокращением этого свойства является usedchild.

usedbydataset

Число 

off 

Доступное только для чтения свойство, определяющее объем пространства, используемого самим набором данных, которое будет освобождено после разрушения набора данных, после того как сначала будут разрушены любые снимки и удалены любые refreservation. Сокращением этого свойства является usedds.

usedbyrefreservation

Число 

off 

Доступное только для чтения свойство, определяющее объем пространства, используемого набором refreservation для этого набора данных, которое будет освобождено при удалении refreservation. Сокращением этого свойства является usedrefreserv.

usedbysnapshots

Число 

off 

Доступное только для чтения свойство, которое определяет объем пространства, занимаемого снимками этого набора данных. В частности, это объем пространства, которое будет освобождено в случае разрушения всех снимков этого набора данных. Обратите внимание, что это не просто сумма снимков свойств used, поскольку пространство может совместно использоваться несколькими снимками. Сокращением этого свойства является usedsnap.

volsize

Число 

нет 

Указывает логический размер тома.

Подробное описание приведено в разделе Свойство volsize.

volblocksize

Число 

8 КБ

Указывает размер блока для томов. После записи тома изменить размер блока невозможно, поэтому его необходимо устанавливать при создании тома. Стандартный размер блока для томов составляет 8 КБ. Допустимым является любой размер от 512 байт до 128 КБ, соответствующий степени двойки.

Это свойство может также указываться сокращенным именем столбца: volblock.

zoned

Логическое значение 

нет 

Определяет, был ли набор данных добавлен в неглобальную зону. При установке этого свойства точка монтирования в глобальной зоне не определяется, и ZFS не может монтировать такую файловую систему по запросу. Это свойство указывается при первой установке зоны для всех добавляемых файловых систем.

Для получения дополнительной информации об использовании ZFS с установленными зонами см. Использование ZFS в системе Solaris с установленными зонами.

xattr

Логическое значение 

on

Активирует или деактивирует расширенные атрибуты для данной файловой системы. По умолчанию установлено значение on.

Системные свойства ZFS, доступные только для чтения

Системные свойства, доступные только для чтения, – это свойства, которые могут быть считаны, но не могут указываться вручную. Системные свойства, доступные только для чтения, не наследуются. Некоторые системные свойства применяются только в отношении определенного типа набора данных. В таких случаях в описании в Таблица 6–1 указывается тип набора данных.

Ниже перечислены системные свойства, доступные только для чтения. Их описание приведено в Таблица 6–1.

Для получения дополнительной информации об учете пространства, включая сведения о свойствах used, referenced и available, см. Учет пространства ZFS.

Свойство used

Объем пространства, занимаемого набором данных и всеми дочерними элементами. Это значение сверяется с квотой и резервированием, указанными для набора данных. Используемое пространство не учитывает резервирование для набора данных, но учитывает резервирование для любых дочерних наборов данных. Объем пространства родительского элемента, занимаемого набором данных, а также объем освобожденного пространства в случае рекурсивного уничтожения набора данных – это большее из объема используемого и объема резервируемого пространства.

При создании снимков их пространство первоначально используется совместно с файловой системой и, возможно, с предшествующими снимками. При изменении файловой системы пространство, которое ранее использовалось совместно, полностью передается снимку и учитывается при определении занятого снимком пространства. Используемое снимком пространство включает только его данные. Кроме того, удаление снимков может увеличить объем пространства, отведенного под другие снимки и используемого этими снимками. Для получения дополнительной информации по вопросам, связанным со снимками и пространством, см. Поведение при недостатке пространства.

При определении объема используемого, доступного и занятого пространства не учитываются отложенные изменения. Как правило, отложенные изменения существуют в течение нескольких секунд. Запись изменения на диск с помощью команды fsync(3c) или O_SYNC не гарантирует немедленного обновления информации об использовании пространства.

Просмотр информации о свойствах usedbychildren, usedbydataset , usedbyrefreservation и usedbysnapshots возможен с помощью команды zfs list - o space. Данные свойства делят свойство used на пространства, занимаемые дочерними элементами. Дополнительная информация приведена в Таблица 6–1.

Настраиваемые системные свойства ZFS

Настраиваемые системные свойства – это свойства, значения которых могут быть как считаны, так и указаны вручную. Настраиваемые системные свойства указываются с помощью команды zfs set, как описано в разделе Установка свойств ZFS, или с помощью команды zfs create, как описано в разделе Создание файловой системы ZFS. За исключением квот и резервируемого пространства, настраиваемые системные свойства являются наследуемыми. Для получения дополнительной информации о квотах и резервировании см. Настройки квот и резервируемого пространства в ZFS.

Некоторые настраиваемые свойства применяются только в отношении определенного типа набора данных. В таких случаях в описании в Таблица 6–1 указывается соответствующий тип набора данных. Если это не указано специально, свойство применяется в отношении всех типов наборов данных: файловых систем, томов, клонов и снимков.

Ниже перечислены настраиваемые свойства. Их описание приведено в Таблица 6–1.

Свойство canmount

Если для этого свойства выбрано значение off, то монтирование файловой системы с помощью команды zfs mount или zfs mount -a невозможно. Это значение аналогично установке для свойства mountpoint значения none, за исключением того, что набор данных по-прежнему имеет стандартное свойство mountpoint, которое может наследоваться. Например, для этого свойства можно установить значение off и указать наследуемые свойства для дочерних файловых систем, но сама файловая система не может быть смонтирована или доступна для пользователей. В этом случае родительская файловая система со значением свойства off служит в качестве контейнера с настраиваемыми атрибутами. При этом сам контейнер остается недоступным.

В следующем примере создается пул userpool и для свойства canmount устанавливается значение off. Дочерние пользовательские файловые системы имеют одну общую точку монтирования /export/home . Свойства, устанавливаемые для родительской файловой системы, наследуются дочерними файловыми системами, однако сама родительская файловая система не монтируется.


# zpool create userpool mirror c0t5d0 c1t6d0
# zfs set canmount=off userpool
# zfs set mountpoint=/export/home userpool
# zfs set compression=on userpool
# zfs create userpool/user1
# zfs create userpool/user2
# zfs list -r userpool
NAME             USED  AVAIL  REFER  MOUNTPOINT
userpool         140K  8.24G  24.5K  /export/home
userpool/user1  24.5K  8.24G  24.5K  /export/home/user1
userpool/user2  24.5K  8.24G  24.5K  /export/home/user2

Если для свойства canmount указано значение noauto, то набор данных можно монтировать только явно (не автоматически). Программное обеспечение Solaris для обновления использует этот параметр таким образом, чтобы во время загрузки монтировались только наборы данных, относящиеся к активной среде начальной загрузки.

Свойство recordsize

Указывает рекомендуемый размер блока для файлов в файловой системе.

Это свойство предназначено исключительно для использования с базами данных, которые обращаются к файлам с записями фиксированного размера. ZFS автоматически регулирует размер блока в соответствии с внутренними алгоритмами, оптимизированными для типичных моделей доступа. Для баз данных, создающих крупные файлы, но обращающихся к файлам в небольших произвольных блоках, эти алгоритмы могут быть близки к оптимальным. Если для свойства recordsize указать значение, превышающее размер записи базы данных или равное ему, производительность может существенно возрасти. Использование этого свойства для универсальных файловых систем достаточно затруднительно и может негативно сказаться на производительности. Можно указать размер не менее 512 и не более 128 КБ, соответствующий степени двойки. Изменение свойства recordsize для файловой системы оказывает влияние только на файлы, созданные после изменения. На существующие файлы изменения не распространяются.

Это свойство может также указываться сокращенным именем столбца: recsize.

Свойство volsize

Определяет логический размер тома. По умолчанию при создании тома резервируется пространство, равное объему тома. Любые изменения свойства volsize отражаются в эквивалентных изменениях резервируемого пространства. Эти проверки используются для предотвращения непредвиденного с точки зрения пользователей поведения системы. Том, который содержит меньше пространства, чем было указано как доступное, может вызвать непредсказуемое поведение или повреждение данных, в зависимости от способов использования этого тома. Эти последствия также могут возникнуть в случае изменения размера тома в процессе его использования, в частности, при уменьшении размера. При корректировке размера тома необходимо соблюдать особую осторожность.

Несмотря на то что это не рекомендуется, можно создать разреженный том путем установки флага -s для команды zfs create -V или путем изменения резервируемого пространства после создания тома. Разреженный том – это том, резервируемое пространство которого не равно размеру этого тома. В случае разреженного тома изменение свойства volsize не отражается на резервируемом пространстве.

Для получения дополнительной информации об использовании томов см. Тома ZFS.

Пользовательские свойства ZFS

Помимо стандартных системных свойств, ZFS поддерживает произвольные пользовательские свойства. Пользовательские свойства не влияют на поведение ZFS, но их можно использовать для добавления пользовательской информации к наборам данных.

Имена пользовательских свойств должны соответствовать следующим характеристикам:

Подразумевается, что имя свойства разделяется на следующие два компонента, однако это требование не является обязательным для ZFS:


module:property

При программном использовании пользовательских свойств для компонента модуль имен свойств следует указать имя домена DNS, элементы которого представлены в обратном порядке. Это позволит снизить вероятность использования двух независимо созданных пакетов с одним именем свойства в различных целях. Имена свойств, начинающиеся с com.sun., зарезервированы для использования Sun Microsystems.

Значения пользовательских свойств имеют следующие характеристики:

Пример:


# zfs set dept:users=finance userpool/user1
# zfs set dept:users=general userpool/user2
# zfs set dept:users=itops userpool/user3

Все команды, выполняемые по отношению к свойствам, например zfs list, zfs get, zfs set и т. д., могут использоваться для управления как системными, так и пользовательскими свойствами.

Пример:


zfs get -r dept:users userpool
NAME            PROPERTY    VALUE           SOURCE
userpool        dept:users  all             local
userpool/user1  dept:users  finance         local
userpool/user2  dept:users  general         local
userpool/user3  dept:users  itops           local

Для сброса пользовательского свойства используется команда zfs inherit. Пример:


# zfs inherit -r dept:users userpool

Если свойство не определено ни в одном родительском наборе данных, оно удаляется полностью.

Запрос информации о файловой системе ZFS

Команда zfs list обеспечивает расширяемый механизм для просмотра и запроса информации о наборе данных. В этом разделе поясняются как базовые, так и сложные запросы.

Вывод базовой информации ZFS

Для просмотра базовой информации о наборе данных используется команда zfs list без параметров. По этой команде отображаются имена всех наборов данных в системе, включая свойства used, available, referenced и mountpoint. Для получения дополнительной информации об этих свойствах см. Введение в свойства ZFS.

Пример:


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
pool                   476K  16.5G    21K  /pool
pool/clone              18K  16.5G    18K  /pool/clone
pool/home              296K  16.5G    19K  /pool/home
pool/home/marks        277K  16.5G   277K  /pool/home/marks
pool/home/marks@snap      0      -   277K  -
pool/test               18K  16.5G    18K  /test

Эта команда может использоваться для отображения определенных наборов данных путем ввода имени набора данных в командной строке. Кроме того, для рекурсивного отображения всех дочерних элементов набора данных можно ввести параметр -r. Пример:


# zfs list -r pool/home/marks
NAME                   USED  AVAIL  REFER  MOUNTPOINT
pool/home/marks        277K  16.5G   277K  /pool/home/marks
pool/home/marks@snap      0      -   277K  -

В команде zfs list должны указываться абсолютные пути к наборам данных, снимкам и томам. Пример:


# zfs list /pool/home/marks
NAME              USED  AVAIL  REFER  MOUNTPOINT
pool/home/marks   277K  16.5G   277K  /pool/home/marks

Ниже приведен пример выводимой информации о tank/home/chua и всех дочерних наборах данных.


# zfs list -r tank/home/chua
NAME                        USED  AVAIL  REFER  MOUNTPOINT 
tank/home/chua		          26.0K  4.81G  10.0K  /tank/home/chua 
tank/home/chua/projects       16K  4.81G   9.0K  /tank/home/chua/projects
tank/home/chua/projects/fs1    8K  4.81G     8K  /tank/home/chua/projects/fs1 
tank/home/chua/projects/fs2    8K  4.81G     8K  /tank/home/chua/projects/fs2

Для получения дополнительной информации о команде zfs list см. zfs(1M).

Создание сложных запросов ZFS

Вывод команды zfs list можно настроить с помощью параметров -o, -f и -H.

Параметр -o, после которого приводится список требуемых свойств через запятую, используется для настройки выводимых значений свойств. В нем можно указать любое допустимое свойство набора данных. Список всех поддерживаемых свойств набора данных приведен в разделе Введение в свойства ZFS. Помимо описанных свойств, список параметров -o также может содержать литерал name. Он указывает на необходимость включения в выводимые данные имени набора данных.

В следующем примере команда zfs list используется для отображения имени набора данных наряду со свойствами sharenfs и mountpoint .


# zfs list -o name,sharenfs,mountpoint
NAME                   SHARENFS         MOUNTPOINT
tank                   off              /tank
tank/home              on               /tank/home
tank/home/ahrens       on               /tank/home/ahrens
tank/home/bonwick      on               /tank/home/bonwick
tank/home/chua         on               /tank/home/chua
tank/home/eschrock     on               legacy
tank/home/moore        on               /tank/home/moore
tank/home/tabriz       ro               /tank/home/tabriz

Для указания типов выводимых наборов данных используется параметр-t. Допустимые типы представлены в следующей таблице.

Таблица 6–2 Типы наборов данных ZFS

Тип 

Описание 

filesystem

Файловые системы и клоны 

volume

Тома 

snapshot

Снимки 

После параметра -t указывается список типов наборов данных через запятую. Ниже представлен пример одновременного использования параметров -t и - o для вывода имен всех файловых систем и значений свойства used для каждой из них:


# zfs list -t filesystem -o name,used
NAME              USED
pool              476K
pool/clone         18K
pool/home         296K
pool/home/marks   277K
pool/test          18K

Параметр -H позволяет исключить заголовок zfs list из выводимых данных. При использовании параметра -H все пробелы заменяются на символы табуляции. Этот параметр можно использовать при необходимости получения выходных данных, пригодных для анализа, например, при создании сценариев. Далее приведен пример выходных данных, полученных с помощью команды zfs list с параметром -H:


# zfs list -H -o name
pool
pool/clone
pool/home
pool/home/marks
pool/home/marks@snap
pool/test

Управление свойствами ZFS

Управление свойствами набора данных осуществляется с помощью подкоманд set, inherit и get команды zfs.

Установка свойств ZFS

Для установки любого настраиваемого свойства набора данных используется команда zfs set. Для настройки свойств при создании набора данных используется команда zfs create. Список настраиваемых свойств набора данных приведен в разделе Настраиваемые системные свойства ZFS. Команда zfs set принимает последовательность свойств/значений в формате свойство=значение и имя набора данных.

В следующем примере для свойства atime в tank/home устанавливается значение off. За один вызов команды zfs set можно установить или изменить только одно свойство.


# zfs set atime=off tank/home

Кроме того, любое свойство можно установить при создании файловой системы. Пример:


# zfs create -o atime=off tank/home

Числовые значения свойств можно указывать с использованием следующих простых суффиксов (в порядке возрастания): BKMGTPEZ. Любой из этих суффиксов может сопровождаться параметром b с указанием битов, за исключением суффикса B, который уже определяет байты. Следующие четыре вызова zfs set эквивалентны числовым выражениям, указывающим на то, что для свойства quota файловой системы tank/home/marks устанавливается значение 50 ГБ:


# zfs set quota=50G tank/home/marks
# zfs set quota=50g tank/home/marks
# zfs set quota=50GB tank/home/marks
# zfs set quota=50gb tank/home/marks

Значения нечисловых свойств определяются с учетом регистра и должны указываться в нижнем регистре, за исключением свойств mountpoint и sharenfs. В значениях этих свойств могут использоваться символы верхнего и нижнего регистра.

Для получения дополнительной информации о команде zfs set см. zfs(1M).

Наследование свойств ZFS

Все настраиваемые свойства, за исключением квот и резервируемого пространства, наследуют значения родительского элемента (кроме случаев, когда для дочернего элемента явно указаны квота или резервируемое пространство). Если родительский элемент не имеет явно указанного набора значений наследуемого свойства, используется значение свойства по умолчанию. Для сброса значения свойства используется команда zfs inherit, в результате выполнения которой наследуются параметры родительского элемента.

В следующем примере команда zfs set используется для активации сжатия в файловой системе tank/home/bonwick. Затем выполняется команда zfs inherit для возврата исходного значения свойства compression. Таким образом, это свойство наследует параметр по умолчанию off. Поскольку для home и tank свойство compression не указано на локальном уровне, используется значение по умолчанию. Если бы для обоих элементов сжатие было включено, то использовалось бы значение, указанное в ближайшем родительском элементе (home в данном примере).


# zfs set compression=on tank/home/bonwick
# zfs get -r compression tank
NAME             PROPERTY      VALUE                    SOURCE
tank             compression   off                      default
tank/home        compression   off                      default
tank/home/bonwick compression   on                      local
# zfs inherit compression tank/home/bonwick
# zfs get -r compression tank
NAME             PROPERTY      VALUE                    SOURCE
tank             compression   off                      default
tank/home        compression   off                      default
tank/home/bonwick compression  off                      default

При вводе параметра r подкоманда -inherit применяется рекурсивно. В следующем примере эта команда определяет значение свойства compression, наследуемого tank/home и всеми дочерними элементами.


# zfs inherit -r compression tank/home

Примечание –

Необходимо учитывать, что при использовании параметра -r текущее значение свойства для всех дочерних наборов данных сбрасывается.


Для получения дополнительной информации о команде zfs см. zfs(1M).

Запрос свойств ZFS

Наиболее простым способом запроса значений свойств является выполнение команды zfs list. Для получения дополнительной информации см.Вывод базовой информации ZFS. Однако для сложных запросов и сценариев необходимо использовать команду zfs get. Это позволит получить более подробную информацию в требуемом формате.

Команда zfs get используется для извлечения свойств набора данных. Ниже приведен пример извлечения одного свойства набора данных:


# zfs get checksum tank/ws
NAME             PROPERTY       VALUE                      SOURCE
tank/ws          checksum       on                         default

В четвертом столбце SOURCE указывается, где было установлено значение свойства. Возможные источники перечислены в следующей таблице.

Таблица 6–3 Возможные значения SOURCE (zfs get)

Источник 

Описание 

default

Это свойство не было явно установлено для этого набора данных и его родительских элементов. Для этого свойства используется значение по умолчанию. 

inherited from имя_набора_данных

Это свойство наследуется от родительского элемента имя_набора_данных.

local

Это свойство было явно установлено для этого набора данных с помощью команды zfs set.

temporary

Это свойство было указано с помощью параметра zfs mount -o и действует только на время монтирования. Для получения дополнительной информации о временных свойствах точки монтирования см. Использование временных свойств монтирования.

- (none) 

Это свойство доступно только для чтения. Его значение генерируется ZFS. 

Для извлечения всех свойств набора данных используется специальное ключевое слово all. Ниже приведены примеры использования ключевого слова all для извлечения всех существующих свойств набора данных:


# zfs get all pool
NAME  PROPERTY              VALUE                  SOURCE
pool  type                  filesystem             -
pool  creation              Thu Aug 27  9:33 2009  -
pool  used                  72K                    -
pool  available             66.9G                  -
pool  referenced            21K                    -
pool  compressratio         1.00x                  -
pool  mounted               yes                    -
pool  quota                 none                   default
pool  reservation           none                   default
pool  recordsize            128K                   default
pool  mountpoint            /pool                  default
pool  sharenfs              off                    default
pool  checksum              on                     default
pool  compression           on                     default
pool  atime                 on                     default
pool  devices               on                     default
pool  exec                  on                     default
pool  setuid                on                     default
pool  readonly              off                    default
pool  zoned                 off                    default
pool  snapdir               hidden                 default
pool  aclmode               groupmask              default
pool  aclinherit            restricted             default
pool  canmount              on                     default
pool  shareiscsi            off                    default
pool  xattr                 on                     default
pool  copies                1                      default
pool  version               4                      -
pool  utf8only              off                    -
pool  normalization         none                   -
pool  casesensitivity       sensitive              -
pool  vscan                 off                    default
pool  nbmand                off                    default
pool  sharesmb              off                    default
pool  refquota              none                   default
pool  refreservation        none                   default
pool  primarycache          all                    default
pool  secondarycache        all                    default
pool  usedbysnapshots       0                      -
pool  usedbydataset         21K                    -
pool  usedbychildren        51K                    -
pool  usedbyrefreservation  0                      -

Примечание –

Свойства casesensitivity, nbmand, normalization, sharemgrutf8only и vscan имеют фиксированные значения и не поддерживаются в выпуске Solaris 10.


Параметр -s команды zfs get позволяет указать выводимые свойства по типу источника. При выборе этого параметра выводится список требуемых типов источников через запятую. Отображаются только свойства с указанным типом источника. Допустимы следующие типы источника: local, default, inherited, temporary иnone. В следующем примере отображены все свойства, настроенные локально для пула.


# zfs get -s local all pool
NAME             PROPERTY      VALUE                      SOURCE
pool             compression   on                         local

Все перечисленные параметры могут комбинироваться с параметром -r для рекурсивного вывода указанных свойств для всех дочерних элементов указанного набора данных. Ниже приведен пример рекурсивного отображения всех временных свойств во всех наборах данных в tank:


# zfs get -r -s temporary all tank
NAME             PROPERTY       VALUE                      SOURCE
tank/home          atime          off                      temporary
tank/home/bonwick  atime          off                      temporary
tank/home/marks    atime          off                      temporary

Описанная функция позволяет выполнять запросы с помощью команды zfs get без указания целевой файловой системы, которые будут работать во всех пулах или файловых системах. Пример:


# zfs get -s local all
tank/home               atime          off                    local
tank/home/bonwick       atime          off                    local
tank/home/marks         quota          50G                    local

Для получения дополнительной информации о команде zfs get см. zfs(1M).

Запрос свойств ZFS для использования в сценариях

Команда zfs get поддерживает параметры и , предназначенные для сценариев. Параметр -H указывает на то, что следует пропустить информацию заголовка и преобразовать все пробелы в символы табуляции. Однородное заполнение пустого пространства обеспечивает пригодность данных для анализа без дополнительной обработки. Для настройки вывода используется параметр -o. После этого параметра указывается список выводимых значений через запятую. Все свойства, определенные в разделе Введение в свойства ZFS, а также литералы name, value, property и source можно включить в список параметра -o.

В следующем примере показано извлечение одиночного значения с использованием параметра -H и команды zfs get.


# zfs get -H -o value compression tank/home
on

Параметр -p представляет числовые значения в виде точных значений. Например, 1 МБ будет показано как 1000000. Этот параметр используется следующим образом:


# zfs get -H -o value -p used tank/home
182983742

Параметр -r можно использовать с любыми вышеупомянутыми параметрами для рекурсивного извлечения запрашиваемых значений для всех дочерних элементов. В следующем примере параметры -r, -o и- H использованы для извлечения имени набора данных и значения свойства used для export/home и дочерних элементов (без вывода заголовка):


# zfs get -H -o name,value -r used export/home
export/home     5.57G
export/home/marks       1.43G
export/home/maybee      2.15G

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

Настройки квот и резервируемого пространства в ZFS

Свойство quota используется для установки предела по объему пространства, занимаемого файловой системой. Также предусмотрено свойство reservation, которое гарантирует наличие определенного объема пространства для файловой системы. Оба свойства применяются в отношении набора данных, в котором они установлены, и дочерних элементов этого набора данных.

Таким образом, при установке квоты для набора данных tank/home общий объем пространства, используемого tank/home и всеми дочерними элементами, не может превышать эту квоту. Аналогичным образом, при настройке резервируемого пространства для tank/home система tank/home и все ее дочерние элементы будут использовать это пространство. Объем пространства, используемого набором данных и всеми его дочерними элементами, указывается в свойстве used.

Свойства refquota и refreservation могут использоваться для управления пространством файловой системы (без учета пространства, потребленного дочерними элементами, например снимками и клонами).

В данной версии Solaris можно установить квоту user или group для объема пространства, используемого файлами, относящимися к отдельному пользователю или группе. Свойства квот для пользователей или групп не могут быть установлены для тома в файловой системе до версии 4 или в пуле до версии 15.

При выборе механизма настройки квот и резервирования пространства, который лучше всего подходит для управления вашими файловыми системами, учитывайте следующие факторы :

Для получения подробной информации о настройке квот и резервируемого пространства см. Установка квот в файловых системах ZFS и Настройка резервируемого пространства в файловых системах ZFS.

Установка квот в файловых системах ZFS

Для настройки и просмотра квот ZFS используются команды zfs set и zfs get. В следующем примере для tank/home/bonwick установлена квота 10 ГБ.


# zfs set quota=10G tank/home/bonwick
# zfs get quota tank/home/bonwick
NAME              PROPERTY      VALUE                      SOURCE
tank/home/bonwick quota         10.0G                      local

Квоты ZFS также влияют на выходные данные команд zfs list и df. Пример:


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank/home             16.5K  33.5G  8.50K  /export/home
tank/home/bonwick     15.0K  10.0G  8.50K  /export/home/bonwick
tank/home/bonwick/ws  6.50K  10.0G  8.50K  /export/home/bonwick/ws
# df -h /export/home/bonwick
Filesystem             size   used  avail capacity  Mounted on
tank/home/bonwick       10G     8K    10G     1%    /export/home/bonwick

Следует отметить, что, несмотря на наличие в tank/home свободного пространства 33,5 ГБ, системам tank/home/bonwick и tank/home/bonwick/ws предоставляется только 10 ГБ свободного пространства, поскольку настроена квота для tank/home/bonwick.

Установить квоту меньше, чем используется для набора данных в настоящее время, невозможно. Пример:


# zfs set quota=10K tank/home/bonwick
cannot set quota for 'tank/home/bonwick': size is less than current used or 
reserved space

Для набора данных можно настроить свойствоrefquota, ограничивающее объем доступного набору пространства. Этот жесткий лимит не включает пространство, используемое дочерними элементами, такими как снимки и клоны. Пример:


# zfs set refquota=10g students/studentA
# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
profs               106K  33.2G    18K  /profs
students           57.7M  33.2G    19K  /students
students/studentA  57.5M  9.94G  57.5M  /students/studentA
# zfs snapshot students/studentA@today
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                     106K  33.2G    18K  /profs
students                 57.7M  33.2G    19K  /students
students/studentA        57.5M  9.94G  57.5M  /students/studentA
students/studentA@today      0      -  57.5M  -

Кроме того, для набора данных можно установить еще одну квоту для управления пространством, которое используется снимками. Пример:


# zfs set quota=20g students/studentA
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                     106K  33.2G    18K  /profs
students                 57.7M  33.2G    19K  /students
students/studentA        57.5M  9.94G  57.5M  /students/studentA
students/studentA@today      0      -  57.5M  -

В данном случае studentA может достичь жесткого предела, определяемого свойством refquota (10 ГБ), но может удалить файлы для восстановления, даже если существуют снимки.

В приведенном выше примере команда zfs list отображает меньшую квоту (10 и 20 ГБ). Чтобы увидеть обе квоты, используйте команду zfs get. Пример:


# zfs get refquota,quota students/studentA
NAME               PROPERTY  VALUE              SOURCE
students/studentA  refquota  10G                local
students/studentA  quota     20G                local

Настройка квот пользователя или группы в файловой системе ZFS

Для настройки квоты пользователя или группы используются команды zfs userquota и zfs groupquota.


# zfs create students/compsci
# zfs set userquota@student1=10G students/compsci
# zfs create students/labstaff
# zfs set groupquota@staff=20GB students/labstaff

Отображение текущей квоты quota или group выполняется следующим образом:


# zfs get userquota@student1 students/compsci
NAME              PROPERTY            VALUE               SOURCE
students/compsci  userquota@student1  10G                 local
# zfs get groupquota@staff students/labstaff
NAME               PROPERTY          VALUE             SOURCE
students/labstaff  groupquota@staff  20G               local

Просмотр информации об общем использовании пространства пользователя или группы можно выполнить с помощью запроса следующих свойств:


# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10G  
# zfs groupspace students/labstaff
TYPE         NAME   USED  QUOTA  
POSIX Group  root   217M   none  
POSIX Group  staff  217M    20G  

Если требуется получить информацию об использовании пространства пользователя или группы по отдельности, используется запрос для следующих свойств:


# zfs get userused@student1 students/compsci
NAME              PROPERTY           VALUE              SOURCE
students/compsci  userused@student1  455M               local
# zfs get groupused@staff students/labstaff
NAME               PROPERTY         VALUE            SOURCE
students/labstaff  groupused@staff  217M             local

Свойства квоты user и group не отображаются с помощью команд zfs get all dataset, которые используются для вывода перечня всех свойств файловой системы.

Удаление квот user или group выполняется следующим образом:


# zfs set userquota@user1=none students/compsci
# zfs set groupquota@staff=none students/labstaff

Квоты ZFS user и group имеют следующие функции:

Применение квот user или group может быть выполнено с задержкой в несколько секунд. Эта задержка означает, что, возможно, пользователи превысили свою квоту до того как система обнаружила это превышение квоты и отклонила дополнительные попытки записи, открыв при этом сообщение об ошибке EDQUOT.

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


# zfs set userquota@student1=10m students/compsci   
# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10M  
# quota student1
Block limit reached on /students/compsci

В случае сброса квоты, и если ограничение квоты более не превышается, для обзора квоты пользователя требуется использовать команду quota -v. Пример:


# zfs set userquota@student1=10GB students/compsci 
# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      227M   none  
POSIX User  student1  455M    10G  
# quota student1
# quota -v student1
Disk quotas for student1 (uid 201):
Filesystem     usage  quota  limit    timeleft  files  quota  limit    timeleft
/students/compsci
              466029 10485760 10485760     

Настройка резервируемого пространства в файловых системах ZFS

Настройка резервируемого пространства ZFS подразумевает распределение пространства пула, гарантированно доступного набору данных. Таким образом, зарезервировать для набора данных пространство, которое в настоящее время не доступно в пуле, невозможно. Общий объем всех указанных резервирований не может превышать объем неиспользуемого пространства в пуле. Для настройки и просмотра резервируемого пространства ZFS используются команды zfs set и zfs get. Пример:


# zfs set reservation=5G tank/home/moore
# zfs get reservation tank/home/moore
NAME             PROPERTY      VALUE                      SOURCE
tank/home/moore  reservation   5.00G                      local

Настройка резервируемого пространства ZFS может повлиять на выходные данные команды zfs list. Пример:


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank/home             5.00G  33.5G  8.50K  /export/home
tank/home/moore       15.0K  10.0G  8.50K  /export/home/moore

Обратите внимание, что система tank/home использует пространство объемом 5 ГБ, несмотря на то, что общий объем пространства, доступного для tank/home и ее дочерних элементов, значительно меньше 5 ГБ. Используемое пространство отражает пространство, зарезервированное для tank/home/moore. Настройки резервируемого пространства учитываются при отображении занятого пространства родительского набора данных и проверяются на соблюдение установленных квот и прочих резервирований.


# zfs set quota=5G pool/filesystem
# zfs set reservation=10G pool/filesystem/user1
cannot set reservation for 'pool/filesystem/user1': size is greater than 
available space

Набор данных может использовать больше пространства, чем определено в настройке резервируемого пространства, при условии наличия доступного незарезервированного пространства в пуле и соблюдении установленной для набора данных квоты. Пространство, зарезервированное для набора данных, не может быть занято другим набором данных.

Настройки резервируемого пространства не суммируются. Это означает, что при втором вызове команды zfs set для определения резервируемого пространства суммирование зарезервированного объема не выполняется. Напротив, вторая настройка заменяет собой первую.


# zfs set reservation=10G tank/home/moore
# zfs set reservation=5G tank/home/moore
# zfs get reservation tank/home/moore
NAME             PROPERTY      VALUE                      SOURCE
tank/home/moore  reservation   5.00G                      local

Свойство refreservation позволяет зарезервировать для набора данных пространство, без учета пространства, используемого снимками и клонами. Резервирование refreservation учитывается в пространстве, используемом родительскими наборами данных, и сопоставляется с квотами и резервированием для родительских наборов данных. Пример:


# zfs set refreservation=10g profs/prof1
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                    10.0G  23.2G    19K  /profs
profs/prof1                10G  33.2G    18K  /profs/prof1

Можно также настроить резервирование пространства для того же набора данных, чтобы гарантировать пространство для набора данных и для снимков. Пример:


# zfs set reservation=20g profs/prof1
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                    20.0G  13.2G    19K  /profs
profs/prof1                10G  33.2G    18K  /profs/prof1

Обычное резервирование учитывается в пространстве, используемом родительским элементом.

В приведенном выше примере команда zfs list отображает меньшую квоту (10 и 20 ГБ). Чтобы увидеть обе квоты, используйте команду zfs get. Пример:


# zfs get reservation,refreserv profs/prof1
NAME         PROPERTY        VALUE        SOURCE
profs/prof1  reservation     20G          local
profs/prof1  refreservation  10G          local

Если установлено свойство refreservation, то иметь снимок разрешается только при наличии в пуле достаточного свободного пространства (за пределами данного резервирования) для размещения текущего объема байт referenced в наборе данных.