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

Использование ZFS в системе Solaris с установленными зонами

В следующих разделах описывается использование ZFS в системе с зонами Solaris.

Для получения дополнительных сведений о настройке зон в системе с корневой файловой системой ZFS, с которой будет производиться перенос или применение исправлений с помощью Solaris Live Upgrade см. документы Перенос или обновление системы с зонами с помощью Solaris Live Upgrade (Solaris 10 10/08) или Перенос или обновление системы с зонами с помощью Solaris Live Upgrade (Solaris 10 5/09 и Solaris 10 10/09).

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

В приведенных ниже разделах термин "набор данных ZFS" относится к файловой системе или клону.

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

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

Рассмотрим следующие примеры взаимодействия при использовании ZFS в системе с установленными зонами Solaris:

Добавление файловых систем ZFS в неглобальную зону

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

Файловую систему ZFS можно добавить в неглобальную зону с помощью подкоманды add fs команды zonecfg. Пример:

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


# zonecfg -z zion
zonecfg:zion> add fs
zonecfg:zion:fs> set type=zfs
zonecfg:zion:fs> set special=tank/zone/zion
zonecfg:zion:fs> set dir=/export/shared
zonecfg:zion:fs> end

Эта команда добавляет файловую систему ZFS tank/zone/zion в уже настроенную зону zion, смонтированную на /export/shared. Свойство mountpoint файловой системы должно иметь значение legacy. Кроме того, эта файловая система не должна быть ранее смонтирована в другом местоположении. Администратор зоны может создавать и уничтожать файлы в файловой системе. Файловая система не может быть повторно смонтирована в другом местоположении. Также администратор зоны не может изменять свойства файловой системы, такие как "atime", "readonly", "compression" и т.д. За установку и контроль свойств файловой системы отвечает администратор глобальной зоны.

Для получения дополнительной информации о команде zonecfg и настройке типов ресурсов с помощью zonecfg см.Часть II, Зоны, в Руководство по системному администрированию: контейнеры в Solaris - управление ресурсами и зонами.

Делегирование наборов данных в неглобальную зону

Если основная цель – делегировать администрирование хранилища в зону, ZFS поддерживает добавление наборов данных в неглобальную зону с помощью подкоманды add dataset команды zonecfg .

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


# zonecfg -z zion
zonecfg:zion> add dataset
zonecfg:zion:dataset> set name=tank/zone/zion
zonecfg:zion:dataset> end

В отличие от добавления файловой системы, эта конструкция обеспечивает видимость файловой системы ZFS tank/zone/zion внутри уже настроенной зоны zion . Администратор зоны может устанавливать свойства файловой системы и создавать дочерние элементы. Кроме того, администратор зоны может создавать снимки, клоны, а также осуществлять управление всей иерархией файловых систем другими способами.

В случае использования Solaris Live Upgrade для обновления ZFS BE с неглобальными зонами удалите все делегированные наборы данных перед выполнением Live Upgrade, иначе выполнение Live Upgrade будет прервано из-за системной ошибки при доступе только для чтения. Пример:


zonecfg:zion>
zonecfg:zone1> remove dataset name=tank/zone/zion
zonecfg:zone1> exit

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

Добавление томов ZFS в неглобальную зону

Тома ZFS не могут быть добавлены в неглобальную зону с помощью подкоманды add dataset команды zonecfg. При попытке добавления тома ZFS зона перестает загружаться. Однако тома можно добавить в зону с помощью подкоманды add device команды zonecfg.

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


# zonecfg -z zion
zion: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zion> create
zonecfg:zion> add device
zonecfg:zion:device> set match=/dev/zvol/dsk/tank/vol
zonecfg:zion:device> end

Эта конструкция используется для экспорта тома tank/vol в зону. Следует отметить, что добавление в зону тома без файловой системы несет в себе скрытую угрозу безопасности, даже если том не соответствует физическому устройству. В частности, это может привести к созданию администратором зоны недопустимых файловых систем, которые могут вызвать фатальную ошибку системы при попытке монтирования. Для получения дополнительной информации о добавлении устройств в зоны и связанных угрозах безопасности см. раздел Свойство zoned.

Для получения дополнительной информации см. раздел Часть II, Зоны, в Руководство по системному администрированию: контейнеры в Solaris - управление ресурсами и зонами.

Использование пулов устройств хранения данных ZFS внутри зоны

