В следующих разделах описываются различные случаи создания и уничтожения пулов устройств хранения данных ZFS.
Обработка ошибок при создании пула устройств хранения данных ZFS
Отображение информации о виртуальных устройствах пула устройств хранения данных
Операции по созданию и уничтожению пулов выполняются быстро и просто. Однако при выполнении этих операций следует соблюдать осторожность. Несмотря на наличие проверок для предотвращения включения уже используемых устройств в новый пул, ZFS не всегда может определить, используется ли устройство в данный момент времени. Процесс уничтожения пула еще проще. Команду zpool destroy следует использовать с осторожностью. Это простая команда, выполнение которой может иметь серьезные последствия.
Для создания пула устройств хранения данных используется команда zpool create. В качестве аргументов команды указывается имя пула и любое количество виртуальных устройств. Имя пула должно удовлетворять соглашениям о наименовании, перечисленным в разделе Требования к именованию компонентов ZFS.
Следующая команда используется для создания нового пула tank, состоящего из дисков 1t0d0 и c1t1d0.
# zpool create tank c1t0d0 c1t1d0 |
Эти целые диски расположены в каталоге /dev/dsk и соответствующим образом маркированы ZFS. Они содержат один большой подраздел. Для дисков организовано динамическое чередования полос данных.
Для создания зеркального пула используется ключевое слово mirror, за которым указывается любое количество устройств хранения, составляющих зеркало. Для указания нескольких зеркал повторите ключевое слово mirror в командной строке необходимое количество раз. Следующая команда используется для создания пула с двумя двусторонними зеркалами:
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0 |
Второе ключевое слово mirror указывает на новое виртуальное устройство верхнего уровня. Данные динамически наносятся полосами на оба зеркала, причем данные являются избыточными на каждом диске.
Дополнительную информацию о рекомендуемых зеркальных конфигурациях см. на следующем сайте:
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
В настоящее время в зеркальной конфигурации ZFS поддерживаются следующие операции:
Добавление другого набора дисков для дополнительного vdev верхнего уровня к существующей зеркальной конфигурации. Для получения дополнительной информации см. Добавление устройств в пул устройств хранения данных.
Присоединение дополнительных дисков к существующей зеркальной конфигурации. Либо присоединение дополнительных дисков к нереплицируемой конфигурации для создания зеркальной конфигурации. Для получения дополнительной информации см. Присоединение и отсоединение устройств в пуле устройств хранения данных.
Замена диска или дисков в существующей конфигурации, если емкость новых дисков больше или равна размеру устройства, которое требуется заменить. Для получения дополнительной информации см. Замена устройств в пуле устройств хранения данных.
Удаляйте диск или диски из зеркальной конфигурации, если оставшиеся устройства обеспечивают в конфигурации достаточную избыточность. Для получения дополнительной информации см. Присоединение и отсоединение устройств в пуле устройств хранения данных.
В настоящее время для зеркальной конфигурации не поддерживаются следующие операции:
Удалить устройство напрямую из зеркального пула устройств хранения данных невозможно. По этой функции уже имеется соответствующий RFE.
Разделить или разбить зеркальное устройство в целях резервирования невозможно. По этой функции уже имеется соответствующий RFE.
В текущей версии Solaris установку и загрузку можно проводить с файловой системы ZFS. Ознакомьтесь со следующей информацией о настройке корневого пула:
Диски, используемые в корневом пуле, должны иметь метку VTOC (SMI), а пул должен быть создан с дисковыми подразделами.
Корневой пул должен быть создан в зеркальной конфигурации или в конфигурации с одним диском. Добавление дополнительных дисков для создания vdev с несколькими зеркалами не допускается, однако для расширения зеркального vdev можно воспользоваться командой zpool attach.
RAID-Z или конфигурация с полосами не поддерживается.
Для корневого пула невозможно назначить отдельное устройство протоколирования.
При попытке использования неподдерживаемой конфигурации для корневого пула выводятся сообщения, подобные следующим:
ERROR: ZFS pool <pool-name> does not support boot environments |
# zpool add -f rpool log c0t6d0s0 cannot add to 'rpool': root pool can not have multiple vdevs or separate logs |
Для получения дополнительных сведений об установке и загрузке корневой файловой системы ZFS см. Глава 5Установка и загрузка корневой файловой системы ZFS.
Процедура создания пула RAID-Z с однократным контролем четности аналогична созданию зеркального пула за исключением того, что вместо raidz или raidz1 используется ключевое слово mirror. Ниже приведен пример создания пула с одним устройством RAID-Z из пяти дисков:
# zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 /dev/dsk/c5t0d0 |
Этот пример демонстрирует указание дисков с использованием полного пути. Устройство /dev/dsk/c5t0d0 идентично устройству c5t0d0.
Аналогичную конфигурацию можно создать из дисковых подразделов. Пример:
# zpool create tank raidz c1t0d0s0 c2t0d0s0 c3t0d0s0 c4t0d0s0 c5t0d0s0 |
Однако диски должны быть предварительно отформатированы и иметь нулевой подраздел требуемого размера.
Для создания конфигурации RAID-Z с двойным контролем четности в команде создания пула используется ключевое слово raidz2 Пример:
# zpool create tank raidz2 c1t0d0 c2t0d0 c3t0d0 # zpool status -v tank pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz2 ONLINE 0 0 0 c1t0d0 ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c3t0d0 ONLINE 0 0 0 errors: No known data errors |
В настоящее время в конфигурации RAID-Z ZFS поддерживаются следующие операции:
Добавление другого набора дисков для дополнительного vdev верхнего уровня к существующей конфигурации RAID-Z. Для получения дополнительной информации см. Добавление устройств в пул устройств хранения данных.
Замена диска или дисков в существующей конфигурации RAID-Z, если емкость новых дисков больше или равна размеру устройства, которое требуется заменить. Для получения дополнительной информации см. Замена устройств в пуле устройств хранения данных.
В настоящее время для конфигурации RAID-Z не поддерживаются следующие операции:
Присоединение дополнительного диска к существующей конфигурации RAID-Z.
Удаление дисков из конфигурации RAID-Z.
Удалить устройство из конфигурации RAID-Z напрямую невозможно. По этой функции уже имеется соответствующий RFE.
Для получения дополнительной информации о конфигурации RAID-Z см. Конфигурация пула устройств RAID-Z.
По умолчанию ZIL выделяется из блоков в основном пуле. Однако оптимальная производительность достигается с использованием отдельных устройств протоколирования, таких как NVRAM или выделенный диск. Дополнительная информация об устройствах протоколирования ZFS приведена в разделе Настройка отдельных устройств протоколирования ZFS.
Можно настроить устройство протоколирования ZFS при создании пула устройств хранения данных или после его создания.
Например, можно создать зеркальный пул устройств хранения данных с зеркальными устройствами протоколирования.
# zpool create datap mirror c1t1d0 c1t2d0 mirror c1t3d0 c1t4d0 log mirror c1t5d0 c1t8d0 # zpool status pool: datap state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM datap ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 c1t4d0 ONLINE 0 0 0 logs ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t5d0 ONLINE 0 0 0 c1t8d0 ONLINE 0 0 0 errors: No known data errors |
Информация о восстановлении после сбоя устройства протоколирования представлена в Пример 11–2.
Для кэширования данных пула устройств хранения возможно создание пула устройств хранения с устройствами кэширования. Пример:
# zpool create tank mirror c2t0d0 c2t1d0 c2t3d0 cache c2t5d0 c2t8d0 # zpool status tank pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 c2t3d0 ONLINE 0 0 0 cache c2t5d0 ONLINE 0 0 0 c2t8d0 ONLINE 0 0 0 |
Ознакомьтесь со следующими пунктами перед созданием пула устройств хранения данных ZFS с устройствами кэширования.
Наибольшее повышение производительности от использования устройств кэширования достигается в случае рабочих нагрузок, для которых характерны операции случайного чтения преимущественно статических данных.
Контроль емкости и операций чтения может проводиться командой zpool iostat.
Во время создания пула можно добавить одно или несколько устройств кэширования; кроме того, их можно добавлять или удалять после создания пула. Для получения дополнительной информации см. Пример 4–4.
Зеркалирование устройств кэширования невозможно; кроме того, они не могут быть частью конфигурации RAID-Z.
Если ошибка чтения обнаружена в устройстве кэширования, читающий ввод-вывод которого повторно используется для исходного устойства хранения данных пула, которое может быть частью заркелированной конфигурации или конфигурации с RAID-Z. Объем содержимого устройства кэширования является непостоянным, как и в случае других системных кэшей.
Каждый пул устройств хранения данных состоит из одного или нескольких виртуальных устройств. Виртуальное устройство – это внутреннее представление пула устройств хранения данных, описывающее структуру физического уровня и характеристики отказоустойчивости. Таким образом, виртуальное устройство представляет дисковые устройства или файлы, используемые для создания пула устройств хранения данных. Пул может содержать любое число виртуальных устройств в вершине конфигурации, известной как корневое виртуальное устройство (vdev).
Избыточность данных обеспечивается двумя виртуальными устройствами верхнего уровня: зеркалом и виртуальными устройствами RAID-Z. Эти виртуальные устройства состоят из дисков, дисковых подразделов или файлов. Резерв представляет особый vdev, который отслеживает доступные устройства горячего резерва для пула.
Следующий пример демонстрирует создание пула, который содержит два корневых vdev, каждый из которых является зеркалом двух дисков.
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0 |
В следующем примере показано создание пула, который содержит одно корневое виртуальное устройство из 4 дисков.
# zpool create mypool raidz2 c1d0 c2d0 c3d0 c4d0 |
В этот пул можно добавить другой корневой vdev с помощью команды zpool add. Пример:
# zpool add mypool raidz2 c2d0 c3d0 c4d0 c5d0 |
Диски, дисковые подразделы или файлы, которые используются в не избыточных пулах, сами действуют как виртуальные устройства. Пулы устройств хранения данных обычно содержат несколько виртуальных устройств верхнего уровня. ZFS динамически выполняет чередование полос для данных на всех виртуальных устройствах верхнего уровня в пуле.
Виртуальные устройства и физические устройства, которые содержатся в пуле устройств хранения данных ZFS, отображаются с помощью команды zpool status. Пример:
# zpool status tank pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t3d0 ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 |
Ошибки при создании пула могут возникать по многим причинам. Некоторые из этих причин очевидны – например, отсутствие указанного устройства; выявить другие может быть затруднительно.
Перед форматированием устройства в ZFS сначала определяется, используется ли диск ZFS или другим компонентом операционной системы. Если диск используется, могут появиться следующие ошибки:
# zpool create tank c1t0d0 c1t1d0 invalid vdev specification use '-f' to override the following errors: /dev/dsk/c1t0d0s0 is currently mounted on /. Please see umount(1M). /dev/dsk/c1t0d0s1 is currently mounted on swap. Please see swap(1M). /dev/dsk/c1t1d0s0 is part of active ZFS pool zeepool. Please see zpool(1M). |
Некоторые из этих ошибок можно подавить с помощью параметра -f, однако большинство ошибок таким образом устранить невозможно. Ниже показаны ошибки, которые должны быть исправлены вручную, а не при помощи параметра - f:
Диск или один из его подразделов содержат смонтированную файловую систему. Для исправления этой ошибки выполните команду umount.
Диск содержит файловую систему, указанную в файле /etc/vfstab, однако в настоящее время эта файловая система не смонтирована. Для исправления этой ошибки удалите или закомментируйте строку в файле /etc/vfstab.
Диск используется как выделенное устройство дампа в системе. Для исправления этой ошибки выполните команду dumpadm.
Диск или файл является компонентом активного пула устройств хранения данных ZFS. Чтобы исправить эту ошибку, используйте команду zpool destroy для уничтожения другого пула, если он более не требуется. Или используйте команду zpool detach, чтобы отсоединить диск от другого пула. Отсоединить можно только диск из зеркального пула устройств хранения данных.
Следующие проверки использования служат в качестве полезных предупреждений и могут быть подавлены с помощью параметра -f при создании пула.
Диск содержит известную файловую систему, хотя она не смонтирована и не используется.
Диск является частью тома SVM.
Диск используется в качестве альтернативной загрузочной среды для Solaris Live Upgrade.
Диск является элементом пула устройств хранения данных, экспортированного или вручную удаленного из системы. В последнем случае пул имеет статус potentially active (потенциально активен), поскольку диск может быть подключенным к сети накопителем, используемым другой системой. При переопределении потенциально активного пула следует соблюдать осторожность.
Ниже приведен пример использования параметра -f:
# zpool create tank c1t0d0 invalid vdev specification use '-f' to override the following errors: /dev/dsk/c1t0d0s0 contains a ufs filesystem. # zpool create -f tank c1t0d0 |
В идеальном случае вместо применения параметра -f следует исправить ошибки.
Создавать пулы с виртуальными устройствами на разных уровнях репликации не рекомендуется. Команда zpool позволяет предотвратить случайное создание пула с несоответствующей степенью избыточности. При попытке создания пула с такими настройками могут появиться следующие ошибки:
# zpool create tank c1t0d0 mirror c2t0d0 c3t0d0 invalid vdev specification use '-f' to override the following errors: mismatched replication level: both disk and mirror vdevs are present # zpool create tank mirror c1t0d0 c2t0d0 mirror c3t0d0 c4t0d0 c5t0d0 invalid vdev specification use '-f' to override the following errors: mismatched replication level: 2-way mirror and 3-way mirror vdevs are present |
Эти ошибки можно подавить с помощью параметра -f, однако это не рекомендуется. Эта команда также предупреждает пользователя о создании зеркального пула или пула RAID-Z с использованием устройств различной емкости. Несмотря на то, что такая конфигурация является допустимой, несоответствие по степени избыточности может привести к возникновению в более емком устройстве неиспользуемого пространства и требует ввода параметра -f для подавления предупреждения.
Поскольку при создании пула могут возникнуть непредвиденные ошибки, а форматирование дисков является потенциально опасной операцией, команда zpool create имеет дополнительный параметр -n, который позволяет создать пул без фактической записи данных на диск. Этот параметр используется для проверки использования устройства и уровня репликации и выявляет любые ошибки, возникающие в процессе создания пула. При отсутствии ошибок отображается следующий результат:
# zpool create -n tank mirror c1t0d0 c1t1d0 would create 'tank' with the following layout: tank mirror c1t0d0 c1t1d0 |
Некоторые ошибки не могут быть обнаружены без фактического создания пула. Наиболее типичный пример – указание одного и того же устройства в той же конфигурации дважды. Эта ошибка не может быть гарантированно обнаружена без записи данных, поэтому команда create -n может быть выполнена успешно, однако при реальном прогоне пул не создается.
Точкой монтирования корневого набора данных при создании пула является /имя_пула. Изначально этот каталог должен отсутствовать или быть пустым. Если каталог не существует, он создается автоматически. Если каталог пуст, корневой набор данных монтируется поверх существующего каталога. Для создания пула с другой точкой монтирования по умолчанию используется параметр - m команды zpool create:
# zpool create home c1t0d0 default mountpoint '/home' exists and is not empty use '-m' option to specify a different default # zpool create -m /export/zfs home c1t0d0 |
# zpool create home c1t0d0 default mountpoint '/home' exists and is not empty use '-m' option to provide a different default # zpool create -m /export/zfs home c1t0d0 |
Эта команда создает новый пул home и набор данных home с точкой монтирования /export/zfs.
Для получения дополнительной информации о точках монтирования см. Управление точками монтирования ZFS.
Для уничтожения пулов используется команда zpool destroy. Эта команда уничтожает пул, даже если он содержит смонтированные наборы данных.
# zpool destroy tank |
При уничтожении пула необходимо соблюдать особую осторожность. Убедитесь в том, что уничтожается требуемый пул и сохранены копии данных. При непреднамеренном уничтожении пула можно попробовать его восстановить. Дополнительная информация приведена в разделе Восстановление уничтоженных пулов устройств хранения данных ZFS.
Для уничтожения пула необходима запись данных на диск, указывающая на то, что этот пул больше не является действительным. Эта информация о состоянии предотвращает отображение устройств в качестве потенциального пула при импорте. Пул может быть уничтожен даже в том случае, если одно или несколько устройств недоступны. Однако в поврежденные устройства необходимая информация о состоянии не записывается.
При создании нового пула об этих устройствах (если они уже исправны) будет сообщено как о потенциально активных, и при поиске пулов для импорта они отобразятся как допустимые. Если пул содержит такое количество неисправных устройств, что получает статус неисправного (это означает неисправность виртуального устройства), выводится соответствующее предупреждение, и выполнить команду без параметра -f невозможно. Этот параметр необходим из-за невозможности открыть пул и того, что неизвестно, хранятся ли в нем данные. Пример:
# zpool destroy tank cannot destroy 'tank': pool is faulted use '-f' to force destruction anyway # zpool destroy -f tank |
Для получения дополнительной информации о работоспособности пула и устройств см. Определение статуса работоспособности пулов устройств хранения данных ZFS.
Для получения дополнительной информации об импорте пулов см. Импорт пулов устройств хранения данных ZFS.