В этой главе описываются процессы создания и администрирования пулов устройств хранения данных ZFS.
В этой главе содержатся следующие разделы:
В следующих разделах содержится подробная информация о следующих компонентах пула устройств хранения данных:
Базовым элементом пула устройств хранения данных является физическое устройство. Это может быть любое блочное устройство объемом не менее 128 МБ. Обычно это жесткий диск, который является видимым в системе в каталоге /dev/dsk .
Устройство хранения может быть целым диском (c1t0d0) или отдельным подразделом (c0t0d0s7). Рекомендуется использовать весь диск, так как в этом случае его не потребуется специально форматировать. ZFS форматирует диск с использованием метки EFI, содержащей один большой подраздел. При таком использовании таблица разделов, выводимая с помощью команды format, выглядит следующим образом:
Current partition table (original): Total disk sectors available: 17672849 + 16384 (reserved sectors) Part Tag Flag First Sector Size Last Sector 0 usr wm 256 8.43GB 17672849 1 unassigned wm 0 0 0 2 unassigned wm 0 0 0 3 unassigned wm 0 0 0 4 unassigned wm 0 0 0 5 unassigned wm 0 0 0 6 unassigned wm 0 0 0 8 reserved wm 17672850 8.00MB 17689233 |
Для использования всех дисков, им должны быть присвоены имена с использованием соглашения по присвоению имен /dev/dsk/cXtXdX. Некоторые драйверы от сторонних производителей используют другие соглашения по присвоению имен или помещают диски в расположение, отличное от каталога /dev/dsk. Для использования этих дисков их необходимо пометить вручную и создать специальный подраздел для ZFS.
При создании пула устройств хранения данных с целыми дисками системой ZFS используется метка EFI. Для получения дополнительных сведений о метках EFI см. раздел EFI Disk Label в System Administration Guide: Devices and File Systems.
Диск, предназначенный для корневого пула ZFS, должен быть создан с меткой SMI, а не EFI. Пользователь может изменить метку на SMI, используя команду format - e.
Диски можно указать с использованием полного пути, например /dev/dsk/c1t0d0, или краткого имени, состоящего из имени устройства в каталоге /dev/dsk, например c1t0d0. Например, допустимыми являются следующие имена дисков:
c1t0d0
/dev/dsk/c1t0d0
c0t0d6s2
/dev/foo/disk
Использование целых физических дисков является наиболее простым способом создания пулов устройств хранения данных ZFS. При создании пулов из дисковых подразделов, уcтройств с идентификаторами LUN в аппаратных массивах RAID или томов, сформированных программными диспетчерами томов, настройки ZFS становятся все более сложными с точки зрения управления, надежности и производительности. При определении настроек ZFS в сочетании с другими аппаратными или программными решениями для хранения данных необходимо учитывать следующее:
В случае формирования конфигураций ZFS на базе LUN аппаратных массивов RAID необходимо понимать взаимосвязь между функциями избыточности ZFS и массива. В некоторых конфигурациях можно добиться адекватного обеспечения избыточности и производительности, в других – нет.
Логические устройства для ZFS можно создать с помощью томов, формируемых программными диспетчерами томов, такими как SolarisTM Volume Manager (SVM) или Veritas Volume Manager (VxVM). Однако такие конфигурации не рекомендуются. ZFS нормально функционирует на таких устройствах, однако производительность может оставаться ниже оптимальной.
Дополнительная информация о рекомендациях по организации пула устройств хранения данных приведена на веб-сайте с примерами наиболее успешной практики ZFS:
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
Диски могут идентифицироваться по пути и по идентификатору устройства, если таковой имеется. Этот метод позволяет изменять настройки устройства в системе без необходимости обновления статуса ZFS. При переключении диска между контроллером 1 и контроллером 2 ZFS использует идентификатор устройства для выявления перемещения и необходимости обращения к диску через контроллер 2. Идентификатор устройства является уникальным для микропрограммного обеспечения диска. Хотя это маловероятно, в некоторых случаях обновление микропрограммного обеспечения может приводить к изменениям идентификаторов устройств. В такой ситуации ZFS может обратиться к устройству по указанному пути и автоматически обновить сохраненный идентификатор устройства. При непреднамеренном изменении пути и идентификатора устройства необходимо экспортировать и повторно импортировать пул.
При создании пула устройств хранения данных с дисковым подразделом диски могут маркироваться с использованием традиционных меток VTOC (SMI) Solaris.
Для загружаемого корневого пула ZFS диски в пуле должны содержать подразделы и иметь метку SMI. В простейшей настройке весь объем диска отдается подразделу 0, который используется как корневой пул.
В системе на основе SPARC на диске размером 72 ГБ доступны для использования 68 ГБ, расположенные в подразделе 0, как показано в следующих выходных данных команды format.
# format . . . Specify disk (enter its number): 4 selecting c1t1d0 partition> p Current partition table (original): Total disk cylinders available: 14087 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 14086 68.35GB (14087/0/0) 143349312 1 unassigned wm 0 0 (0/0/0) 0 2 backup wm 0 - 14086 68.35GB (14087/0/0) 143349312 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 |
В системе на основе x86 на диске размером 72 ГБ доступны для использования 68 ГБ, расположенные в подразделе 0, как показано в следующих выходных данных команды format. В подразделе 8 содержатся загрузочные данные в небольшом объеме. Подраздел 8 не нуждается в администрировании; его изменение невозможно.
# format . . . selecting c1t0d0 partition> p Current partition table (original): Total disk cylinders available: 49779 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 1 - 49778 68.36GB (49778/0/0) 143360640 1 unassigned wu 0 0 (0/0/0) 0 2 backup wm 0 - 49778 68.36GB (49779/0/0) 143363520 3 unassigned wu 0 0 (0/0/0) 0 4 unassigned wu 0 0 (0/0/0) 0 5 unassigned wu 0 0 (0/0/0) 0 6 unassigned wu 0 0 (0/0/0) 0 7 unassigned wu 0 0 (0/0/0) 0 8 boot wu 0 - 0 1.41MB (1/0/0) 2880 9 unassigned wu 0 0 (0/0/0) 0 |
Если рассматривается возможность использования подразделов для пула устройств хранения данных ZFS, который не является загружаемым корневым пулом ZFS, ознакомьтесь со следующими условиями, при которых использование подразделов может оказаться необходимым.
Имя устройства является нестандартным.
Один и тот же диск совместно используется ZFS и другой файловой системой, например UFS.
ZFS также позволяет использовать файлы UFS в пуле устройств хранения данных в качестве виртуальных устройств. Эта функция предназначена прежде всего для тестирования и проведения простых экспериментов, но не для применения в продуктивной среде. Причина заключается в том, что при любом использовании файлов их целостность обеспечивается файловой системой. При создании пула ZFS с резервными файлами в файловой системе UFS неявно предполагается, что UFS должна гарантировать корректность и синхронную семантику.
Однако файлы – это удобная возможность ознакомления с ZFS или экспериментирования с более сложными схемами размещения (при отсутствии необходимых физических устройств). Для всех файлов должен быть указан полный путь, и их размер должен составлять не менее 64 МБ. При перемещении или переименовании файла пул необходимо экспортировать и повторно импортировать, поскольку ни один идентификатор устройства не связан с файлами, по которым можно определить местоположение.
В зеркальной конфигурации и конфигурации RAID-Z технология ZFS обеспечивает избыточность данных, а также средства их самовосстановления.
Для зеркальной конфигурации пула устройств хранения данных необходимы по крайней мере два диска, предпочтительно на отдельных контроллерах. В зеркальной конфигурации может использоваться множество дисков. Кроме того, в каждом пуле можно создать несколько зеркал. Простая зеркальная конфигурация выглядит следующим образом:
mirror c1t0d0 c2t0d0 |
Более сложная зеркальная конфигурация выглядит следующим образом:
mirror c1t0d0 c2t0d0 c3t0d0 mirror c4t0d0 c5t0d0 c6t0d0 |
Для получения информации о создании зеркального пула устройств хранения данных см. Создание зеркального пула устройств хранения данных.
Помимо зеркальной конфигурации пула устройств хранения данных, ZFS поддерживает отказоустойчивую конфигурацию RAID-Z с однократным или двойным контролем четности. Конфигурация RAID-Z с однократным контролем четности аналогична RAID-5. Конфигурация RAID-Z с двойным контролем четности аналогична RAID-6.
Все традиционные алгоритмы, подобные RAID-5 (например, RAID-4, RAID-6, RDP и EVEN-ODD), имеют проблему, известную как "дыра записи RAID-5". Если записана только часть чередования полос RAID-5, при потере питания до записи всех блоков на диск информация о четности не будет соответствовать состоянию данных, следовательно, контроль по четности будет бессмысленным (до тех пор, пока не будет произведена перезапись всего чередования полос). В RAID-Z ZFS использует чередование полос RAID переменной ширины и обеспечивает запись на всю полосу. Это возможно исключительно благодаря интеграции в ZFS модели управления файловыми системами и устройствами, при которой метаданные файловой системы содержат достаточно информации о базовой модели избыточности данных для обработки чередования полос RAID переменной ширины. RAID-Z – первое в мире чисто программное решение для эффективного заполнения полос при записи RAID-5.
Конфигурация RAID-Z с N дисками объемом X и с P дисками для контроля четности может содержать около (N-P)*X байт и выдерживать сбой P устройств до нарушения целостности данных. Для конфигурации RAID-Z с однократным контролем четности необходимы по крайней мере два диска, а для конфигурации с двойным контролем четности – по крайней мере три диска. Например, при наличии в конфигурации RAID-Z с однократным контролем четности трех дисков данные для контроля четности занимают пространство, равное одному из этих трех дисков. В других случаях какое-либо специальное оборудование для создания конфигурации RAID-Z не требуется.
Простая конфигурация RAID-Z с тремя дисками выглядит следующим образом:
raidz c1t0d0 c2t0d0 c3t0d0 |
Более сложная концептуальная конфигурация RAID-Z выглядит следующим образом:
raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0 c6t0d0 c7t0d0 raidz c8t0d0 c9t0d0 c10t0d0 c11t0d0 c12t0d0 c13t0d0 c14t0d0 |
При создании конфигурации RAID-Z с несколькими дисками, как в данном примере, конфигурацию RAID-Z с 14 дисками предпочтительно разбить на две группы по 7 дисков. Для повышения производительности рекомендуется создавать конфигурации RAID-Z с количеством дисков от 1 до 9.
Создание пулов устройств хранения данных RAID-Z .
Для получения дополнительной информации о выборе зеркальной конфигурации или конфигурации RAID-Z исходя из соображений производительности и пространства см. следующий блог:
http://blogs.sun.com/roller/page/roch?entry=when_to_and_not_to
Дополнительные рекомендации по пулам устройств хранения данных RAID-Z см. на веб-сайте с примерами наиболее успешной практики ZFS:
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
Гибридный пул устройств хранения данных ZFS, доступный в продуктах линейки Sun Storage 7000, представляет собой особый пул устройств хранения данных, объединяющий DRAM, SSD и HDD в целях повышения производительности и увеличения емкости при одновременном снижении энергопотребления. Также можно выбрать настройку избыточности ZFS для пула устройств хранения данных, которая позволяет простым образом управлять остальными параметрами настройки с помощью интерфейса управления данного продукта.
Для получения дополнительных сведениях о данном продукте см. документ Sun Storage Unified Storage System Administration Guide.
ZFS обеспечивает самовосстановление данных в зеркальной конфигурации или конфигурации RAID-Z.
При обнаружении поврежденного блока данных ZFS не только переносит правильные данные из другой резервной копии, но и восстанавливает данные путем замены.
Для каждого виртуального устройства, добавляемого в пул, ZFS динамически создает чередование полос во всех доступных устройствах. Решение о расположении данных принимается при записи, поэтому во время распределения пространства чередование полос фиксированной ширины не создается.
При добавлении виртуальных устройств в пул ZFS постепенно переносит данные в новое устройство для поддержания производительности и политики распределения пространства. Каждое виртуальное устройство также может представлять собой зеркало или устройство RAID-Z, содержащее другие дисковые устройства или файлы. Эта конфигурация обеспечивает гибкость в управлении характеристиками отказоустойчивости пула. Например, из 4 дисков можно создать следующие конфигурации:
четыре диска с использованием динамического чередования полос;
одна четырехсторонняя конфигурация RAID-Z;
два двусторонних зеркала с динамическим чередованием полос.
Несмотря на то, что ZFS поддерживает комбинирование различных типов виртуальных устройств в одном и том же пуле, это не рекомендуется. Например, можно создать пул с двусторонним зеркалом и трехсторонней конфигурацией RAID-Z. Однако фактически отказоустойчивость будет не выше, чем у самого ненадежного виртуального устройства, в данном случае RAID-Z. Рекомендуется использовать виртуальные устройства верхнего уровня одного типа с одинаковой степенью избыточности в каждом устройстве.
В следующих разделах описываются различные случаи создания и уничтожения пулов устройств хранения данных 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.
Большая часть информации по устройствам представлена в разделе Компоненты пула устройств хранения данных ZFS. После создания пула можно выполнить ряд задач по управлению физическими устройствами в пуле.
Присоединение и отсоединение устройств в пуле устройств хранения данных
Перевод устройств в пуле устройств хранения данных в оперативном или автономном режиме
Устройства горячего резерва в пуле устройств хранения данных
Добавить пространство в пул можно динамически путем добавления нового виртуального устройства верхнего уровня. Это пространство немедленно становится доступным для всех наборов данных в пуле. Для добавления в пул нового виртуального устройства используется команда zpool add. Пример:
# zpool add zeepool mirror c2t1d0 c2t2d0 |
Формат указания виртуальных устройств совпадает с форматом команды zpool create, при этом применяются те же правила. Для устройств выполняется проверка на использование; изменить степень избыточности при помощи этой команды без параметра -f невозможно. Эта команда также поддерживает параметр -n, предназначенный для выполнения пробного прогона. Пример:
# zpool add -n zeepool mirror c3t1d0 c3t2d0 would update 'zeepool' to the following configuration: zeepool mirror c1t0d0 c1t1d0 mirror c2t1d0 c2t2d0 mirror c3t1d0 c3t2d0 |
Этот синтаксис позволяет добавить зеркальные устройства c3t1d0 и c3t2d0 в существующую конфигурацию zeepool.
Для получения дополнительной информации о проверке действительности виртуальных устройств см. Обнаружение используемых устройств.
В следующем примере еще одно зеркало добавляется в существующую зеркальную конфигурацию ZFS в системе Sun Fire x4500.
# 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 errors: No known data errors # zpool add tank mirror c0t3d0 c1t3d0 # 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 errors: No known data errors |
Аналогичным образом в конфигурацию RAID-Z добавляются дополнительные диски. Следующий пример демонстрирует преобразование пула устройств хранения данных с одним устройством RAID–Z, содержащего 3 диска, в пул устройств хранения данных RAID-Z, содержащий 3 диска.
# zpool status pool: rpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 raidz1 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 c1t4d0 ONLINE 0 0 0 errors: No known data errors # zpool add rpool raidz c2t2d0 c2t3d0 c2t4d0 # zpool status pool: rpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 raidz1 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 c1t4d0 ONLINE 0 0 0 raidz1 ONLINE 0 0 0 c2t2d0 ONLINE 0 0 0 c2t3d0 ONLINE 0 0 0 c2t4d0 ONLINE 0 0 0 errors: No known data errors |
Следующий пример демонстрирует добавление зеркального устройства протоколирования в зеркальный пул устройств хранения данных.Дополнительные сведения об использовании устройств протоколирования в пуле устройств хранения данных приведены в разделе Настройка отдельных устройств протоколирования ZFS.
# zpool status newpool pool: newpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM newpool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t9d0 ONLINE 0 0 0 c1t10d0 ONLINE 0 0 0 errors: No known data errors # zpool add newpool log mirror c1t11d0 c1t12d0 # zpool status newpool pool: newpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM newpool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t9d0 ONLINE 0 0 0 c1t10d0 ONLINE 0 0 0 logs ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t11d0 ONLINE 0 0 0 c1t12d0 ONLINE 0 0 0 errors: No known data errors |
Для создания зеркального устройства протоколирования можно присоединить новое устройство протоколирования к существующему. Эта операция идентична присоединению устройства в незеркалируемом пуле устройств хранения данных.
Пользователь может добавлять и удалять устройства кэширования в пуле устройств хранения ZFS
Используйте команду zpool add для добавления устройств кэширования. Пример:
# zpool add tank 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 errors: No known data errors |
Зеркалирование устройств кэширования невозможно; кроме того, они не могут быть частью конфигурации RAID-Z.
Используйте команду·zpool remove для удаления устройств кэширования. Пример:
# zpool remove tank 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 errors: No known data errors |
В настоящее время команда zpool remove поддерживает только удаление устройств горячего резерва и устройств кэширования. Устройства, являющиеся частью основной конфигурации зеркалированного пула могут быть удалены с помощью команды zpool detach. Удаление устройств без избыточности и устройств RAID-Z из пула невозможно.
Подробные сведения об использовании устройств кэширования в пуле устройств хранения ZFS представлены в разделе Создание пула устройств хранения данных ZFS с устройствами кэширования.
Помимо команды zpool add для добавления нового устройства в существующую зеркальную или незеркальную конфигурацию может использоваться команда zpool attach.
Если выполняется добавление или отключение диска в корневом пуле ZFS в целях замены диска, см. Замена диска в корневом пуле ZFS.
В этом примере zeepool представляет собой существующее двустороннее зеркало, преобразуемое в трехстороннее зеркало путем присоединения нового устройства c2t1d0 к существующему устройству c1t1d0.
# zpool status pool: zeepool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zeepool ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 errors: No known data errors # zpool attach zeepool c1t1d0 c2t1d0 # zpool status pool: zeepool state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 14:11:33 2009 config: NAME STATE READ WRITE CKSUM zeepool ONLINE 0 0 0 mirror ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 73.5K resilvered |
Если существующее устройство является частью двустороннего зеркала, то при присоединении нового устройства будет создано трехстороннее зеркало, и т.д. В любом случае новое устройство начинает немедленный перенос актуальных данных.
Кроме того, с помощью команды zpool attach пул устройств хранения данных без избыточности можно преобразовать в пул с избыточностью. Пример:
# zpool create tank c0t1d0 # zpool status pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 errors: No known data errors # zpool attach tank c0t1d0 c1t1d0 # zpool status pool: tank state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 14:13:12 2009 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 73.5K resilvered |
Для отсоединения устройства от зеркального пула устройств хранения данных используется команда zpool detach. Пример:
# zpool detach zeepool c2t1d0 |
Однако выполнить эту операцию при отсутствии других действительных реплик данных невозможно. Пример:
# zpool detach newpool c1t2d0 cannot detach c1t2d0: only applicable to mirror and replacing vdevs |
ZFS позволяет переводить отдельные устройства в оперативный или автономный режим. Если оборудование является ненадежным или работает неправильно, ZFS продолжает считывание или запись данных в устройство, поскольку такое состояние рассматривается как временное. Если это состояние не является временным, в ZFS можно выполнить настройку для игнорирования такого устройства путем его перевода в автономный режим. ZFS не отправляет запросы на автономное устройство.
Для замены устройств их перевод в автономный режим не требуется.
Команда offline используется при необходимости временного отключения устройства. Например, перевод в автономный режим может потребоваться для физического отключения массива, входящего в пулы ZFS, от одного набора коммутаторов оптоволоконных каналов и его подключения к другому набору LUN. После повторного подключения массива и его инициализации в новом наборе коммутаторов эти LUN можно перевести в оперативный режим. Данные, добавленные в пулы устройств хранения данных во время нахождения LUN в автономном режиме, переносятся в LUN после перевода в оперативный режим.
Этот случай возможен при условии, что рассматриваемые системы распознают пул хранения после его подключения к новым коммутаторам, возможно, с помощью других контроллеров, и для пулов устанавливаются конфигурации RAID-Z или зеркальные конфигурации.
Для перевода устройства в автономный режим используется команда zpool offline. Требуемое устройство можно указать при помощи пути или краткого имени (если это устройство является диском). Пример:
# zpool offline tank c1t0d0 bringing device c1t0d0 offline |
При переводе устройства в автономный режим необходимо учитывать следующее:
Перевод в автономный режим пула в точке монтирования, в которой возникает сбой, невозможен. Например, невозможно перевести в автономный режим два устройства из конфигурации RAID-Z, невозможно также перевести в автономный режим виртуальное устройство верхнего уровня.
# zpool offline tank c1t0d0 cannot offline c1t0d0: no valid replicas |
По умолчанию автономный режим сохраняется. Устройство остается в этом режиме при перезагрузке системы.
Для временного перевода устройства в автономный режим используется параметр zpool offline -t. Пример:
# zpool offline -t tank c1t0d0 bringing device 'c1t0d0' offline |
При перезагрузке системы это устройство автоматически возвращается в состояние ONLINE.
При переводе в автономный режим устройство не отсоединяется от пула устройств хранения данных. При попытке использования устройства, переведенного в автономный режим, в другом пуле даже после уничтожения исходного пула будет выдано сообщение, подобное следующему:
device is part of exported or potentially active ZFS pool. Please see zpool(1M) |
Для использования устройства, переведенного в автономный режим, в другом пуле устройств хранения данных после уничтожения исходного пула сначала необходимо перевести это устройство обратно в оперативный режим, а затем уничтожить исходный пул устройств хранения данных.
Другой способ использования устройства из другого пула устройств хранения данных при необходимости сохранения исходного пула заключается в замене существующего устройства в исходном пуле на другое аналогичное устройство. Для получения информации о замене устройств см. Замена устройств в пуле устройств хранения данных.
При запросе состояния пула устройства в автономном режиме имеют статус OFFLINE. Для получения информации о запросе состояния пула см. Запрос состояния пула устройств хранения данных ZFS.
Для получения дополнительной информации о работоспособности устройств см. Определение статуса работоспособности пулов устройств хранения данных ZFS.
После перевода устройства в автономный режим его можно восстановить с помощью команды zpool online:
# zpool online tank c1t0d0 bringing device c1t0d0 online |
При переводе устройства в оперативный режим данные, записанные в пуле, заново синхронизируются с новым доступным устройством. Следует отметить, что перевод устройства в оперативный режим не позволяет произвести замену диска. Если вы переводите устройство в автономный режим, заменяете диск и пытаетесь вернуть его в оперативный режим, оно остается в состоянии ошибки.
При попытке перевода в оперативный режим неисправного устройства выводится сообщение об ошибке, подобное следующему:
# zpool online tank c1t0d0 warning: device 'c1t0d0' onlined, but remains in faulted state use 'zpool replace' to replace devices that are no longer present |
Кроме того, с помощью fmd можно просмотреть сообщение отказавшего диска.
SUNW-MSG-ID: ZFS-8000-D3, TYPE: Fault, VER: 1, SEVERITY: Major EVENT-TIME: Fri Aug 28 14:08:39 MDT 2009 PLATFORM: SUNW,Sun-Fire-T200, CSN: -, HOSTNAME: neo2 SOURCE: zfs-diagnosis, REV: 1.0 EVENT-ID: 9da778a7-a828-c88a-d679-c9a7873f4808 DESC: A ZFS device failed. Refer to http://sun.com/msg/ZFS-8000-D3 for more information. AUTO-RESPONSE: No automated response will occur. IMPACT: Fault tolerance of the pool may be compromised. REC-ACTION: Run 'zpool status -x' and replace the bad device. |
Для получения дополнительной информации о замене неисправных устройств см. Восстановление отсутствующего устройства.
При переводе устройства в автономный режим вследствие сбоя, приводящего к отображению списка ошибок в выходных данных команды zpool status, можно сбросить счетчики ошибок с помощью команды zpool clear.
Если аргументы не указаны, команда сбрасывает ошибки всех устройств в пуле. Пример:
# zpool clear tank |
Если указано одно или несколько устройств, эта команда используется для сброса только тех ошибок, которые связаны с указанными устройствами. Пример:
# zpool clear tank c1t0d0 |
Для получения дополнительной информации о сбросе ошибок zpool см. Сброс временных ошибок.
Можно заменить устройство в пуле устройств хранения данных с помощью команды zpool replace.
В случае физической замены устройства другим устройством в том же расположении в пуле с избыточностью необходимо указать только заменяемое устройство. ZFS распознает, что это другой диск в том же расположении. Например, для замены сбойного диска (c1t1d0) путем его удаления и добавления нового устройства в том же расположении используется синтаксис, аналогичный следующему:
# zpool replace tank c1t1d0 |
При замене устройства в пуле устройств хранения данных без избыточности, который содержит только одно устройство, требуется указать оба устройства. Пример:
# zpool replace tank c1t1d0 c1t2d0 |
Если в корневом пуле ZFS выполняется замена диска, см. Замена диска в корневом пуле ZFS.
Основные действия для замены диска:
Если необходимо, переведите диск в автономный режим командой zpool offline.
Удалите заменяемый диск.
Вставьте диск на замену.
Выполните команду zpool replace. Пример:
# zpool replace tank c1t1d0 |
Верните диск в оперативный режим командой zpool online.
В некоторых системах, например Sun Fire x4500, необходимо удалить диск из конфигурации перед его переводом в автономный режим. Если вы просто заменяете диск в одном гнезде в этой системе, достаточно выполнить команду zpool replace, как описано выше.
Как пример замены диска в этой системе см. Пример 11–1.
При замене устройства в пуле устройств хранения данных ZFS необходимо учитывать следующее:
Если свойство пула autoreplace включено, все новые устройства, обнаруженные в том же самом физическом местоположении, что и устройство, ранее принадлежавшее пулу, автоматически форматируются и заменяются без использования команды zpool replace. Эта функциональная возможность может быть доступной не на всех типах оборудования.
Емкость устройства замены должна быть не меньше минимального размера всех устройств в зеркале или конфигурации RAID-Z.
В противном случае такая замена приводит к увеличению размера пула. В настоящее время для определения расширенной емкости необходимо выполнить экспорт и импорт пула. Пример:
# zpool list tank NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 16.8G 94K 16.7G 0% ONLINE - # zpool replace tank c0t0d0 c0t4d0 # zpool list tank NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 16.8G 112K 16.7G 0% ONLINE - # zpool export tank # zpool import tank # zpool list tank NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 33.9G 114K 33.9G 0% ONLINE - |
Для получения дополнительной информации об экспорте и импорте пулов см. Переход пулов устройств хранения данных ZFS.
Сейчас при увеличении размера существующего LUN, который является частью пула устройств хранения данных, необходимо также выполнить действия по экспорту и импорту, чтобы увидеть увеличение емкости диска.
Замена нескольких дисков в большом пуле требует существенного количества времени вследствие переноса актуальных данных на новые диски. Кроме того, можно выполнить команду zpool scrub между операциями замены дисков для обеспечения работоспособности заменяемых устройств и правильности записанных данных.
Если отказавший диск заменен автоматически в порядке горячего резервирования, может потребоваться отключение резервного диска после замены отказавшего. Для получения информации об отключении устройства горячего резервирования см. Активация и деактивация устройств горячего резерва в пуле устройств хранения данных.
Для получения дополнительной информации о замене устройств см. Восстановление отсутствующего устройства и Замена или восстановление поврежденного устройства.
Функция горячего резерва позволяет идентифицировать диски, которые можно использовать для замены сбойных или неисправных устройств в одном или нескольких пулах устройств хранения данных. Обозначение устройства в качестве горячего резерва означает, что это устройство не является активным устройством, однако в случае сбоя активного устройства в пуле это сбойное устройство автоматически заменяется устройством горячего резерва.
Устройства могут быть назначены в качестве устройств горячего резерва следующими способами:
при создании пула с помощью команды zpool create;
после создания пула с помощью команды zpool add;
устройства горячего резерва могут совместно использоваться несколькими пулами.
При создании пула устройства должны быть обозначены как устройства горячего резерва. Пример:
# zpool create zeepool mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0 # zpool status zeepool pool: zeepool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zeepool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 spares c1t2d0 AVAIL c2t2d0 AVAIL |
Устройства горячего резерва необходимо назначать путем их добавления в пул после его создания. Пример:
# zpool add zeepool spare c1t3d0 c2t3d0 # zpool status zeepool pool: zeepool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zeepool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 spares c1t3d0 AVAIL c2t3d0 AVAIL |
Несколько пулов могут совместно использовать устройства, назначенные в качестве устройств горячего резерва. Пример:
# zpool create zeepool mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0 # zpool create tank raidz c3t1d0 c4t1d0 spare c1t2d0 c2t2d0 |
Для удаления устройств горячего резерва из пула устройств хранения данных используется команда zpool remove. Пример:
# zpool remove zeepool c1t2d0 # zpool status zeepool pool: zeepool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zeepool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 spares c1t3d0 AVAIL |
Устройство горячего резерва не может быть удалено, если в настоящее время оно используется пулом устройств хранения данных.
При использовании устройств горячего резерва ZFS необходимо учитывать следующее:
В настоящий момент команда zpool remove может использоваться только для удаления устройств горячего резервирования и устройств кэширования.
Емкость добавляемого резервного диска должна быть не меньше размера самого большого диска в пуле. В качестве устройства резерва к пулу можно добавить диск с меньшей емкостью. Однако при автоматической активации резервного диска с меньшей емкостью или при его активации с помощью команды zpool replace операция завершается со следующей ошибкой:
cannot replace disk3 with disk4: device is too small |
Устройства горячего резерва могут совместно использоваться несколькими пулами. Однако невозможно экспортировать пул с используемым общим устройством резерва, за исключением случая использования команды zpool export с параметром -f (force). Это предотвращает возможное повреждение данных при экспорте пула с используемым общим устройством резерва и попытке другого пула использовать общее устройство во время экспорта. Если пул с используемым общим устройством резерва экспортируется с помощью параметра - f, следует помнить, что эта операция может привести к повреждению данных, если другой пул попытается активировать используемое общее устройство резервирования.
Устройства горячего резерва можно активировать следующими способами:
Замена вручную. Замена неисправного устройства в пуле устройств хранения данных устройством горячего резерва с помощью команды zpool replace.
Автоматическая замена. При регистрации сбоя агент FMA проверяет пул на наличие доступных устройств горячего резерва. При их обнаружении осуществляется замена неисправного устройства доступным устройством резерва.
При сбое используемого в настоящее время устройства горячего резерва агент отключает устройство резерва и, таким образом, отменяет замену. Затем агент пытается заменить устройство другим устройством горячего резерва, если оно доступно. В настоящее время эта функция ограничена тем, что механизм диагностики ZFS сообщает об сбоях только в случае исчезновения устройства из системы.
Если выполняется физическая замена сбойного устройства с активным устройством резерва, можно повторно активировать замененное устройство с помощью команды zpool detach, чтобы отсоединить устройство резерва. Если включено свойство пула autoreplace, то устройство резервирования автоматически отсоединяется в пул устройств резерва, когда вставляется новое устройство и завершается операция перевода в оперативный режим.
Для замены устройства на устройство горячего резерва вручную используется команда zpool replace. Пример:
# zpool replace zeepool c2t1d0 c2t3d0 # zpool status zeepool pool: zeepool state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 14:16:04 2009 config: NAME STATE READ WRITE CKSUM zeepool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 spare ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 c2t3d0 ONLINE 0 0 0 76.5K resilvered spares c2t3d0 INUSE currently in use errors: No known data errors |
При доступности устройства горячего резерва неисправное устройство заменяется автоматически. Пример:
# zpool status -x pool: zeepool state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-D3 scrub: resilver completed after 0h12m with 0 errors on Fri Aug 28 14:18:16 2009 config: NAME STATE READ WRITE CKSUM zeepool DEGRADED 0 0 0 mirror DEGRADED 0 0 0 c1t2d0 ONLINE 0 0 0 spare DEGRADED 0 0 0 c2t1d0 UNAVAIL 0 0 0 cannot open c2t3d0 ONLINE 0 0 0 58.5K resilvered spares c2t3d0 INUSE currently in use errors: No known data errors |
В настоящее время существует три способа деактивации устройств горячего резерва:
отмена горячего резерва путем удаления устройства из пула устройств хранения данных;
замена исходного устройства устройством горячего резерва;
постоянная подкачка устройства горячего резерва.
После замены неисправного устройства для возврата устройства горячего резерва в набор резервных устройств используется команда zpool detach. Пример:
# zpool detach zeepool c2t3d0 # zpool status zeepool pool: zeepool state: ONLINE scrub: resilver completed with 0 errors on Fri Aug 28 14:21:02 2009 config: NAME STATE READ WRITE CKSUM zeepool ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 spares c2t3d0 AVAIL errors: No known data errors |
Для отображения информации о свойствах пула можно использовать команду zpool get. Пример:
# zpool get all mpool NAME PROPERTY VALUE SOURCE mpool size 33.8G - mpool used 5.91G - mpool available 27.8G - mpool capacity 17% - mpool altroot - default mpool health ONLINE - mpool guid 17361998391267837263 - mpool version 10 default mpool bootfs mpool/ROOT/zfs2BE local mpool delegation on default mpool autoreplace on local mpool cachefile - default mpool failmode continue local mpool listsnapshots on default |
Свойства пула устройств хранения данных можно указывать с помощью команды zpool set. Пример:
# zpool set autoreplace=on mpool # zpool get autoreplace mpool NAME PROPERTY VALUE SOURCE mpool autoreplace on default |
Имя свойства |
Тип |
Значение по умолчанию |
Описание |
---|---|---|---|
altroot |
Строка |
off |
Указывает альтернативный корневой каталог. Если указан, этот каталог добавляется к началу любых точек монтирования в пуле. Это свойство можно использовать при проверке неизвестного пула, если нельзя доверять точкам монтирования, или в альтернативной среде загрузки, где типовые пути не являются действительными. |
available |
Число |
нет |
Доступное только для чтения значение, которое показывает доступный объем хранилища в пуле. На это свойство можно также ссылаться с помощью сокращенного имени столбца avail. |
autoreplace |
Логическое значение |
off |
Управляет автоматической заменой устройств. Если свойство отключено, замена устройства должна инициироваться администратором с помощью команды zpool replace. Если свойство включено, все новые устройства, обнаруженные в том же физическом расположении, что и устройство, ранее принадлежавшее пулу, автоматически форматируются и заменяются. Настройка по умолчанию – off. На это свойство можно также ссылаться с помощью сокращенного имени столбца replace. |
bootfs |
Логическое значение |
нет |
Определяет загружаемый набор данных по умолчанию для корневого пула. Предполагается, что это свойство указывается в основном программами установки и обновления. |
CAPACITY |
Число |
нет |
Доступное только для чтения значение, которое показывает долю используемого пространства пула. На это свойство можно также ссылаться с помощью сокращенного имени столбца cap. |
delegation |
Логическое значение |
on |
Указывает, могут ли непривилегированному пользователю предоставляться разрешения на доступ, определенные для набора данных. Для получения дополнительных сведений см. Глава 9Делегированное администрирование ZFS. |
failmode |
Строка |
wait |
Управляет поведением системы в случае катастрофического сбоя пула. Это условие обычно возникает в результате потери подключения к устройству хранилища данных или сбоя всех устройств в пуле. Поведение в этом случае определяется одним из следующих значений.
|
guid |
Строка |
нет |
Доступное только для чтения свойство, которое определяет уникальный идентификатор пула. |
HEALTH |
Строка |
нет |
Доступное только для чтения свойство, которое определяет текущую работоспособность пула с помощью значений ONLINE, DEGRADED, FAULTED, OFFLINE, REMOVED или UNAVAIL.. |
listsnapshots |
Строка |
off |
Определяет, должна ли ассоциированная с данным пулом информация снимка отображаться с помощью команды zfs list. Если это свойство отключено, для вывода данных о снимках можно воспользоваться командой zfs list -t snapshot. Значением по умолчанию является on. |
size |
Число |
нет |
Доступное только для чтения свойство, которое определяет общий размер пула устройств хранения данных. |
used |
Число |
нет |
Доступное только для чтения свойство, которое показывает объем хранилища, используемый пулом. |
version |
Число |
нет |
Определяет текущую версию пула на диске. Это значение может увеличиваться, но не может уменьшаться. Лучшим средством обновления пула является команда zpool upgrade, хотя это свойство можно использовать, если для совместимости с предыдущими версиями требуется конкретная версия пула. Значением этого свойства может быть любое число от 1 до текущей версии, которую возвращает команда zpool upgrade - v. Значение current представляет псевдоним для последней поддерживаемой версии. |
Команда zpool list обеспечивает ряд способов для запроса информации о состоянии пула. Как правило, доступная информация подразделяется на три категории: базовая информация об использовании, статистика ввода/вывода и статус работоспособности. В этом разделе рассматриваются все три типа информации о пулах устройств хранения данных.
Просмотр базовой информации пула устройств хранения данных ZFS
Просмотр статистики ввода/вывода для пула устройств хранения данных ZFS
Определение статуса работоспособности пулов устройств хранения данных ZFS
Для просмотра базовой информации о пулах используется команда zpool list.
При отсутствии указанных аргументов команда отображает все поля для всех пулов в системе. Пример:
# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 80.0G 22.3G 47.7G 28% ONLINE - dozer 1.2T 384G 816G 32% ONLINE - |
В этих выходных данных содержится следующая информация:
Имя пула.
Общая емкость пула, равная сумме емкостей всех виртуальных устройств верхнего уровня.
Объем пространства, распределяемый между всеми наборами данных и внутренними метаданными. Следует отметить, что этот объем отличается от объема пространства на уровне файловой системы.
Для получения дополнительной информации об определении доступного пространства файловой системы см. Учет пространства ZFS.
Объем нераспределенного пространства в пуле.
Объем используемого пространства, выраженный как процент от общего пространства.
Текущий статус работоспособности пула.
Определение статуса работоспособности пулов устройств хранения данных ZFS.
Альтернативный корень пула, если таковой имеется.
Для получения дополнительной информации о пулах с альтернативным корнем см. Использование пулов ZFS с альтернативным корнем.
Также можно получить статистику по определенному пулу, указав имя пула. Пример:
# zpool list tank NAME SIZE USED AVAIL CAP HEALTH ALTROOT tank 80.0G 22.3G 47.7G 28% ONLINE - |
Для запроса определенной статистики используется параметр -o. Этот параметр позволяет выполнять пользовательские отчеты или быстро получить требуемые данные. Например, для вывода списка имен и емкостей каждого пула используется следующий синтаксис:
# zpool list -o name,size NAME SIZE tank 80.0G dozer 1.2T |
Имена столбцов соответствуют свойствам, перечисленным в разделе Вывод информации обо всех пулах устройств хранения данных.
Стандартные выходные данные команды zpool list в первую очередь удобочитаемы, однако их сложно использовать в сценариях интерпретатора команд. Для упрощения использования этой команды в сценариях имеется параметр -H для подавления вывода заголовков столбцов и разделения поля символами табуляции вместо пробелов. Например, для запроса простого списка всех имен пулов в системе можно ввести следующую команду:
# zpool list -Ho name tank dozer |
Ниже приведен еще один пример:
# zpool list -H -o name,size tank 80.0G dozer 1.2T |
ZFS автоматически регистрирует успешные команды zfs и zpool, изменяющие информацию о состоянии пула. Для просмотра этой информации используется команда zpool history.
Например, представленный ниже синтаксис отображает выходные данные команды для корневого пула.
# zpool history History for 'rpool': 2009-05-07.13:51:00 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile= /tmp/root/etc/zfs/zpool.cache rpool c1t0d0s0 2009-05-07.13:51:01 zfs set canmount=noauto rpool 2009-05-07.13:51:02 zfs set mountpoint=/rpool rpool 2009-05-07.13:51:02 zfs create -o mountpoint=legacy rpool/ROOT 2009-05-07.13:51:03 zfs create -b 8192 -V 2048m rpool/swap 2009-05-07.13:51:04 zfs create -b 131072 -V 1024m rpool/dump 2009-05-07.13:51:09 zfs create -o canmount=noauto rpool/ROOT/snv_114 2009-05-07.13:51:10 zpool set bootfs=rpool/ROOT/snv_114 rpool 2009-05-07.13:51:10 zfs set mountpoint=/ rpool/ROOT/snv_114 2009-05-07.13:51:11 zfs set canmount=on rpool 2009-05-07.13:51:12 zfs create -o mountpoint=/export rpool/export 2009-05-07.13:51:12 zfs create rpool/export/home |
Подобные выходные данные могут использоваться в системе для идентификации набора exact команд ZFS, который был выполнен для устранения сбоев при возникновении ошибки.
Протокол журнала имеет следующие характеристики:
отключение протокола журнала невозможно;
протокол журнала постоянно сохраняется на диске, т.е. при перезагрузке системы данные не утрачиваются;
протокол журнала организован по принципу кольцевого буфера; минимальный объем – 128 Кб; максимальный объем – 32 МБ;
для меньших пулов максимальный размер ограничен 1% размера пула, где размер size определяется во время создания пула;
отсутствует необходимость в дополнительном администрировании, т.е. задавать размер или изменять местоположение протокола журнала не требуется.
Для идентификации журнала команд определенного пула устройств хранения используется подобный синтаксис:
# zpool history mypool History for 'mypool': 2009-06-02.10:56:54 zpool create mypool mirror c0t4d0 c0t5d0 2009-06-02.10:57:31 zpool add mypool spare c0t6d0 2009-06-02.10:57:54 zpool offline mypool c0t5d0 2009-06-02.10:58:02 zpool online mypool c0t5d0 |
Параметр -l позволяет отображать длинный формат с указанием имени пользователя, имени узла и зоны, в которой выполняется операция. Пример:
# zpool history -l mypool History for 'mypool': 2009-06-02.10:56:54 zpool create mypool mirror c0t4d0 c0t5d0 [user root on neo:global] 2009-06-02.10:57:31 zpool add mypool spare c0t6d0 [user root on neo:global] 2009-06-02.10:57:54 zpool offline mypool c0t5d0 [user root on neo:global] 2009-06-02.10:58:02 zpool online mypool c0t5d0 [user root on neo:global] |
Параметр -i позволяет отображать сведения о внутренних событиях, которые можно использовать для диагностики. Пример:
# zpool history -i mypool History for 'mypool': 2009-06-02.10:56:54 zpool create mypool mirror c0t4d0 c0t5d0 2009-06-02.10:57:31 zpool add mypool spare c0t6d0 2009-06-02.10:57:54 zpool offline mypool c0t5d0 2009-06-02.10:58:02 zpool online mypool c0t5d0 2009-06-02.11:02:20 [internal create txg:23] dataset = 24 2009-06-02.11:02:20 [internal property set txg:24] mountpoint=/data dataset = 24 2009-06-02.11:02:20 zfs create -o mountpoint=/data mypool/data 2009-06-02.11:02:34 [internal create txg:26] dataset = 30 2009-06-02.11:02:34 zfs create mypool/data/datab |
Для запроса статистики ввода/вывода по пулу или определенным виртуальным устройствам используется команда zpool iostat. Подобно команде iostat, она выводит статический снимок всех операций ввода/вывода, выполненных вплоть до настоящего момента, а также актуальную статистику по каждому указанному интервалу. Отображается следующая статистика:
Объем данных, сохраненных в настоящее время в пуле или устройстве. Этот показатель незначительно отличается от объема пространства, доступного для фактических файловых систем, за счет внутренних особенностей реализации.
Для получения дополнительной информации о различиях между пространством пула и пространством набора данных см. Учет пространства ZFS.
Объем пространства, доступного в пуле или устройстве. Как и в статистике по показателю used, этот объем незначительно отличается от объема пространства, доступного для наборов данных.
Количество операций чтения для пула или устройства, включая запросы метаданных.
Количество операций записи для пула или устройства.
Пропускная способность для всех операций чтения (включая метаданные), выраженная в единицах в секунду.
Пропускная способность для всех операций записи, выраженная в единицах в секунду.
Если параметры не указаны, команда zpool iostat выводит полную статистику с момента начальной загрузки для всех пулов в системе. Пример:
# zpool iostat capacity operations bandwidth pool used avail read write read write ---------- ----- ----- ----- ----- ----- ----- tank 100G 20.0G 1.2M 102K 1.2M 3.45K dozer 12.3G 67.7G 132K 15.2K 32.1K 1.20K |
Поскольку эта статистика суммируется с момента начальной загрузки, при низком уровне активности пула полоса пропускания может быть определена как относительно свободная. Указание конкретного интервала позволяет получить более точные данные по текущему использованию полосы пропускания. Пример:
# zpool iostat tank 2 capacity operations bandwidth pool used avail read write read write ---------- ----- ----- ----- ----- ----- ----- tank 100G 20.0G 1.2M 102K 1.2M 3.45K tank 100G 20.0G 134 0 1.34K 0 tank 100G 20.0G 94 342 1.06K 4.1M |
В этом примере отображается статистика использования только для пула tank, обновляемая каждые две секунды до нажатия Ctrl+C. Также можно указать дополнительный параметр count, завершающий выполнение команды после определенного количества итераций. Например, команда zpool iostat 2 3 выводит сводку через каждые две секунды в рамках трех итераций, в общей сложности в течение шести секунд. При наличии только одного пула статистика отображается в последовательных строках. При наличии нескольких пулов каждая итерация визуально выделяется дополнительной пунктирной линией.
Помимо статистики ввода/вывода по всему пулу, команда zpool iostat позволяет просмотреть статистику по определенным виртуальным устройствам. Эта команда может использоваться для выявления медленно работающих устройств или просто для контроля данных ввода/вывода, генерируемых ZFS. Для запроса полной структуры виртуального устройства с полной статистикой ввода/вывода используется команда zpool iostat -v. Пример:
# zpool iostat -v capacity operations bandwidth tank used avail read write read write ---------- ----- ----- ----- ----- ----- ----- mirror 20.4G 59.6G 0 22 0 6.00K c1t0d0 - - 1 295 11.2K 148K c1t1d0 - - 1 299 11.2K 148K ---------- ----- ----- ----- ----- ----- ----- total 24.5K 149M 0 22 0 6.00K |
При просмотре статистики ввода/вывода по отдельным виртуальным устройствам обратите внимание на две важных особенности:
Во-первых, использование пространства отображается только для виртуальных устройств верхнего уровня. Способ распределения пространства между зеркальными виртуальными устройствами и виртуальными устройствами RAID-Z зависит от реализации и не может быть выражен как единый показатель.
Во-вторых, показатели не всегда должны суммироваться так, как это можно было бы предположить. В частности, число операций для устройств RAID-Z и зеркальных устройств различается. Это различие особенно заметно после создания пула, поскольку значительное количество операций ввода/вывода выполняется непосредственно на дисках в рамках процедуры создания пула, и эти операции не учитываются на уровне зеркала. Через некоторое время эти показатели постепенно выравниваются, несмотря на то, что неисправные, не отвечающие или автономные (в автономном режиме) устройства могут также повлиять на этот баланс.
Тот же набор параметров (интервал и количество) используется при исследовании статистики виртуальных устройств.
В ZFS предусмотрены методы проверки работоспособности устройства и пула. Работоспособность пула определяется на основе состояния всех его устройств. Эта информация о состоянии отображается с помощью команды zpool status. Кроме того, для выявления потенциальных сбоев пула и устройств используется команда fmd, и они отображаются в системной консоли и в файле /var/adm/messages. В этом разделе описывается процедура определения работоспособности пула и устройства. Способы устранения сбоев или восстановления неработоспособных пулов здесь не рассматриваются. Дополнительно об устранении неполадок и восстановлении данных см. Глава 11Поиск и устранение сбоев и восстановление данных в ZFS.
Каждое устройство может находиться в одном из следующих состояний:
Устройство находится в нормальном рабочем состоянии. Несмотря на возможность возникновения некоторых временных ошибок, устройство исправно.
Произошел сбой виртуального устройства, однако оно по-прежнему функционирует. Это состояние является наиболее распространенным при потере связи между зеркалом или устройством RAID-Z и одним или несколькими составными устройствами. Отказоустойчивость пула может быть подвергнута риску, т. к. следующий сбой в каком-либо другом устройстве может оказаться неисправимым.
Виртуальное устройство полностью недоступно. Это состояние обычно указывает на полный сбой устройства, в результате которого ZFS не может обмениваться данными с этим устройством. Если виртуальное устройство верхнего уровня находится в этом состоянии, то весь пул становится недоступным.
Виртуальное устройство было явно переведено администратором в автономный режим.
Доступ к устройству или виртуальному устройству невозможен. В некоторых случаях пулы с устройствами в состоянии UNAVAILABLE отображаются в режиме DEGRADED. Если виртуальное устройство верхнего уровня недоступно, то также недоступны все элементы пула.
Устройство было физически удалено во время работы системы. Обнаружение удаления устройств является аппаратной функцией и может не поддерживаться на некоторых платформах.
Работоспособность пула определяется на основе работоспособности всех виртуальных устройств верхнего уровня. Если все виртуальные устройства находятся в состоянии ONLINE, то пул также находится в состоянии ONLINE. Если какое-либо из виртуальных устройств находится в состоянии DEGRADED или UNAVAILABLE, то пул также находится в состоянии DEGRADED. Если виртуальное устройство верхнего уровня находится в состоянии FAULTED или OFFLINE, то пул также находится в состоянии FAULTED. Пул в состоянии FAULTED полностью недоступен. Восстановление данных без подключения или исправления требуемых устройств невозможно. Пул в состоянии DEGRADED продолжает функционировать, но обеспечение того же уровня избыточности данных или пропускной способности, что и при состоянии ONLINE, невозможно.
Наиболее простым способом получения краткого обзора статуса работоспособности пула является команда zpool status:
# zpool status -x all pools are healthy |
Для проверки определенных пулов в команде необходимо указать имя пула. Любой пул, не находящийся в состоянии ONLINE, должен быть проверен на наличие потенциальных проблем, как описано в следующем разделе.
Для запроса более подробных данных по работоспособности используется параметр -v. Пример:
# zpool status -v tank pool: tank state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: none requested config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror DEGRADED 0 0 0 c1t0d0 FAULTED 0 0 0 cannot open c1t1d0 ONLINE 0 0 0 errors: No known data errors |
Эти выходные данные содержат полное описание причины текущего состояния пула, включая четкое описание проблемы и ссылку на статью в базе знаний для получения дополнительной информации. Каждая такая статья позволяет получить актуальную информацию по рекомендуемым способам устранения текущей проблемы. С помощью подробной информации о конфигурации можно определить, какое из устройств повреждено и как восстановить пул.
В приведенном выше примере неисправное устройство требуется заменить. После замены устройства для его перевода обратно в оперативный режим используется команда zpool online. Пример:
# zpool online tank c1t0d0 Bringing device c1t0d0 online # zpool status -x all pools are healthy |
Если пул содержит устройство в автономном режиме, то этот проблемный пул будет указан в выходных данных команды. Пример:
# zpool status -x pool: tank state: DEGRADED status: One or more devices has been taken offline by the adminstrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scrub: none requested config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 OFFLINE 0 0 0 errors: No known data errors |
Столбцы READ и WRITE содержат количество ошибок ввода/вывода, зарегистрированных для устройства, тогда как столбец CKSUM содержит количество неисправимых ошибок контрольной суммы, возникших в устройстве. Оба эти счетчика ошибок определяют вероятность сбоя устройства и необходимость корректировочных действий. При обнаружении ненулевых счетчиков ошибок для виртуального устройства верхнего уровня часть данных может оказаться недоступной. Счетчик ошибок учитывает все известные ошибки в данных.
В приведенном выше примере выходных данных устройство в автономном режиме не приводит к возникновению ошибок в данных.
Для получения дополнительной информации о диагностике и восстановлении неисправных пулов и данных см. Глава 11Поиск и устранение сбоев и восстановление данных в ZFS.
В некоторых случаях может потребоваться перенос пула устройств хранения данных с одного компьютера на другой. При этом устройства хранения требуется отключить от исходного компьютера и подключить к целевому компьютеру. Эта задачу можно решить путем повторного физического кабельного подключения устройств или при помощи многопортовых устройств, например, устройств в SAN. ZFS позволяет экспортировать пул из одного компьютера и импортировать его в целевой компьютер, даже если они имеют различный порядок следования байтов (endianness). Дополнительно о репликации или переходе файловых систем между разными пулами устройств хранения данных, которые могут находиться на разных компьютерах, см. Отправка и получение данных ZFS.
Определение доступных пулов устройств хранения данных для импорта
Поиск пулов устройств хранения данных ZFS в альтернативных каталогах
Восстановление уничтоженных пулов устройств хранения данных ZFS
Пулы устройств хранения данных должны быть явно экспортированы, что будет указывать на их готовность к переходу. Эта операция приводит к загрузке на диск всех незаписанных данных, записи данных на диск с указанием о том, что был выполнен экспорт, и удалению всех данных пула из системы.
Если пул явно не экспортирован, но вместо этого диски удалены вручную, этот пул также можно импортировать в другую систему. Однако при этом может потеряться несколько последних секунд транзакций данных, и в исходном компьютере пул будет отображаться как неисправный, поскольку соответствующие устройства отсутствуют. По умолчанию попытка импорта пула, который не был явно экспортирован, на целевом компьютере отклоняется. Это необходимо для предотвращения непреднамеренного импорта активного пула, состоящего из подключенного к сети устройства хранения, которое по-прежнему используется в другой системе.
Для экспорта пула используется команда zpool export. Пример:
# zpool export tank |
После выполнения этой команды пул tank больше не отображается в системе. Перед продолжением предпринимается попытка размонтирования всех смонтированных файловых систем в пуле. Если размонтировать какую-либо из файловых систем не удается, ее можно размонтировать принудительно с помощью параметра -f. Пример:
# zpool export tank cannot unmount '/export/home/eschrock': Device busy # zpool export -f tank |
Если во время экспорта устройства были недоступны, то диски не могут быть указаны как штатно экспортированные. При последующем подключении одного из этих устройств к системе без рабочих устройств это устройство отображается как "потенциально активное". Если в пуле используются тома ZFS, пул не может быть экспортирован даже при помощи параметра -f. Чтобы экспортировать пул с томом ZFS, сначала убедитесь, что все потребители тома не активны.
Для получения дополнительной информации о томах ZFS см. Тома ZFS.
После удаления пула из системы (путем экспорта или принудительного удаления устройств) необходимо присоединить устройства к целевой системе. Несмотря на то, что ZFS может разрешать некоторые ситуации, в которых доступна только часть устройств, переносить в новую систему следует все устройства пула. Эти устройства не обязательно должны присоединяться под прежним именем. ZFS обнаруживает любые перемещенные или переименованные устройства и корректирует настройки соответствующим образом. Для получения списка доступных пулов используется команда zpool import без каких-либо параметров. Пример:
# zpool import pool: tank id: 3778921145927357706 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: tank ONLINE mirror ONLINE c1t0d0 ONLINE c1t1d0 ONLINE |
В этом примере пул tank доступен для импорта в целевую систему. Каждый пул идентифицируется по имени, а также по уникальному числовому идентификатору. Если несколько пулов, доступных для импорта, имеют совпадающие имена, то для их различия можно использовать цифровой идентификатор.
Подобно команде zpool status, команда zpool import содержит ссылку на статью базы знаний в Интернете с наиболее актуальной информацией о процедурах восстановления после устранения проблемы, возникшей при импорте пула. В этом случае пользователь может принудительно импортировать пул. Однако импорт пула, который в настоящее время используется другой системой в сети хранения данных, может привести к повреждению данных и возникновению фатальной ошибки, поскольку обе системы будут предпринимать попытки записи в одну и ту же область. Если определенные устройства в пуле недоступны, но для пула обеспечена достаточная избыточность, пул отображается в состоянии DEGRADED. Пример:
# zpool import pool: tank id: 3778921145927357706 state: DEGRADED status: One or more devices are missing from the system. action: The pool can be imported despite missing or damaged devices. The fault tolerance of the pool may be compromised if imported. see: http://www.sun.com/msg/ZFS-8000-2Q config: tank DEGRADED mirror DEGRADED c1t0d0 UNAVAIL cannot open c1t1d0 ONLINE |
В этом примере первый диск поврежден или отсутствует, однако импорт пула по-прежнему возможен, поскольку доступны зеркальные данные. При наличии слишком большого количества неисправных или отсутствующих устройств импорт пула невозможен. Пример:
# zpool import pool: dozer id: 12090808386336829175 state: FAULTED action: The pool cannot be imported. Attach the missing devices and try again. see: http://www.sun.com/msg/ZFS-8000-6X config: raidz FAULTED c1t0d0 ONLINE c1t1d0 FAULTED c1t2d0 ONLINE c1t3d0 FAULTED |
В этом примере в виртуальном устройстве RAID-Z отсутствуют два диска. Это означает, что избыточные данные, необходимые для восстановления пула, недоступны. В некоторых случаях отсутствует ряд устройств, необходимых для определения полной конфигурации. Поэтому ZFS не может определить, какие другие устройства входили в пул, несмотря на доступность максимального объема информации. Пример:
# zpool import pool: dozer id: 12090808386336829175 state: FAULTED status: One or more devices are missing from the system. action: The pool cannot be imported. Attach the missing devices and try again. see: http://www.sun.com/msg/ZFS-8000-6X config: dozer FAULTED missing device raidz ONLINE c1t0d0 ONLINE c1t1d0 ONLINE c1t2d0 ONLINE c1t3d0 ONLINE Additional devices are known to be part of this pool, though their exact configuration cannot be determined. |
По умолчанию команда zpool import позволяет выполнить поиск устройств только в каталоге /dev/dsk. При наличии устройств в другом каталоге или файловых пулов для их поиска следует использовать параметр -d. Пример:
# zpool create dozer mirror /file/a /file/b # zpool export dozer # zpool import -d /file pool: dozer id: 10952414725867935582 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: dozer ONLINE mirror ONLINE /file/a ONLINE /file/b ONLINE # zpool import -d /file dozer |
Если устройства существуют в нескольких каталогах, можно указать несколько параметров - d.
После определения пула для импорта его можно импортировать, указав имя пула или его числовой идентификатор в качестве аргумента команды zpool import. Пример:
# zpool import tank |
Если нескольким доступным пулам присвоено одинаковое имя, пул для импорта можно указать с помощью числового идентификатора. Пример:
# zpool import pool: dozer id: 2704475622193776801 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: dozer ONLINE c1t9d0 ONLINE pool: dozer id: 6223921996155991199 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: dozer ONLINE c1t8d0 ONLINE # zpool import dozer cannot import 'dozer': more than one matching pool import by numeric ID instead # zpool import 6223921996155991199 |
В случае конфликта имени пула с именем существующего пула этот пул можно импортировать под другим именем. Пример:
# zpool import dozer zeepool |
Эта команда импортирует экспортированный пул dozer с использованием нового имени zeepool. Если пул не был экспортирован штатно, необходимо установить флаг -f для предотвращения случайного импорта пула, который по-прежнему используется другой системой. Пример:
# zpool import dozer cannot import 'dozer': pool may be in use on another system use '-f' to import anyway # zpool import -f dozer |
Пулы также можно импортировать с альтернативным корнем, указываемым при помощи параметра -R. Дополнительно о пулах с альтернативными корнями см. Использование пулов ZFS с альтернативным корнем.
Для восстановления уничтоженного пула устройств хранения данных используется команда zpool import -D. Пример:
# zpool destroy tank # zpool import -D pool: tank id: 3778921145927357706 state: ONLINE (DESTROYED) action: The pool can be imported using its name or numeric identifier. The pool was destroyed, but can be imported using the '-Df' flags. config: tank ONLINE mirror ONLINE c1t0d0 ONLINE c1t1d0 ONLINE |
В приведенных выше выходных данных команды zpool import пул можно идентифицировать как уничтоженный на основе следующей информации о состоянии:
state: ONLINE (DESTROYED) |
Для восстановления уничтоженного пула повторите команду zpool import -D для пула, который требуется восстановить. Пример:
# zpool import -D tank # 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 c1t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 errors: No known data errors |
Если одно из устройств в уничтоженном пуле неисправно или недоступно, уничтоженный пул тем не менее можно восстановить, используя параметр -f. В этом случае импортируется неисправный пул, а затем предпринимается попытка исправления ошибки устройства. Пример:
# zpool destroy dozer # zpool import -D pool: dozer id: state: DEGRADED (DESTROYED) status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 09:33:56 2009 config: NAME STATE READ WRITE CKSUM dozer DEGRADED 0 0 0 raidz2 DEGRADED 0 0 0 c2t8d0 ONLINE 0 0 0 c2t9d0 ONLINE 0 0 0 c2t10d0 ONLINE 0 0 0 c2t11d0 UNAVAIL 0 35 1 cannot open c2t12d0 ONLINE 0 0 0 errors: No known data errors # zpool import -Df dozer # zpool status -x pool: dozer state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 09:33:56 2009 config: NAME STATE READ WRITE CKSUM dozer DEGRADED 0 0 0 raidz2 DEGRADED 0 0 0 c2t8d0 ONLINE 0 0 0 c2t9d0 ONLINE 0 0 0 c2t10d0 ONLINE 0 0 0 c2t11d0 UNAVAIL 0 37 0 cannot open c2t12d0 ONLINE 0 0 0 errors: No known data errors # zpool online dozer c2t11d0 Bringing device c2t11d0 online # zpool status -x all pools are healthy |
При использовании пулов устройств хранения данных ZFS предыдущего выпуска Solaris, например выпуска Solaris 10 6/06, воспользоваться преимуществом функций обновления пула Solaris 10 11/06 можно с помощью команды zpool upgrade. Кроме того, измененная команда zpool status может проинформировать пользователя об использовании в пулах старых версий. Пример:
# zpool status pool: test state: ONLINE status: The pool is formatted using an older on-disk format. The pool can still be used, but some features are unavailable. action: Upgrade the pool using 'zpool upgrade'. Once this is done, the pool will no longer be accessible on older software versions. scrub: none requested config: NAME STATE READ WRITE CKSUM test ONLINE 0 0 0 c1t27d0 ONLINE 0 0 0 errors: No known data errors |
Для вывода дополнительной информации по определенной версии и поддерживаемым релизам используется следующий синтаксис.
# zpool upgrade -v This system is currently running ZFS version 3. The following versions are supported: VER DESCRIPTION --- -------------------------------------------------------- 1 Initial ZFS version 2 Ditto blocks (replicated metadata) 3 Hot spares and double parity RAID-Z For more information on a particular version, including supported releases, see: http://www.opensolaris.org/os/community/zfs/version/N Where 'N' is the version number. |
Затем для обновления пулов можно выполнить команду zpool upgrade. Пример:
# zpool upgrade -a |
При обновлении пула до новой версии ZFS пул будет недоступен в системе, использующей более старую версию ZFS.