Неспешно прикидывая таблицу функциональности NAS обнаружил в своих инструкциях досадный пробел. Данные надо не просто хранить. Хорошо бы время от времени проверять, что всё в порядке. Ведь холодные данные на дисках имеют свойство незаметно портиться, «протухать». К счастью, у нас на NAS zfs, умеющий адресовать эту проблему.Сегодня обсудим как.
Немного теории
Перевод из Вики по ссылке выше
Проведённое NetApp исследование в реальной жизни на более чем 1,5 млн жестких дисков в течение 41 месяцев выявило более 400 000 примеров протухших данных, из которых более 30 000 не были обнаружены контроллерами аппаратных RAID. Еще одно исследование, проведенное ЦЕРН в течение шести месяцев и с участием около 97 петабайт данных, показало, что около 128 мегабайт данных были необратимо повреждены.
Но это на RAID контроллерах и дисках корпоративного класса. Ваши и мои данные на десктопном железе протухают несколько быстрее.
Традиционное решение проблемы проверки целостности данных — хранение вместе с ними контрольной суммы. Считываем данные, сверяем суммы, если OK — считаем данные не повреждёнными.
А традиционное решение проблемы восстановления повреждённых данных — избыточность. Хранение 2 и более копий (зеркало, как пример RAID1) и расчёт, хранение и сличение кодов чётности ( как пример — RAID5).
Одно из важнейших положительных свойств ZFS состоит в том, что и проверка целостности и восстановление повреждений (если есть избыточность — mirror или raidz) производится автоматически на уровне файловой системы при любом чтении данных. Но читать все данные не всегда удобно. Есть команда scrub (от англ. чистить, мыть, скрести)
ВАЖНО. Во время скраба пул доступен, но его производительность уменьшается. Хотя приоритет — за другими задачами. Поэтому, к примеру, качать с-на пул торренты и одновременно делать ему скраб идея так себе. Работать будет, но долго и с избыточной нагрузкой на диски.
На практике
Из командной строки вызываетсяzpool scrub Pool
— для пула по имени Pool
Если дать ключ -s текущий скраб будет остановленzpool scrub -s Pool
В nas4free вызов команды zpool scrub выведен и в вебгуй
Через Disks|ZFS|Pools|Tools скраб можно запустить (и остановить при необходимости)
После запуска результат можно посмотреть черезzpool status
в командной строке
Или в Disks|ZFS|Pools|Information в вебгуе
На картинке выше где scan: сказано, что идёт scrub, но так как он только начался, оставшееся время определить нельзя, надо подождать. Со временем скорость растёт, но для больших пулов полная проверка запросто может продлиться порядка суток. Скорость зависит от
— производительности процессора
— заполненности пула (в отличие от аппаратных RAID пустое место НЕ читается)
— скорости дисков. Особенно если диск при смерти, скраб может затянуться очень надолго.
Я рекомендую после запуска скраба взглянуть на статус сразу и ещё раз минут через пять. В норме все три правых столбца должны быть нулями. Но нередко там появляются небольшие цифры — это как раз сообщение о том, что скраб проверяет и по возможности исправляет данные (и метаданные).
Если на одном из дисков лезет несколько десятков (и более) ошибок — у вас проблема. Скорее всего (в этом порядке) SATA кабель, сам диск, порт контроллера подыхает и нуждается в замене. Либо диску не хватает питания.
Советую остановить скраб и взглянуть в логи, на смарт этого диска и поискать корень проблемы.
Если десятки (и более) ошибок лезут на ВСЕХ дисках — НЕМЕДЛЕННО ВЫКЛЮЧАЙТЕ СКРАБ, а затем и весь NAS. Хорошие шансы, что у вас битая память. Проверяйте, гоняйте мемтест. Хотя по некоторым практическим примерам ZFS удаётся отработать львиную долю, более 99%, ошибок вызванных сбоями в памяти, всё же битая память без контроля чётности — годный способ загубить всю информацию на пуле при скрабе. Именно поэтому в идеальном мире (и в корпоративной практике) ZFS используют на ECC (то есть с аппаратным контролем чётности) памяти. Впрочем, как и остальные файловые системы. Но Intel решила, что домашний пользователь рылом не вышел для ECC. А AMD стала слишком слаба, чтобы спорить хотя было время…
Кстати, скраб можно запускать по крону. Но именно из-за возможности вляпаться в битую память я этого делать НЕ советую, если память у вас не ECC. Да, это крайне маловероятная ситуация. Битая память должна почти работать. Шалить самую малость, не вешать систему. Но всё же гадить. Поэтому у сотен камрадов, которые общаются в профильной ветке на хоботе, такого не было, чтоб битая память именно и только на zfs повлияла. Но в Сети я выловил пару сообщений. Так что хоть и крайне маловероятно — но бережёного…
И, наконец, как часто делать скраб? IMHO в домашней практике не чаще раза в месяц и не реже раза в год на каждом из пулов.
Неспешно прикидывая таблицу функциональности NAS обнаружил в своих инструкциях досадный пробел. Данные надо не просто хранить. Хорошо бы время от времени проверять, что всё в порядке. Ведь холодные данные на дисках имеют свойство незаметно портиться, «протухать». К счастью, у нас на NAS zfs, умеющий адресовать эту проблему.Сегодня обсудим как.
Немного теории
Перевод из Вики по ссылке выше
Проведённое NetApp исследование в реальной жизни на более чем 1,5 млн жестких дисков в течение 41 месяцев выявило более 400 000 примеров протухших данных, из которых более 30 000 не были обнаружены контроллерами аппаратных RAID. Еще одно исследование, проведенное ЦЕРН в течение шести месяцев и с участием около 97 петабайт данных, показало, что около 128 мегабайт данных были необратимо повреждены.
Но это на RAID контроллерах и дисках корпоративного класса. Ваши и мои данные на десктопном железе протухают несколько быстрее.
Традиционное решение проблемы проверки целостности данных — хранение вместе с ними контрольной суммы. Считываем данные, сверяем суммы, если OK — считаем данные не повреждёнными.
А традиционное решение проблемы восстановления повреждённых данных — избыточность. Хранение 2 и более копий (зеркало, как пример RAID1) и расчёт, хранение и сличение кодов чётности ( как пример — RAID5).
Одно из важнейших положительных свойств ZFS состоит в том, что и проверка целостности и восстановление повреждений (если есть избыточность — mirror или raidz) производится автоматически на уровне файловой системы при любом чтении данных. Но читать все данные не всегда удобно. Есть команда scrub (от англ. чистить, мыть, скрести)
ВАЖНО. Во время скраба пул доступен, но его производительность уменьшается. Хотя приоритет — за другими задачами. Поэтому, к примеру, качать с-на пул торренты и одновременно делать ему скраб идея так себе. Работать будет, но долго и с избыточной нагрузкой на диски.
На практике
Из командной строки вызываетсяzpool scrub Pool
— для пула по имени Pool
Если дать ключ -s текущий скраб будет остановленzpool scrub -s Pool
В nas4free вызов команды zpool scrub выведен и в вебгуй
Через Disks|ZFS|Pools|Tools скраб можно запустить (и остановить при необходимости)
После запуска результат можно посмотреть черезzpool status
в командной строке
Или в Disks|ZFS|Pools|Information в вебгуе
На картинке выше где scan: сказано, что идёт scrub, но так как он только начался, оставшееся время определить нельзя, надо подождать. Со временем скорость растёт, но для больших пулов полная проверка запросто может продлиться порядка суток. Скорость зависит от
— производительности процессора
— заполненности пула (в отличие от аппаратных RAID пустое место НЕ читается)
— скорости дисков. Особенно если диск при смерти, скраб может затянуться очень надолго.
Я рекомендую после запуска скраба взглянуть на статус сразу и ещё раз минут через пять. В норме все три правых столбца должны быть нулями. Но нередко там появляются небольшие цифры — это как раз сообщение о том, что скраб проверяет и по возможности исправляет данные (и метаданные).
Если на одном из дисков лезет несколько десятков (и более) ошибок — у вас проблема. Скорее всего (в этом порядке) SATA кабель, сам диск, порт контроллера подыхает и нуждается в замене. Либо диску не хватает питания.
Советую остановить скраб и взглянуть в логи, на смарт этого диска и поискать корень проблемы.
Если десятки (и более) ошибок лезут на ВСЕХ дисках — НЕМЕДЛЕННО ВЫКЛЮЧАЙТЕ СКРАБ, а затем и весь NAS. Хорошие шансы, что у вас битая память. Проверяйте, гоняйте мемтест. Хотя по некоторым практическим примерам ZFS удаётся отработать львиную долю, более 99%, ошибок вызванных сбоями в памяти, всё же битая память без контроля чётности — годный способ загубить всю информацию на пуле при скрабе. Именно поэтому в идеальном мире (и в корпоративной практике) ZFS используют на ECC (то есть с аппаратным контролем чётности) памяти. Впрочем, как и остальные файловые системы. Но Intel решила, что домашний пользователь рылом не вышел для ECC. А AMD стала слишком слаба, чтобы спорить хотя было время…
Кстати, скраб можно запускать по крону. Но именно из-за возможности вляпаться в битую память я этого делать НЕ советую, если память у вас не ECC. Да, это крайне маловероятная ситуация. Битая память должна почти работать. Шалить самую малость, не вешать систему. Но всё же гадить. Поэтому у сотен камрадов, которые общаются в профильной ветке на хоботе, такого не было, чтоб битая память именно и только на zfs повлияла. Но в Сети я выловил пару сообщений. Так что хоть и крайне маловероятно — но бережёного…
И, наконец, как часто делать скраб? IMHO в домашней практике не чаще раза в месяц и не реже раза в год на каждом из пулов.
Данный справочник является переводом данной статьи. Авторы перевода: Евгений Ратников и Сгибнев Михаил. Огромное им спасибо за проделанную работу!
Данная информация представлена в интернете на множестве ресурсов. Оригинальная статья оформлена в виде таблицы, я же оформлю ее в привычном для моего блога формате — в формате пошагового обучения.
В любом случае не забывайте про страницы справки по командам работы с ZFS.
man zpool
man zfs
Так как включить в пул (zpool) можно любые сущности файловой системы, автор приводит примеры построения пулов и работы с ними с использованием простых файлов. Итак, создадим несколько файлов, с которыми будем работать подобно дискам.
cd /
mkfile 100m disk1 disk2 disk3 disk5
mkfile 50m disk4
Мы создали 5 «виртуальных дисков». Четыре имею размер по 100 Мб, а один — 50 Мб. Это пригодится для демонстрации работы с устройствами (разделами) разной ёмкости.
Теперь создадим простой пул без избыточности, затем проверим его размер и использование.
zpool create myzfs /disk1 /disk2
zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
myzfs 191M 94K 191M 0% ONLINE -
Созданы пул автоматически монтируется в каталог /myzfs
. Посмотрим более детальную информацию о нашем хранилище.
zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
errors: No known data errors
Из вывода видно, что в пул включены два диска. Пул без избыточности (не mirror и не RAIDZ).
Теперь попробуем удалить только что созданный пул. Должны же мы это уметь.
zpool destroy myzfs
zpool list
no pools available
Попробуем снова создать пул типа MIRROR (зеркало), но на этот раз попытаемся включить в него диски разного размера. Zpool не даст нам этого сделать. Чтобы безоговорочно создать такой пул, используйте опцию -f
, но в этом случае помните — размер зеркала будет равен объему наименьшего диска.
zpool create myzfs mirror /disk1 /disk4
invalid vdev specification
use '-f' to override the following errors:
mirror contains devices of different sizes
Создать зеркалируемое (MIRROR) хранилище можно на двух и более устройствах. Сколько устройств в пуле типа MIRROR
— столько у нас есть одинаковых копий данных.
zpool create myzfs mirror /disk1 /disk2 /disk3
zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
myzfs 95.5M 112K 95.4M 0% ONLINE -
zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
/disk3 ONLINE 0 0 0
errors: No known data errors
Вместо зеркалирования можно использовать массивы RAID. Для этого необходимо создавать пул типа raidz
вместо mirror
. Подробнее в хендбуке.
Давайте теперь исключим один из дисков из пула. Так как этот диск относится к зеркалу (MIRROR), то при его исключении никаких проблем не возникает.
zpool detach myzfs /disk3
zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
errors: No known data errors
Теперь давайте добавим к пулу новый диск. Если пул не был зеркальным, то он им станет после добавления нового диска.
zpool attach myzfs /disk1 /disk3
zpool status -v
pool: myzfs
state: ONLINE
scrub: resilver completed with 0 errors on Tue Sep 11 13:31:49 2007
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
/disk3 ONLINE 0 0 0
errors: No known data errors
А что будет, если попытаемся удалить, а не исключить устройство из пула? Zpool сообщит нам о том, что устройство не может быть удалено. Для начала его нужно отключить.
zpool remove myzfs /disk3
cannot remove /disk3: only inactive hot spares can be removed
zpool detach myzfs /disk3
Теперь давайте попробуем добавить диск горячей замены (hot spare) к нашему пулу.
zpool add myzfs spare /disk3
zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
spares
/disk3 AVAIL
errors: No known data errors
А теперь удалим его из пула.
zpool remove myzfs /disk3
zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
errors: No known data errors
Теперь попробуем отключить один из дисков. Пока диск отключен, на него не будет производиться запись и с него не будет производиться чтение. Если использовать параметр -t
, то при перезагрузке сервера диск вернется в состояние онлайн автоматически.
zpool offline myzfs /disk1
zpool status -v
pool: myzfs
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
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: resilver completed with 0 errors on Tue Sep 11 13:39:25 2007
config:
NAME STATE READ WRITE CKSUM
myzfs DEGRADED 0 0 0
mirror DEGRADED 0 0 0
/disk1 OFFLINE 0 0 0
/disk2 ONLINE 0 0 0
errors: No known data errors
Обратите внимание на состояние пула: DEGRADED
Теперь включим этот диск.
zpool online myzfs /disk1
zpool status -v
pool: myzfs
state: ONLINE
scrub: resilver completed with 0 errors on Tue Sep 11 13:47:14 2007
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
errors: No known data errors
Состояние пула снова ONLINE.
В данный момент в нашем пуле два диска: disc1 и disc2. Также в системе имеется диск disc3, но он не подключен к пулу. Предположим, что disc1 вышел из строя и его нужно заменить на disc3.
zpool replace myzfs /disk1 /disk3
zpool status -v
pool: myzfs
state: ONLINE
scrub: resilver completed with 0 errors on Tue Sep 11 13:25:48 2007
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk3 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
errors: No known data errors
Периодически для исправления ошибок необходимо выполнять процедуру чистки (scrubbing) для пулов типа MIRROR или RAID-Z. Данная процедура находит ошибки в контрольных суммах и исправляет их. Также восстанавливаются сбойные блоки.
Данная операция слишком ресурсоемка! Следует выполнять ее только во время наименьшей нагрузки на пул.
zpool scrub myzfs
Если необходимо перенести пул в другую систему, то его необходимо сначала экспортировать.
zpool export myzfs
pool list
no pools available
А затем импортировать в новой системе.
Если ключ -d
не указать, то команда ищет /dev/dsk
. Так как в данном примере мы используем файлы, необходимо указать директорию с файлами используемыми хранилищем.
zpool import -d / myzfs
zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
myzfs 95.5M 114K 95.4M 0% ONLINE -
Обновление версии пула. Показать версию используемого пула. Флаг -v
показывает возможности, поддерживаемые данным пулом. Используйте флаг -a
, чтобы обновить все доступные пулы до новейшей из них версии. Обновленные пулы больше не будут доступны из систем, на которых работают более старые версии.
zpool upgrade
This system is currently running ZFS pool version 8.
All pools are formatted using this version.
zpool upgrade -v
This system is currently running ZFS pool version 8.
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 pool properties
7 Separate intent log devices
8 Delegated administration
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 iostat 5
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
myzfs 112K 95.4M 0 4 26 11.4K
myzfs 112K 95.4M 0 0 0 0
myzfs 112K 95.4M 0 0 0 0
Работа с файловой и другими системами ZFS
#
Файловая система
#
Создадим файловую систему в нашем пуле. Затем проверим автомонтирование новой файловой системы.
zfs create myzfs/colin
df -h
Filesystem kbytes used avail capacity Mounted on
...
myzfs/colin 64M 18K 63M 1% /myzfs/colin
Получить список файловых систем ZFS можно следующей командой.
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 139K 63.4M 19K /myzfs
myzfs/colin 18K 63.4M 18K /myzfs/colin
В данный момент в нашем пуле имеется одно зеркало, в которое входят два диска: disc2 и disc3.
Давайте попробуем расширить наш пул. Попытаемся добавить к нему disc1
zpool add myzfs /disk1
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses mirror and new vdev is file
Попытка добавления не удалась, т.к. она неоднозначно и при добавлении диска к существующему зеркалу необходимо указать дополнительно один из существующих в этом зеркале дисков, либо добавить минимум два диска для формирования нового зеркала, которое будет входить в данный пул.
Добавим к пулу новое зеркало, состоящее из дисков: disc1 и disc5
zpool add myzfs mirror /disk1 /disk5
zpool status -v
pool: myzfs
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk3 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk5 ONLINE 0 0 0
errors: No known data errors
Добавим теперь к пулу еще одну файловую систему и посмотрим, как это отразится на размере файловых систем, входящих в пул.
zfs create myzfs/colin2
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 172K 159M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin2 18K 159M 18K /myzfs/colin2
Обе файловые системы, входящие в пул, по объему равны всему пулу. В этом заключается одно из преимуществ системы ZFS — по умолчанию нет никакого ограничения на файловые системы.
Чтобы явно управлять объемом файловых систем, можно прибегнуть к резервированию — выделению гарантированного объема для файловой системы, либо квотированию — ограничению файловой системы по максимальному объему.
Давайте зарезервируем для файловой системы /myzfs/colin
место в пуле, равное 20 Мб. Остальные файловые системы, заполняя пул, в любом случае оставят для этой файловой системы 20 Мб места.
zfs set reservation=20m myzfs/colin
zfs list -o reservation
RESERV
none
20M
none
Теперь для файловой системы /myzfs/colin2
установим квоту в 20 Мб. Это означает, что данная файловая система не сможет занять в пуле более 20 Мб, даже если пул будет полностью свободным.
zfs set quota=20m myzfs/colin2
zfs list -o quota myzfs/colin myzfs/colin2
QUOTA
none
20M
Также для файловой системы /myzfs/colin2
включим сжатие. Сжатие достаточно эффективно работает на уровне ZFS практически без потерь производительности (конечно же, при условии, что производительности сервера достаточно). Вместо compression=on
можно использовать compression=gzip
.
zfs set compression=on myzfs/colin2
zfs list -o compression
COMPRESS
off
off
on
Чтобы сделать файловую систему доступной по протоколу NFS, достаточно выполнить одну команду. Причем после перезагрузки сервера доступ к файловой системе утерян не будет. Никаких дополнительных настроек операционной системы производить не нужно.
zfs set sharenfs=on myzfs/colin2
zfs get sharenfs myzfs/colin2
NAME PROPERTY VALUE SOURCE
myzfs/colin2 sharenfs on local
Точно так же в одну команду ресурс можно сделать доступным по протоколу SMB. Что пользователям ОС Windows наверняка пригодится.
zfs set sharesmb=on myzfs/colin2
zfs get sharesmb myzfs/colin2
NAME PROPERTY VALUE SOURCE
myzfs/colin2 sharesmb on local
Для повышения надежности (если у вас обычный пул, без избыточности), можно использовать следующую опцию файловой системы.
zfs set copies=2 myzfs/colin2
Теперь в файловой системе будет храниться по две копии каждого блока. Это имеет смысл, если пул без избыточности (mirror / raidz).
Snapshots (снепшоты или снимки состояния)
#
Создать снепшот файловой системы очень просто. Давайте создадим снепшот для файловой системы myzfs/colin
и назовем его test.
zfs snapshot myzfs/colin@test
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.2M 139M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin2 18K 20.0M 18K /myzfs/colin2
Если появится необходимость отката к снепшоту, достаточно выполнить одну команду.
zfs rollback myzfs/colin@test
Снэпшот можно подмониторовать, как обычно. Например так.
mount -t zfs myzfs/colin@test /mnt
Даже можно клонировать файловую системы из снепшота в новую файловую систему.
zfs clone myzfs/colin@test myzfs/colin3
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.2M 139M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin2 18K 20.0M 18K /myzfs/colin2
myzfs/colin3 0 139M 18K /myzfs/colin3
Теперь давайте удалим наши файловые системы /myzfs/colin
и /myzfs/colin2
Сперва удалим пустую файловую систему /myzfs/colin2
zfs destroy myzfs/colin2
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.1M 139M 22K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin3 0 139M 18K /myzfs/colin3
Файловая система удалилась без проблем. Теперь удалим файловую систему, для которой существует снепшот.
zfs destroy myzfs/colin
cannot destroy 'myzfs/colin': filesystem has children
use '-r' to destroy the following datasets:
myzfs/colin@test
Удаление невозможно, т.к. у файловой системы имеется дочерний объект. Можно воспользоваться параметром -r
чтобы удалить файловую систему вместе со всеми дочерними объектами рекурсивно.
Мы можем отключить снепшот от /myzfs/colin
и оставить его дочерним только для /myzfs/colin3
zfs promote myzfs/colin3
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.1M 139M 21K /myzfs
myzfs/colin 0 159M 18K /myzfs/colin
myzfs/colin3 18K 139M 18K /myzfs/colin3
myzfs/colin3@test 0 - 18K -
zfs destroy myzfs/colin
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 147K 159M 21K /myzfs
myzfs/colin3 18K 159M 18K /myzfs/colin3
myzfs/colin3@test 0 - 18K -
Теперь сделанный ранее снепшот для /myzfs/colin
стал дочерним объектом /myzfs/colin3
. Таким образом у файловой системы /myzfs/colin
больше нет дочерних объектов и ее можно без труда разобрать (удалить).
Если вдруг понадобиться переименовать ранее созданную файловую систему или снепшот, то можно воспользоваться следующими командами.
zfs rename myzfs/colin3 myzfs/bob
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 153K 159M 21K /myzfs
myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@test 0 - 18K -
zfs rename myzfs/bob@test myzfs/bob@newtest
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 146K 159M 20K /myzfs
myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@newtest 0 - 18K -
Снова вернемся к пулам
#
Получить полную информацию о пулах можно следующим образом.
zfs get all
NAME PROPERTY VALUE SOURCE
myzfs type filesystem -
myzfs creation Tue Sep 11 14:21 2007 -
myzfs used 146K -
myzfs available 159M -
myzfs referenced 20K -
[...]
Если пул нам более не нужен, можем его удалить. Однако, нельзя удалить пул, в котором имеются активные файловые системы.
zpool destroy myzfs
cannot destroy 'myzfs': pool is not empty
use '-f' to force destruction anyway
Чтобы принудительно удалить пул, используйте параметр -f
(не выполняйте это сейчас. Пул нам еще понадобится далее)
zpool destroy -f myzfs
zpool status -v
no pools available
Отключить файловую систему от пула можно следующим образом.
zfs unmount myzfs/bob
df -h
myzfs 159M 20K 159M 1% /myzfs
Подключить файловую систему к пулу вот так.
zfs mount myzfs/bob
df -h
myzfs 159M 20K 159M 1% /myzfs
myzfs/bob 159M 18K 159M 1% /myzfs/bob
Снепшот можно сделать и на удаленный ресурс (или другое место в локальной системе).
zfs send myzfs/bob@newtest | ssh localhost zfs receive myzfs/backup
zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 172K 159M 20K /myzfs
myzfs/backup 18K 159M 18K /myzfs/backup
myzfs/backup@newtest 0 - 18K -
myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@newtest 0 - 18K -
В данном случае снепшот передан zfs receive
на локальном узле (в демонстрационных целях). В реальной ситуации таким образом можно сделать снепшот на другой узел сети.
Zpool ведет собственную историю всех команд. Посмотреть историю можно следующим образом.
zpool history
History for 'myzfs':
2007-09-11.15:35:50 zpool create myzfs mirror /disk1 /disk2 /disk3
2007-09-11.15:36:00 zpool detach myzfs /disk3
2007-09-11.15:36:10 zpool attach myzfs /disk1 /disk3
2007-09-11.15:36:53 zpool detach myzfs /disk3
2007-09-11.15:36:59 zpool add myzfs spare /disk3
2007-09-11.15:37:09 zpool remove myzfs /disk3
2007-09-11.15:37:18 zpool offline myzfs /disk1
2007-09-11.15:37:27 zpool online myzfs /disk1
2007-09-11.15:37:37 zpool replace myzfs /disk1 /disk3
2007-09-11.15:37:47 zpool scrub myzfs
2007-09-11.15:37:57 zpool export myzfs
2007-09-11.15:38:05 zpool import -d / myzfs
2007-09-11.15:38:52 zfs create myzfs/colin
2007-09-11.15:39:27 zpool add myzfs mirror /disk1 /disk5
2007-09-11.15:39:38 zfs create myzfs/colin2
2007-09-11.15:39:50 zfs set reservation=20m myzfs/colin
2007-09-11.15:40:18 zfs set quota=20m myzfs/colin2
2007-09-11.15:40:35 zfs set compression=on myzfs/colin2
2007-09-11.15:40:48 zfs snapshot myzfs/colin@test
2007-09-11.15:40:59 zfs rollback myzfs/colin@test
2007-09-11.15:41:11 zfs clone myzfs/colin@test myzfs/colin3
2007-09-11.15:41:25 zfs destroy myzfs/colin2
2007-09-11.15:42:12 zfs promote myzfs/colin3
2007-09-11.15:42:26 zfs rename myzfs/colin3 myzfs/bob
2007-09-11.15:42:57 zfs destroy myzfs/colin
2007-09-11.15:43:23 zfs rename myzfs/bob@test myzfs/bob@newtest
2007-09-11.15:44:30 zfs receive myzfs/backup
Ну вот. Основные команды для работы с пулами ZFS усвоены.
Теперь можно удалить сам пул и файлы. Они нам больше не пригодятся.
NAME
zpool-scrub
—
begin or resume scrub of ZFS storage pools
SYNOPSIS
zpool |
scrub [ -s |-p ][ -w ] [-e ]pool… |
DESCRIPTION
Begins a scrub or resumes a paused scrub. The scrub examines all
data in the specified pools to verify that it checksums correctly. For
replicated (mirror, raidz, or draid) devices, ZFS automatically repairs any
damage discovered during the scrub. The zpool
status
command reports the progress of the scrub and
summarizes the results of the scrub upon completion.
Scrubbing and resilvering are very similar operations. The
difference is that resilvering only examines data that ZFS knows to be out
of date (for example, when attaching a new device to a mirror or replacing
an existing device), whereas scrubbing examines all data to discover silent
errors due to hardware faults or disk failure.
When scrubbing a pool with encrypted filesystems the keys do not
need to be loaded. However, if the keys are not loaded and an unrepairable
checksum error is detected the file name cannot be included in the
zpool
status
-v
verbose error report.
Because scrubbing and resilvering are I/O-intensive operations,
ZFS only allows one at a time.
A scrub is split into two parts: metadata scanning and block
scrubbing. The metadata scanning sorts blocks into large sequential ranges
which can then be read much more efficiently from disk when issuing the
scrub I/O.
If a scrub is paused, the zpool
scrub
resumes it. If a resilver is in progress, ZFS
does not allow a scrub to be started until the resilver completes.
Note that, due to changes in pool data on a live system, it is
possible for scrubs to progress slightly beyond 100% completion. During this
period, no completion time estimate will be provided.
OPTIONS
-s
- Stop scrubbing.
-p
- Pause scrubbing. Scrub pause state and progress are periodically synced to
disk. If the system is restarted or pool is exported during a paused
scrub, even after import, scrub will remain paused until it is resumed.
Once resumed the scrub will pick up from the place where it was last
checkpointed to disk. To resume a paused scrub issue
zpool
scrub
or
zpool
scrub
-e
again. -w
- Wait until scrub has completed before returning.
-e
- Only scrub files with known data errors as reported by
zpool
status
-v
. The pool must have been scrubbed at least once
with the
head_errlog
feature enabled to use this option. Error scrubbing cannot be run
simultaneously with regular scrubbing or resilvering, nor can it be run
when a regular scrub is paused.
EXAMPLES
Example
1
Status of pool with ongoing scrub:
#zpool
status
... scan: scrub in progress since Sun Jul 25 16:07:49 2021 403M scanned at 100M/s, 68.4M issued at 10.0M/s, 405M total 0B repaired, 16.91% done, 00:00:04 to go ...
Where metadata which references 403M of file data has been scanned
at 100M/s, and 68.4M of that file data has been scrubbed sequentially at
10.0M/s.
PERIODIC
SCRUB
On machines using systemd, scrub timers can be enabled on per-pool
basis. weekly
and monthly
timer units are provided.
systemctl
enable
zfs-scrub-weekly@rpool.timer
--now
systemctl
enable
zfs-scrub-monthly@otherpool.timer
--now
SEE
ALSO
systemd.timer(5),
zpool-iostat(8),
zpool-resilver(8),
zpool-status(8)
ZFS will change the way UNIX people think about filesystems. How do you use fsck with a ZFS filesystem? The answer is that you do not. ZFS filesystems are always clean, so even in the worst case of a power outage bringing a system down, you will never be asked to give the root password for system maintenance again. With ZFS, data are always consistent on disk. For you worriers, there is a command you can use to make sure everything is okay with your filesystems.
Unlike of the fsck command which had to be run on an unmounted filesystem (read: downtime), the zpool command has a scrub option which works on a mounted, living filesystem. When run, the command checks all data in the pool for checksum consistency. On redundant systems (raidz or mirror), inconsistencies will be repaired.
To scrub the pool techrx, use the following:
zpool scrub techrx
The command creates lots of IO, so use it judiciously. Only one scrub session is permitted at a time. To stop scrubbing a pool, use the -s option:
zpool scrub -s techrx
Quinn McHenry
Quinn was one of the original co-founders of Tech-Recipes. He is currently crafting iOS applications as a senior developer at Small Planet Digital in Brooklyn, New York.