zpool – это механизм управления пулами, состоящих из томов zfs. В статье будет рассмотрены особенности работы zpool и ряд интересных опций данной команды. И так, приступим.
zpool можно сравнить с linux’овыми LVM, но только он намного функциональнее. Ключевое свойство – это наличие ведение истории пула. В истории хранятся успешно выполненные команды zfs и zpool, которые изменили информацию о состоянии пула.
1) Справка по командам.
zpool предоставляет удобный справочный инструмент для определения нужных ключей/значений той или иной команды. Это так сказать краткий manual. Запуск её очень прост:
#zpool help command | help | property property-name
К примеру:
$ zpool help add
usage:
add [-f] [-n [-l]] <pool> <vdev> ...
2) Список пулов
Узнаём список доступных пулов:
# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 15.9G 6.86G 9.02G 43% 1.00x ONLINE -
Есть очень интересная опция – интервал обновления информации: например, удобно наблюдать за часто меняющимся местом на пуле. Просто после слова list указывает число (в секундах).
3) Журнал команд ZFS (zpool history)
Это усовершенствование средств системного администрирования впервые введено в выпуске Solaris Express 12/06.
ZFS автоматически регистрирует успешные команды zfs и zpool, изменяющие информацию о состоянии пула. Пример:
# zpool history
History for 'newpool':
2006-10-23.08:58:22 zpool create -f newpool c1t2d0
2006-10-23.08:59:02 zpool replace -f newpool c1t2d0 c1t3d0
2006-10-23.08:59:54 zpool attach -f newpool c1t3d0 c1t4d0
Эта функция позволяет пользователю или персоналу технической поддержки Sun определить точный состав выполненных команд ZFS для поиска причин возникновения ошибки.
Протокол журнала имеет следующие характеристики:
– отключение протокола невозможно;
– протокол постоянно сохраняется на диске, т.е. при перезагрузке системы данные сохраняются;
– протоколирование организовано по принципу кольцевого буфера; минимальный объем составляет 128 Кб; максимальный объем составляет 32 Мб;
– для меньших пулов максимальный размер ограничен 1% размера пула, где размер size определяется во время создания пула;
– действия по настройке протокола не требуются. Это означает, что отсутствует необходимость установки размера или изменения местоположения протокола.
Для того, что бы посмотреть расширенный режим (кто, в какой зоне) используется ключ -l:
# zpool history -l rpool
History for 'rpool':
2009-08-26.16:49:07 zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=
/tmp/root/etc/zfs/zpool.cache rpool c1t1d0s0 [user root on neo:global]
2009-08-26.16:49:08 zfs set canmount=noauto rpool [user root on neo:global]
2009-08-26.16:49:08 zfs set mountpoint=/rpool rpool [user root on neo:global]
2009-08-26.16:49:09 zfs create -o mountpoint=legacy rpool/ROOT [user root on neo:global]
2009-08-26.16:49:10 zfs create -b 8192 -V 2048m rpool/swap [user root on neo:global]
2009-08-26.16:49:11 zfs create -b 131072 -V 1024m rpool/dump [user root on neo:global]
2009-08-26.16:49:14 zfs create -o canmount=noauto rpool/ROOT/zfs1009BE [user root on neo:global]
2009-08-26.16:49:15 zpool set bootfs=rpool/ROOT/zfs1009BE rpool [user root on neo:global]
2009-08-26.16:49:15 zfs set mountpoint=/ rpool/ROOT/zfs1009BE [user root on neo:global]
2009-08-26.16:49:16 zfs set canmount=on rpool [user root on neo:global]
2009-08-26.16:49:17 zfs create -o mountpoint=/export rpool/export [user root on neo:global]
2009-08-26.16:49:18 zfs create rpool/export/home [user root on neo:global]
2009-08-28.08:17:59 zpool attach rpool c1t1d0s0 c1t0d0s0 [user root on neo:global]
Для ещё более детального вывода используйте дополнительно ключ ‘-i’.
4) Параметры пула.
Что бы получить список параметров пула используем команду zpool get. Ключевое слово all выведет все параметры пула:
zpool get "all" rpool NAME PROPERTY VALUE SOURCE rpool size 15.9G - rpool capacity 43% - rpool altroot - default rpool health ONLINE - rpool guid 439004504488420144 - rpool version 33 default rpool bootfs rpool/ROOT/solaris local rpool delegation on default rpool autoreplace off default rpool cachefile - default rpool failmode wait default rpool listsnapshots off default rpool autoexpand off default rpool dedupditto 0 default rpool dedupratio 1.00x - rpool free 9.02G - rpool allocated 6.86G - rpool readonly off -
Так же можно получить значение только нужной опции, указав вместо all нужный параметр.
Ниже приводится описание опций
Имя свойства | Тип | Значение по умолчанию | Описание |
---|---|---|---|
allocated | Число | нет | Доступное только для чтения значение, которое показывает доступный объем занятого места в пуле.На это свойство можно также ссылаться с помощью сокращенного имени столбца ALLOC. |
altroot | Строка | off | Указывает альтернативный корневой каталог. Если указан, этот каталог добавляется к началу любых точек монтирования в пуле. Это свойство можно использовать при проверке неизвестного пула, если нельзя доверять точкам монтирования, или в альтернативной среде загрузки, где типовые пути не являются действительными. |
autoexpand | Логическое значение | off | Указывает на то, должен ли пул автоматически увечиться в размере при увеличении размеров устройств(LUN) |
autoreplace | Логическое значение | off | Управляет автоматической заменой устройств. Если свойство отключено, замена устройства должна инициироваться администратором с помощью команды zpool replace. Если свойство включено, все новые устройства, обнаруженные в том же физическом расположении, что и устройство, ранее принадлежавшее пулу, автоматически форматируются и заменяются. Настройка по умолчанию – off. На это свойство можно также ссылаться с помощью сокращенного имени столбца replace. |
bootfs | Логическое значение | нет | Определяет загружаемый набор данных по умолчанию для корневого пула. Предполагается, что это свойство указывается в основном программами установки и обновления. |
cachefile | Строка | нет | Определяет положение файла кэша конфигурации пула |
CAPACITY | Число | нет | Доступное только для чтения значение, которое показывает долю используемого пространства пула.На это свойство можно также ссылаться с помощью сокращенного имени столбца cap. |
delegation | Логическое значение | on | Указывает, могут ли непривилегированному пользователю предоставляться разрешения на доступ, определенные для набора данных. Для получения дополнительных сведений см. Глава 9Делегированное администрирование ZFS. |
dedupditto | Число | 0 | Пороговое значение числа копий снимков zfs |
dedupratio | Число | 0 | Кофициент сжатия |
failmode | Строка | wait | Управляет поведением системы в случае катастрофического сбоя пула. Это условие обычно возникает в результате потери подключения к устройству хранилища данных или сбоя всех устройств в пуле. Поведение в этом случае определяется одним из следующих значений.
|
free | Число | Количество свободного места на пуле | |
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 представляет псевдоним для последней поддерживаемой версии. |
5) Состояние пула.
Команда zpool status покажет состояние всех пулов в системе, а так же состояние дисков, входящих в каждый пул.
Каждое устройство может находиться в одном из следующих состояний:
- ONLINE
- Устройство находится в нормальном рабочем состоянии. Несмотря на возможность возникновения некоторых временных ошибок, устройство исправно.
- DEGRADED
- Произошел сбой виртуального устройства, однако оно по-прежнему функционирует. Это состояние является наиболее распространенным при потере связи между зеркалом или устройством RAID-Z и одним или несколькими составными устройствами. Отказоустойчивость пула может быть подвергнута риску, т. к. следующий сбой в каком-либо другом устройстве может оказаться неисправимым.
- FAULTED
- Виртуальное устройство полностью недоступно. Это состояние обычно указывает на полный сбой устройства, в результате которого ZFS не может обмениваться данными с этим устройством. Если виртуальное устройство верхнего уровня находится в этом состоянии, то весь пул становится недоступным.
- OFFLINE
- Виртуальное устройство было явно переведено администратором в автономный режим.
- UNAVAILABLE
- Доступ к устройству или виртуальному устройству невозможен. В некоторых случаях пулы с устройствами в состоянии UNAVAILABLE отображаются в режиме DEGRADED. Если виртуальное устройство верхнего уровня недоступно, то также недоступны все элементы пула.
- REMOVED
- Устройство было физически удалено во время работы системы. Обнаружение удаления устройств является аппаратной функцией и может не поддерживаться на некоторых платформах.
Если требуется узнать только состояние пула, можно использовать короткий вывод:
$ zpool status -x
all pools are healthy
6) Проверка пула.
Наиболее простым способом проверки целостности данных является инициирование явной очистки всех данных в пуле. Эта операция позволяет проследить все данные в пуле и проверить возможность чтения блоков на определенный момент времени. Очистка выполняется с той скоростью, с которой это позволяют соответствующие устройства, несмотря на то, что приоритет ввода/вывода остается ниже, чем в нормальном режиме работы. Эта операция может негативно повлиять на производительность, несмотря на то, что файловая система остается доступной и обеспечивает в процессе очистки почти такой же отклик. Для инициирования явной очистки используется команда zpool scrub.
Команда zpool scrub проверяет пул на целостность, то есть читает каждый занятый блок пула, считает его контрольную сумму и сравнивает с записанной на диске. Для реплицируемых устройств (mirror, raidz) производится автоматическое восстановление данных
Ограничения.
– в конкретный момент времени может выполняться только одна операция активной очистки в пуле (поскольку это низкоуровневые операции I\O).
В 99% случаях выполнение команды scrub не требуется.
Пример.
# zpool scrub rpool # zpool status pool: rpool state: ONLINE scan: scrub in progress since Sat Dec 24 00:18:13 2011 2.22M scanned out of 6.86G at 378K/s, 5h16m to go 0 repaired, 0.03% done config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c3d0s0 ONLINE 0 0 0 errors: No known data errors
Остановить проверку можно так:
#zpool scrub -s rpool
7) Очистка ошибок
Если на устройстве раньше присутствовали ошибки, то да данная команда убирёт флаг наличия ошибок с пула и даст его инициализировать
# zpool clear %pool_name%
8) Мониторинг производительности
По аналогии с утилитой iostat существует команда zpool iostat, которая выводит статический снимок всех операций ввода/вывода, выполненных вплоть до настоящего момента, а также актуальную статистику по каждому указанному интервалу. Отображается следующая статистика:
- ALLOC CAPACITY
- Объем данных, сохраненных в настоящее время в пуле или устройстве. Этот показатель незначительно отличается от объема пространства, доступного для фактических файловых систем, за счет внутренних особенностей реализации.Для получения дополнительной информации о различиях между пространством пула и пространством набора данных см. Учет пространства ZFS.
- FREE CAPACITY
- Объем пространства, доступного в пуле или устройстве. Как и в статистике по показателю alloc, этот объем незначительно отличается от объема пространства, доступного для наборов данных.
- READ OPERATIONS
- Количество операций чтения для пула или устройства, включая запросы метаданных.
- WRITE OPERATIONS
- Количество операций записи для пула или устройства.
- READ BANDWIDTH
- Пропускная способность для всех операций чтения (включая метаданные), выраженная в единицах в секунду.
- WRITE BANDWIDTH
- Пропускная способность для всех операций записи, выраженная в единицах в секунду.
Пример
# 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
Для просмотра статистики отдельно по виртуальным устройствами, используйте ключ ‘-v’.
При просмотре статистики ввода/вывода по отдельным виртуальным устройствам обратите внимание на две важных особенности:
- Во-первых, использование пространства отображается только для виртуальных устройств верхнего уровня. Способ распределения пространства между зеркальными виртуальными устройствами и виртуальными устройствами RAID-Z зависит от реализации и не может быть выражен как единый показатель.
- Во-вторых, показатели не всегда должны суммироваться так, как это можно было бы предположить. В частности, число операций для устройств RAID-Z и зеркальных устройств различается. Это различие особенно заметно после создания пула, поскольку значительное количество операций ввода/вывода выполняется непосредственно на дисках в рамках процедуры создания пула, и эти операции не учитываются на уровне зеркала. Через некоторое время эти показатели постепенно выравниваются, несмотря на то, что неисправные, не отвечающие или автономные (в автономном режиме) устройства могут также повлиять на этот баланс.
9) Разделение пула
Команда zpool split – позволяет разделить зазеркалированный пул на две половинки — полноценные пулы. Доступна, начиная с ZFSv28. Данная возможность например позволяет упростить клонирование данных, когда к зеркалу добавляются несколько дисков, производится синхронизация и диски исключаются из пула, после чего диски содержат полную копию данных и могут быть использованы для загрузки аналогичных серверов. С использованием zpool split можно легко исключить диск из пула и затем создать на его основе новый пул;
10) Обновление пула ZFS
Для обновления пулов до более новой версии, что позволит воспользоваться всеми преимуществами новейших функций, используется команда zpool upgrade. Кроме того, измененная команда zpool status может проинформировать пользователя об использовании в пулах старых версий.
Пример.
# zpool upgrade -v This system is currently running ZFS pool version 33. The following versions are supported: VER DESCRIPTION --- -------------------------------------------------------- 1 Initial ZFS version 2 Ditto blocks (replicated metadata) 3 Hot spares and double parity RAID-Z 4 zpool history 5 Compression using the gzip algorithm 6 bootfs pool property 7 Separate intent log devices 8 Delegated administration 9 refquota and refreservation properties 10 Cache devices 11 Improved scrub performance 12 Snapshot properties 13 snapused property 14 passthrough-x aclinherit 15 user/group space accounting 16 stmf property support 17 Triple-parity RAID-Z 18 Snapshot user holds 19 Log device removal 20 Compression using zle (zero-length encoding) 21 Deduplication 22 Received properties 23 Slim ZIL 24 System attributes 25 Improved scrub stats 26 Improved snapshot deletion performance 27 Improved snapshot creation performance 28 Multiple vdev replacements 29 RAID-Z/mirror hybrid allocator 30 Encryption 31 Improved 'zfs list' performance 32 One MB blocksize 33 Improved share support For more information on a particular version, including supported releases, see the ZFS Administration Guide.
11) Специальные устройства в пулах.
– устройство кеша: используется для кэширования данных пула.
Наибольшее повышение производительности от использования устройств кэширования достигается в случае рабочих нагрузок, для которых характерны операции случайного чтения преимущественно статических данных.
Ограничения:
- Зеркалирование устройств кэширования невозможно; кроме того, они не могут быть частью конфигурации RAID-Z
- Объем содержимого устройства кэширования является непостоянным, как и в случае других системных кэшей.
Пример.
# 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
– устройства протоколирования: для оптимальной производительности пула рекомендуется выносить логгирование на отдельные диски
Ограничения:
- Устройства протоколирования могут использоваться без репликации или с зеркальным отражением, но RAID-Z для этих устройств не поддерживается.
- Устройства протоколирования можно добавлять, заменять, подключать, отключать, а также импортировать и экспортировать как часть более крупного пула устройств хранения данных. В настоящее время устройства протоколирования нельзя удалять.
- Минимальный размер устройства протоколирования совпадает с минимальным размером каждого устройства в пуле и составляет 64 МБ. Объем активных данных, которые могут храниться на устройстве протоколирования, относительно невелик. Блоки данных протоколирования освобождаются после выполнения транзакции протоколов (системный вызов).
- Максимальный размер устройства протоколирования должен составлять примерно 1/2 размера физической памяти, поскольку это максимальный объем потенциальных активных данных, которые могут храниться на устройстве. Например, если в системе имеется 16 ГБ физической памяти, максимальный размер устройства протоколирования должен составлять 8 ГБ.
Пример.
# 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
2 коментарі “Что такое zpool?”
Приветствую.)
Возникла такая ситуация:
bash-3.00# zpool status -v
pool: rpool
state: DEGRADED
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://www.sun.com/msg/ZFS-8000-8A
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rpool DEGRADED 0 0 0
c0d0s0 DEGRADED 0 0 0 too many errors
errors: Permanent errors have been detected in the following files:
rpool/export:
rpool/export:
Возможно ли как-то узнать дату, с которой поменялся статус пула? (Например, с online на degraded). И можно ли узнать, что за файлы с ошибками скрываются под записями:
rpool/export:
rpool/export:
Посмотреть системные логи или через zdb как-то. Других вариантов не знаю.