Пулы устройств хранения данных ZFS не могут быть созданы или изменены внутри зоны. Модель делегирования администрирования позволяет централизовать управление физическими устройствами хранения в глобальной зоне и управление виртуальной памятью в неглобальных зонах. В то время как набор данных уровня пула может быть добавлен в зону, выполнение любой команды, изменяющей физические характеристики пула, например, создание, добавление или удаление устройств, в пределах зоны не разрешается. Даже в случае добавления в зону физических устройств с помощью подкоманды add device команды zonecfg команда zpool запрещает создание каких-либо новых пулов в пределах зоны.

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

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


global# zfs list -Ho name
tank
tank/home
tank/data
tank/data/matrix
tank/data/zion
tank/data/zion/home

При добавлении tank/data/zion в зону каждый набор данных получает следующие свойства.

Набор данных 

Видимый 

Записываемый 

Постоянные свойства 

tank

Да 

Нет 

tank/home

Нет 

tank/data

Да 

Нет 

tank/data/matrix

Нет 

tank/data/zion

Да 

Да 

sharenfs, zoned, quota, reservation

tank/data/zion/home

Да 

Да 

sharenfs, zoned

Следует отметить, что каждый родительский элемент tank/zone/zion является видимым и доступен только для чтения, все дочерние элементы являются записываемыми, а наборы данных, не являющиеся частью родительской иерархии, невидимы. Администратор зоны не может изменять свойство sharenfs, поскольку неглобальные зоны не могут выступать в качестве серверов NFS. Кроме того, администратор зоны не может изменять свойство zoned, поскольку это создает угрозу безопасности, как описано в следующем разделе.

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

Кроме того, после добавления набора данных администратором глобальной зоны в неглобальную зону невозможно изменить свойства sharenfs и mountpoint.

Свойство zoned

При добавлении набора данных в неглобальную зону этот набор данных должен быть специально отмечен, для того чтобы определенные свойства не интерпретировались в контексте глобальной зоны. После добавления набора данных в неглобальную зону под контролем администратора зоны его содержимое больше не считается надежным. Как и в любой файловой системе, в наборе данных могут присутствовать двоичные коды "setuid", символьные ссылки или другое сомнительное содержимое, которое может негативно повлиять на безопасность глобальной зоны. Кроме того, свойство mountpoint не может интерпретироваться в контексте глобальной зоны. В противном случае действия администратора зоны могут повлиять на пространство имен глобальной зоны. Для решения этой проблемы в ZFS используется свойство zoned. Оно указывает, что набор данных делегирован в неглобальную зону в определенный момент времени.

Свойство zoned представляет собой логическое значение, автоматически устанавливаемую при первой загрузке зоны, содержащей набор данных ZFS. Администратору зоны не требуется устанавливать это свойство вручную. При установленном свойстве zoned набор данных невозможно смонтировать или совместно использовать в глобальной зоне, и при выполнении команды zfs share-a или zfs mount-a он игнорируется. В следующем примере набор данных tank/zone/zion добавляется в зону, а tank/zone/global – нет:


# zfs list -o name,zoned,mountpoint -r tank/zone
NAME                  ZONED  MOUNTPOINT
tank/zone/global        off  /tank/zone/global
tank/zone/zion           on  /tank/zone/zion
# zfs mount
tank/zone/global           /tank/zone/global
tank/zone/zion             /export/zone/zion/root/tank/zone/zion

Обратите внимание на различие между свойством mountpointи каталогом, в котором в настоящее время смонтирован набор данных tank/zone/zion. Свойство mountpoint отражает свойство в том виде, как оно сохранено на диске, а не место, где набор данных смонтирован в системе в данный момент.

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

Для предотвращения случайного возникновения угроз безопасности глобальный администратор должен вручную сбросить значение свойства zoned (при необходимости повторного использования набора данных). Перед установкой для свойства zoned значения off убедитесь в том, что свойство mountpoint для набора данных и всех дочерних элементов имеет приемлемые значения, и двоичные коды setuid отсутствуют (или деактивируйте свойство setuid).

После проверки угроз безопасности свойство zoned можно отключить с помощью команд zfs set или zfs inherit. В случае отключения свойства zoned при использовании набора данных в пределах зоны поведение системы может быть непредсказуемым. Это свойство следует изменять только в том случае, если набор данных больше не используется неглобальной зоной.