Глава 5. Восстановление и реконструкция

Содержание

5. Восстановление и реконструкция
Перенос актуальных данных
Расширение пулов
Добавление VDEV в пулы с чередованием
Добавление VDEV в пулы с зеркалами
Добавление VDEV в пулы RAID-Z
Состояние аппаратуры
Интерактивный
Деградировавший
Отказавший
Недоступный
Не подключенный
Удаленный
Ошибки в стеке ZFS
Восстановление устройств
Пропавшие диски
Замена дисков
Отказавшие диски
Замена в тех же слотах
Замена недоступных дисков
Замена поставщиков зеркал
Повторное подключение недоступных и удаленных дисков
Сопровождение устройств журнала и кэша
Добавление устройств журнала и кэша
Удаление устройств журнала и кэша
Замена устройств журнала и кэша
Экспорт и импорт дисков
Экспорт пулов
Импорт пулов
Переименование импортированных пулов
Незавершенные пулы
Специальный импорт
Увеличение поставщиков
Версии и обновления Zpool
Версии ZFS и флаги свойств
Обновление Zpool и начальный загрузчик
Ограничения пулов FreeBSD ZFS

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

Прежде чем перейти к этому, давайте обсудим как ZFS перестраивает разрушенные VDEV.

 Перенос актуальных данных

Виртуальные устройства, такие как зеркала и RAID-Z специально созданы для повторного построения утраченных данных на разрушенных дисках. Если диск в вашей паре зеркал умер, вы заменяете диск и ZFS скопирует выжившее зеркало на него. Если в вашем RAID-Z отказал VDEV, вы заменяете вышедший из строя диск и ZFS перестраивает этот диск из данных контрольных сумм. Такой вид восстановления данных является ключевой функциональностью любой реализации RAID.

Однако, ZFS понимает как файловую систему, так и лежащие в основе хранилища. Это предоставляет ZFS свободу и преимущества над обычными недостатками управления RAID.

Повторное построение диска, зеркалированного программным или аппаратным RAID требует копирования всех секторов по отдельности с хорошего диска на диск замены. Устройство RAID дожно скопировать таблицу разделов, файловую систему, все индексные дескрипторы, все ваши блоки (даже все свободное пространство) и все данные с одного на другое устройство.

Мы все сделали опечатку в /etc/rc.conf, которая не позволяет системе загружаться. Исправление этой опечатки в системе, зеркалированной посредством UFS2 и gmirror(8) потребует загрузки в однопользовательском режиме, исправления опечатки и перезагрузки. Это выведет один из дисков из процесса синхронизации с другим. При перезагрузка FreeBSD заметит неточность и перенесет резервный диск на синхронизируемый копированием всех секторов по отдельности текущего диска на резервную копию. Вероятно,вы изменили один или два сектора на этом диске, однако gmirror(8) должна скопировать все целиком. Это может занять часы, или даже дни.

ZFS знает в точности какой объем диска используется. Когда ZFS пересобирает замененного поставщика хранения, она копирует только данные, которые действительно нужны этому поставщику. Если вы замените диск ZFS, который был заполнен данными только на треть, ZFS скопирует только эту треть данных для восстановления диска.

Исправление опечатки в rc.conf в зеркалированном ZFS диске потребует вмешательства системного администратора,очень похожее на необходимое вмешательство в системе gmirror(8). Вы войдете в однопользовательский режим. Вы исправите опечатку. Вы перезагрузитесь. Разница заключается в том, что ZFS в точности знает какие блоки были изменены на диске. Если только один диск был в работе в процессе однопользовательского режима (невероятно, но такое может случаться), оба диска будут рассогласованы. Вместо того, чтобы копировать диск целиком, ZFS обновит только те блоки, которые необходимы для повторной синхронизации дисков. Скорее всего, система восстановит зеркало еще до того, как вы введете команду для просмотра как она поживает.

Восстановление ZFS называется переносом актуальных данных (resilvering). Как и другие операции целостности, перенос актуальных данных имеет место только на актуальной файловой системе. Вы можете выполнить перенос актуальных данных в однопользовательском режиме, но это имеет тот же смысл как и установка программного обеспечения в однопользовательском режиме.

Перенос актуальных данных автоматически происходит при замене вами поставщика хранения. Оно также случается, когда диск временно отказывает и затем восстанавливается, например, при перезапуске контроллера или перезагрузке внешнего диска. В то время как процесс переноса актуальных данных замененного поставщика хранения может занять продолжительное время, перенос актуальных данных после короткого простоя, скорее всего, потребует всего нескольких секунд.

Если вы используете пул RAID-Z обычным образом во время выполнения переноса актуальных, перенос актуальных может значительно замедлиться. Перенос актуальных данных и очистка выполняются в порядке групп транзакций, в то время как нормальные операции чтения и записи довольно- таки случайные. Скорость переноса актуальных данных ZFS дросселируется с тем, чтобы она не влияла на нормальную функциональность системы.

 Расширение пулов

Данные расширяются, занимая все свободное пространство. Вне зависимости от того, сколько дискового пространства вы выделите пулу, в конце концов, вы захотите больше. Чтобы увеличить размер пула добавьте VDEV в этот пул. Для пулов с избыточностью вы можете заменить поставщиков хранения на поставщиков с большим размером.

Когда вы расширите пул ZFS автоматически начнет записывать данные в новое пространство. По мере роста пула ZFS пытается равномерно балансировать доступное пространство между различными поставщиками. ZFS смещает запись по дискам, поэтому они могут заполниться одновременно. У пула с одним пустым VDEV и тремя почти заполненными, однако, мало выбора кроме как помещать данные на пустое VDEV. Если вы часто создаете и удаляете файлы, загруженность дисков, в конце концов, выровняется.

Все VDEV внутри пула должны быть идентичными. Если пул построен из набора зеркал, не добавляете в него RAID-Z3.

Добавляете поставщиков в VDEV при помощи команды zpool attach, а VDEV в пул командой zpool add.

Вы не можете удалять устройства из VDEV без {избыточности} или любые VDEV из пула. Флаг -n в zpool add производит "холостое выполнение", показывая вам результаты работы команды, которые она бы получила, без реального изменения пула. Выполнение вашей команды zpool add с флагом -n и изучение получающегося пула может дать вам предостережения о ваших выстрелах себе в ногу.

  Добавление VDEV в пулы с чередованием

Чередующиеся пулы, не имеющие никакой избыточности, могут расширяться вплоть до пределов аппаратных средств. Каждое добавляемое вами VDEV без избыточности, однако, увеличивает вероятность катастрофического отказа,в точности с тем,какэто происходит в RAID-0. Помните, что отказ одного VDEV в пуле разрушит весь пул. В пуле с чередованием каждый диск является автономным VDEV.

Вот пул с чередованием с тремя поставщиками.

# zpool status scratch
...
config:
NAME      STATE  READ WRITE CKSUM
scratch   ONLINE    0     0     0
gpt/zfs0  ONLINE    0     0     0
gpt/zfs1  ONLINE    0     0     0
gpt/zfs2  ONLINE    0     0     0
	   

Воспользуйтесь командой zpool add для добавления поставщика хранения в пул с чередованием./p>

# zpool add scratch gpt/zfs3
	   

Теперь состояние пул покажет четырех поставщиков услуг, а вы имеете дополнительное дисковое пространство.

  Добавление VDEV в пулы с зеркалами

Вы можете добавить поставщика в зеркалированное VDEV, однако дополнительные диски не увеличат доступное пространство. Они станут дополнительными зеркалами друг друга. Чтобы добавить пространство в пул, которое использует VDEV с зеркалами, добавьте новое зеркалированное VDEV в ваш пул.

Сейчас zpool db имеет два зеркалированных VDEV.

# zpool status db
...
NAME      STATE READ WRITE CKSUM
db        ONLINE   0     0 0
mirror-0  ONLINE   0     0 0
gpt/zfs0  ONLINE   0     0 0
gpt/zfs1  ONLINE   0     0 0
mirror-1  ONLINE   0     0 0
gpt/zfs2  ONLINE   0     0 0
gpt/zfs3  ONLINE   0     0   0
	   

Нам нужно дополнительное пространство, поэтому мы хотим добавить третье зеркалированное VDEV. Воспользуйтесь командой zpool add для создания нового зеркального устройства и добавьте его в пул. Здесь мы используем gpt/zfs4 и gpt/zfs5 для создания нового устройства и добавления его в пул.

# zpool add db mirror gpt/zfs4 gpt/zfs5
	   

Теперь состояние пула отобразит новое зеркалированное VDEV, mirror-2, содержащее двух поставщиков хранения. По мере записи и удаления вами данных, пул постепенно выровняет загруженность по трем VDEV. Чтобы посмотреть как пул распределяет данные по всем VDEV используйте zpool list -v.

  Добавление VDEV в пулы RAID-Z

Вы не можете добавлять поставщиков ни к какому RAID-Z VDEV. Чтобы расширить пул на основе RAID-Z, вы должны добавить дополнительное VDEV в этот пул или заменить все участвующие в пуле диски дисками большего размера. Лучшей практикой является исполнение всех RAID-Z VDEV с применением одинакового числа дисков.

Вот пул RAID-Z, который мы хотим расширить дополнительным VDEV.

config
NAME      STATE READ WRITE CKSUM
db        ONLINE   0     0     0
raidz1-0  ONLINE   0     0     0
gpt/zfs0  ONLINE   0     0     0
gpt/zfs1  ONLINE   0     0     0
gpt/zfs2  ONLINE   0     0     0
	   

Мы опять используем команду zpool add для создания нового VDEV и добавления его в пул.

# zpool add db raidz1 gpt/zfs3 gpt/zfs4 gpt/zfs5
	   

Проверка состояния пула показывает, что новое VDEV, raidz1-1, содержит трех поставщиков. ZFS немедленно запускает чередование данных и по новым поставщикам.

Ели вы хотите добавить новое VDEV в пул на основе RAID-Z2 или RAID-Z3, используйте ту же команду с нужным вам типом RAID-Z и соответствующим числом поставщиков.

Помните, вы не можете добавлять поставщиков в RAID-Z VDEV - настройка RAID-Z VDEV зацементирована. Многие люди пытаются добавлять диски в RAID-Z VDEV при помощи zpool add. Команда zpool add добавляет новые VDEV в пул. Если вы примените -f для запроса на помещение в ваш пул на основе RAID-Z одного нового диска командой zpool add, вы получите деформированный пул с одним участником RAID-Z и одним участником чередования. Получившийся в результате пул не будет монтироваться и будет неисправим. Его восстановление потребует резервного копирования данных с последующим уничтожением и повторным созданием пула.

Вы можете применять zpool attach для расширения зеркалированных и чередующихся VDEV, однако эта команда не работает с пулами RAID-Z. Вы не можете добавлять поставщиков в RAID-Z VDEV.

 Состояние аппаратуры

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

Команда zpool status отображает условия аппаратура хранения в поле STATE. Вы получаете одно поле STATE для всего вашего пула, рядом с вершиной. Далее вниз, где zpool status приводит список всех VDEV и поставщиков хранения колонка STATE позволяет вам сузить поиск виновника.

Ошибки просачиваются вверх. Если отказывает отдельный поставщик хранения, пул вырабатывает соответствующий отказ. Большое кричащее сообщение об ошибке в вершине zpool status является ориентиром для вас просмотреть конкретных поставщиков для выявления лежащей в основе ошибки.

Пулы и VDEV могут иметь шесть состояний. Лежащие в основе поставщики могут иметь по крайней мере три из этих состояний.

  Интерактивный

Если пул, VDEV или поставщик в интерактивном режиме (Online), то они работают нормально.

  Деградировавший

Деградировавший (Degraded) пул утратил, по крайней мере, одного поставщика хранения. Этот поставщик либо полностью выключен, либо утрачен, либо вырабатывает ошибки намного чаще, чем это допускает ZFS. Деградировавший пул сохраняет достаточную устойчивость для продолжения работы, однако еще один отказ может закрыть его.

Если поставщик хранения имеет слишком много ошибок ввода/ вывода, ZFS предпочитает полностью выключить (перевести в состояние отказа) это устройство. Однако, в действительности ZFS пытается избегать перевода в аварийное состояние устройств, которые обеспечивают необходимую уустойчивость пула. Если последний рабочий поставщик в зеркале начинает показывать слишком много ошибок или отказывает поставщик в уже имеющем аварийного поставщика хранения RAID-Z1 VDEV, тогда ZFS помещает этого поставщика в деградировавший режим, хотя он должен был бы поместить его в аварийное состояние.

  Отказавший

Отказавший (Faulted) поставщик хранения либо разрушен, либо вырабатывает слишком много ошибок по сравнению с допустимым ZFS значением. Отказавший поставщик хранения берется из самой последней известной хорошей копии ваших данных. Если ваше зеркало с двумя дисками утратило оба диска, или ваш RAID-Z1 потерял оба диска, ваше VDEV отказывает. Отказавшее VDEV забирает ссобой весь пул.

  Недоступный

Недоступный (Unavail) означает, что ZFS не может открыть поставщика хранения. Возможно устройство больше не подключено, или вероятно оно было плохо импортировано (см. {Импорт} пулов далее в этой главе). В любом случае, его здесь нет, поэтому ZFS не может его использовать. Недоступное устройство может затронуть все VDEV и, следовательно, весь пул.

Недоступное устройство воздействует на состояние VDEV в зависимости от устойчивости этого VDEV. Если пул все еще имеет достаточно устойчивости для продолжения работы, пул становится деградировавшим. Если VDEV не может больше работать, оно становится отказавшим.

Недоступные устройства появляются в состоянии пула по назначенному им GUID, а не в узле устройства поставщика.

  Не подключенный

Не подключенное (Offline) устройство было намеренно выключено системным администратором. У вас нет целевых причин для выключения устройства в большом массиве.

  Удаленный

Некоторые аппаратные средства могут обнаруживать физическое удаление диска из системы при работающей системе. Такое оборудование позволяет ZFS устанавливать состояние удаленный (Removed) при вытаскивании устройства. Когда вы повторно подключаете устройство, ZFS пытается ввести поставщика обратно в интерактивный режим.

  Ошибки в стеке ZFS

Рассмотрим сервер с парой отключенных поставщиков хранилищ. Это не относится к системе Лукаса или Джуда, это было в системе друга Лукаса. (А теперь Лукас имеет хороший пример проблемы, он может сказать, что друг с этим zpool был ранен. Хотя, чтобы быть уверенным, что он имеет хорошие примеры, он, наверное, должен подождать пока он не закончит эту книгу. Хоть они друг Лукаса, но молокосос.) Обратите внимание на ошибки ваших поставщиков, тип VDEV, и состояние пула в целом.

# zpool status
 pool: FreeNAS02
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://illumos.org/msg/ZFS-8000-2Q
  scan: scrub repaired 0 in 15h57m with 0 errors on Sun Feb 8 15:57:55 2015
config:
NAME          STATE  READ WRITE CKSUM
FreeNAS02     DEGRADED  0     0     0
raidz2-0      DEGRADED  0     0     0
15881942844…  UNAVAIL   0     0     0  was /dev/gpt/zfs0
gpt/zfs1      ONLINE    0     0     0
gpt/zfs2      ONLINE    0     0     0
gpt/zfs3      ONLINE    0     0     0
gpt/zfs4      ONLINE    0     0     0
gpt/zfs5      ONLINE    0     0     0
gpt/zfs6      ONLINE    0     0     0
gpt/zfs7      ONLINE    0     0     0
gpt/zfs8      ONLINE    0     0     0
gpt/zfs9      ONLINE    0     0     0
14768135092…  UNAVAIL   0     0     0  was /dev/gpt/zfs10
gpt/zfs11     ONLINE    0     0     0
gpt/zfs12     ONLINE    0     0     0
gpt/zfs13     ONLINE    0     0     0
	   

Этот RAID-Z2 пул находится в состоянии деградации. Он утратил двух поставщиков, /dev/gpt/zfs0 и /dev/gpt/zfs10. RAID-Z2 VDEV может обрабатывать до двух отказов дисков и продолжать свою работу несмотря на утрату дисков.

Однако, деградировавший пул имеет ограничения по самовосстановлению. Пул без избыточности не имеет информации, необходимой ZFS для восстановления файлов. Наш пример приведенного выше пула имеет утраченными два диска в своем RAID-Z2 VDEV. Он имеет нулевую избыточность. Если файл испытывает битовую деградацию, ZFS может ее исправить. Когда вы пытаетесь получить доступ к этому файлу, ZFS возвращает ошибку. Избыточность на уровне набора данных (со свойством copies) может позволить ZFS вылечить файл.

Если пул испытает отказ другого диска, тогда пул не сможет завершить копию своих данных и откажет.

 Восстановление устройств

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

  Пропавшие диски

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

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

Аппаратура, которая не оповещает операционную систему о добавлении или удалении требует вмешательства системного администратора для восстановления службы. Воспользуйтесь командой zfs online для повторного подключения привода назад в службу.

# zfs online gpt/zfs5
	   

Если диск не доступен по причине его отказа, тогда вы должны заменить его, а не просто снова включить его.

 Замена дисков

Самая трудная часть замены диска часто не имеет ничего общего с ZFS: вы должны найти плохой диск. Мы рекомендуем применять физическое местоположение диска в GPT метке диска при первичной установке диска для более простой замены впоследствии. Если вам необходимо определить неисправный диск без подобной информации, используйте gpart list и smartctl для получения серийного номера диска и информации о производителе, а затем найдите шасси этого диска. Это тот же самый процесс, который обсуждался в Главе 0., только в обратном направлении и с дополнительным давлением незапланированных простоев. В худшем случае, вы можете найти серийный номер всех еще работающих дисков, а методом исключения вы получите отсутствующий диск.

Теперь вы не жалеете, что не сделали эту работу заранее?

Когда вы определите отказавший диск и выполните его замены, мы можем начать использовать ZFS.

  Отказавшие диски

Используйте команду zpool replace для удаления привода из демпфирующего VDEV и замените в нем диск на новый. Диск не обязательно должен быть отказавшим - это может быть совершенно рабочий диск, который вы хотите заменить, поскольку, например, вы выполняете обслуживание дисковой полки. Вот пул RAID-Z1 с плохим диском.

NAME      STATE   READ WRITE CKSUM
db        DEGRADED   0     0     0
raidz1-0  DEGRADED   0     0     0
gpt/zfs1  ONLINE     0     0     0
gpt/zfs2  ONLINE     0     0     0
gpt/zfs3  FAULTED    0     0     0
gpt/zfs4  ONLINE     0     0     0
	   

Журнал /var/log/messages содержит много предостережений о физическом диске, лежащем в основе gpt/zfs3. Это диск должен быть удален из нашего несчастья. Используйте zpool replace для удаления отказавшего поставщика из VDEV и замены его новым устройством. Задайте имя пула, отказавшего поставщика и нового поставщика.

# zpool replace db gpt/zfs3 gpt/zfs5
	   

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

# zpool status db
  pool: db
 state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Mon Mar 16 12:04:50 2015
195M scanned out of 254M at 19.5M/s, 0h0m to go
47.3M resilvered, 76.56% done
config:
NAME         STATE READ WRITE CKSUM
db           ONLINE   0     0     0
raidz1-0     ONLINE   0     0     0
gpt/zfs1     ONLINE   0     0     0
gpt/zfs2     ONLINE   0     0     0
replacing-2  ONLINE   0     0     0
gpt/zfs3     FAULTED  0     0     0
gpt/zfs5     ONLINE   0     0     0  (resilvering)
gpt/zfs4     ONLINE   0     0     0
	   

Оценки времени переноса актуальных данных (resilvering) предполагает что активность диска довольно постоянна. Старт большого дампа базы данных в середине процесса переноса актуальных данных задерживает все.

  Замена в тех же слотах

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

Однако, этот подход имеет больше рисков. При zpool replace отказавший поставщик остается в работающем состоянии, поскольку он может управлять до завершения переноса актуальных данных. Если вы утратите второй диск в вашем RAID-Z1 в процессе переноса актуальных данных, есть шансчто пулу хватит целостности данных для выживания. Когда вы заменяете отказавшего поставщика до начала перепостроения, вы теряете такоую возможность безопасности. Если ваше оборудование не предоставляет вам достаточной для безопасной замены гибкости, ну что же, проверьте свои резервные копии и вперед.

Начните с вывода отказавшего устройство в офлайн. Данная команда попросит ZFS остановить попытки чтения и записи на данное устройство.

# zpool offline gpt/zfs3
	   

Теперь вы можете извлечь отказавший диск из массива и установить его замену. В случае необходимости, создайте раздел поставщика. Ели вы не уверены в разбиении, вы можете скопировать таблицу разделов существующих дисков чем-то навроде gpart backup da0 | gpart restore da9. Используйте новую метку поставщика в zpool replace. Если метка нового поставщика идентична метке удаленного диска, у вас нет нужды повторять имя поставщика. В нашем случае мы заменяем gpt/zfs3 новым диском, также имеющим метку gpt/zfs3.

# zpool replace db gpt/zfs3
	   

Если вы помечаете ваши диски серийными номерами, как мы рекомендовали в Главе 0., у вас не будет этой проблемы.

  Замена недоступных дисков

Если состояние диска UNAVAIL, ZFS идентифицирует утраченное устройство по его GUID и откладывает предыдущее имя устроства в сторону. Zpool все еще может работать, на вам действительно необходимо заменить диск.

NAME                  STATE   READ WRITE CKSUM
db                    DEGRADED   0     0     0
RAID-Z1-0             DEGRADED   0     0     0
gpt/zfs1              ONLINE     0     0     0
gpt/zfs2              ONLINE     0     0     0
13792229702739533691  UNAVAIL    0     0     0 was /dev/gpt/zfs3
gpt/zfs4              ONLINE     0     0     0
	   

Я установил новый диск, который отображается в /var/run/dmesg.boot как da5 и создал на нем раздел freebsd-zfs. Этот новый поставщик получил метку zfs3. Пул не может автоматически идентифицировать данного поставщика как его заместителя - он знает, что предыдущим поставщиком был gpt/zfs3, однако новому gpt/zfs3 не хватает метаданных на диске, которые идентифицируют его в качестве тома ZFS.

Чтобы плавно влить нового поставщика в zpool, снова примените zpool replace. Используйте GUID вместо предыдущего имени устройства.

# zpool replace db 13792229702739533691 gpt/zfs3
	   

Проверка состояния zpool покажет, что пул перенес актуальные данные. Когда перенос актуальных данных (resilvering) завершен, пул полностью восстановлен.

  Замена поставщиков зеркал

Иногда бывает, что диск не отказал полностью, но вырабатывает так много ошибок, что совершенно ясно, что его смерть близка. Когда этот диск находится в зеркалированном виртуальном устройстве, лучше может оказаться оставить отказавшего поставщика на месте, пока вы добавляете диск на замену. Это максимизирует избыточность в процессе замены. Также требуется, чтобы ваши аппаратные средства могли использовать три диска вместо обычных двух. Если ваша система может обрабатывать только два диска, тогда продолжайте работать с zpool replace

В нашем случае мы имеем отдельное зеркалированное VDEV содержащее двух поставщиков, gpt/zfs0 и gpt/zfs1. Мы должны заместить умерший gpt/zfs0 на gpt/zfs2. Вместо того, чтобы напрямую перейти к zpool replace, начнем с присоединения диска замены к пулу. Команда zpool attach попросит данный пул добавить другой уровень зеркалирования в данный пул. Задайте имя пула, устройство, которое необходимо зеркалировать и новое устройство.

# zpool detach db gpt/zfs0
	   

Теперь мы подключили поставщика к нашему пулу db. Одним из существующих поставщиков является gpt/zfs1, а мы подключили gpt/zfs2. Просмотрим zpool status db, и мы увидим, что пул переносит актуальные данные для синхронизации нового поставщика с другими дисками в зеркале. Когда новый поставщик синхронизируется с нашим пулом, удалите отказавшего поставщика из виртуального устройства.

# zpool replace db 13792229702739533691 gpt/zfs3
	   

Отказавший диск под gpt/zfs0 больше не используется.

Также выможете воспользоваться данным методом для трансформации пула с одним диском в зеркалированное виртуальное устройство.

  Повторное подключение недоступных и удаленных дисков

Диск в состоянии UNAVAIL может не быть отказавшим окончательно. Он может оказаться отключенным. Если вы подойдете к серверу и увидите, что пошевеливание корзины диска заставляет помигивать лампочки, вы можете попросить zpool повторно активировать этот диск {Прим. пер.: конечно, перед этим желательно убедиться в надежности контактов и соединений}. Вы также можете повторно активировать диск с состоянием REMOVED. В любом случае воспользуйтесь командой zpool online, именем пула, а также GUID утраченного поставщика.

# zpool online db 718035988381613979
	   

ZFS перенесет актуальные данные (resilver) повторно активированного диска и возобновит нормальную работу.

 Сопровождение устройств журнала и кэша

Мы предложили использовать SSD с большим циклом перезаписей для ваших ZFS журналов преднамеренного протоколирования (кэша записи, Intent Log) и L2ARC (кэша чтения). Очень часто все обнаруживают, что высокая стойкость ("high endurance") совсемне то же самое, что и достаточно высокая стойкость ("high enough endurance") и вам может понадобиться замена этого устройства. {Прим. пер.: подливает масла в огонь и разница в стоимости между т.н. устройствами SSD с большим циклом перезаписи (eMLC) и "стандартными" (MLC) SSD, достигающая порядков. В настоящее время мы проводим последовательность тестирований, которая, как мы надеемся, даст нам более глубокое понимание необходимости (или отсутствия таковой) дополнительных затрат на eMLC- обращайтесь за дополнительной информацией!. Однако, достаточно очевидно, что при наличии четкой процедуры замены дисков кэширования, да еще и при наличии четкой тенденции снижения стоимости SSD, данная статья расходов однаиз первых в рассмотрении на сокращение!} Устройства протоколирования используют те же ключевые слова состояний, что и обычные поставщики хранения - faulted, offline и тому подобные. Вам также может понадобиться вставка устройства журнала или, что менее применимо, удаление устройства журнала.

Хотя приводимые примеры отображают устройства журналирования, устройства кэширования работают в точности так же.

  Добавление устройств журнала и кэша

Чтобы добавить устройство журнала или кэша в существующий пул, воспользуйтесь zpool add, именем пула а также типом устройства и поставщиками. Вот пример добавления устройства журнала gpt/zlog0 в пул db.

# zpool add db log gpt/zlog0
	   

Пул немедленно начнет использовать новое устройство журнала или кэша.

Чтобы добавить зеркалированное устройство журнала примените ключевое слово mirror и соответствующих поставщиков. Зеркалирование ZIL (ZFS Intent Log) предоставляет избыточность для записи, помогая гарантировать, что записанные на диск данные выдержат аппаратный сбой. В нашем случае мы добавляем устройства журнала gpt/zlog0 и gpt/zlog1, а также просим пул db использовать в качестве журнала зеркало.

# zpool add db log mirror gpt/zlog0 gpt/zlog1
	   

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

  Удаление устройств журнала и кэша

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

Чтобы удалить автономное устройство журнала или кэша, примените zpool remove, имя пула, а также имя устройства. Ранее мы добавили устройство gpt/zlog0 в качестве устройства журнала для пула db. Давайте удалим его.

# zpool remove db gpt/zlog0
	   

Удаление зеркалированного устройства журнала слегк более сложное. Перед удалением зеркала вы должны знать его имя. Посмотрите состояние пула.

# zpool status db
...
NAME       STATE READ WRITE CKSUM
db         ONLINE   0     0     0
mirror-0   ONLINE   0     0     0
gpt/zfs0   ONLINE   0     0     0
gpt/zfs1   ONLINE   0     0     0
mirror-1   ONLINE   0     0     0
gpt/zfs2   ONLINE   0     0     0
gpt/zfs3   ONLINE   0     0     0
logs
mirror-2   ONLINE   0     0     0
gpt/zlog0  ONLINE   0     0     0
gpt/zlog1  ONLINE   0     0     0
	   

Устройство журналирования называется mirror-2. Удалите его, как если бы вы это делали с автономным устройством.

# zpool remove db mirror-2
	   

Пул очищает журнал и удаляет устройства из пула.

  Замена устройств журнала и кэша

Замените неисправное устройство журнала или кэша, даже если оно участник зеркала точно так же, как вы поступаете с любым другим неисправным устройством. Здесь мы заменяем устройство gpt/zlog0 на gpt/zlog1.

# zpool replace db gpt/zlog0 gpt/zlog2
	   

Устройство журнала перенесет актуальные данные и продолжит работу.

 Экспорт и импорт дисков

Вы можете перемещать диски файловой системы ZFS между машинами, даже между машинами работающими под различными операционными системами. У вас нет ограничений на аналогичную архитектуру, или - ZFS даже позволяет вам перемещать диски между различным конечным оборудованием! Это предлагает, например, легкий путь миграции между, скажем, Sparc OpenSolaris и FreeBSD. ZFS использует свои собственные метаданные на диске для отслеживания роли каждого поставщика в пуле, следовательно вам нет нужды отслеживать порядок дисков, узлы устройств или решать любые другие обычные проблемы дисков. Отключите ваши диски, сложите их в сумку, проедьте на другой конец города и вставьте их снова. Пиведение пула обратно в работающее состояние называется импортированием (importing).

Однако, ZFS может работать с поставщиками хранения отличными от дисков. Предположим, вы используете разделы GPT на ваших дисках, как вы рекомендовали. Вы можете затем решить переместить эти диски с вашего хоста FreeBSD в другую операционную систему или на другую аппаратную архитектуру. Если новые операционная система или оборудование не распознают разделы GPT, новый хост не сможет найти ваши пулы для их импорта!

Перед импортом пула вы все-таки должны его экспортировать.

  Экспорт пулов

Экспорт примерно аналогичен аккуратному размонтированию традиционной файловой системы. ZFS помечает поставщиков неактивными и завершает все отложенные транзакции. Если у вас есть журнал преднамеренного протоколирования ZFS (ZFS Intent Log, Главе 2), журнал очищается. Все записывается на поставщика, файловая система демонтируется и система будет уведомлена, что эти поставщики теперь свободны для повторного использования.

Используйте zpool export и имя пула для экспорта пула. Здесь мы экспортируем пул db.

# zpool export db
	   

Эта команда работает без оповещений. Выполните zpool list для проверки того, что пул больше не в системе.

Система откажется экспортировать активную файловую систему. Отключите на наборе данных все демоны, осуществляющие запись в этот набор данных и изменения рабочего каталога вашей оболочки. Остановите хвостовые (tailing) файлы. Вы можете использовать fstat(1) или lsof(8) чтобы определить процессы, использующие файловые системы этого набора данных.

  Импорт пулов

Чтобы увидеть неактивные пулы присоединенные к системе, выполните zpool import. Это не будет действительным импортом пулов, а только покажет что доступно для импорта.

# zpool import
  pool: db
    id: 8407636206040904802
 state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
db        ONLINE
raidz1-0  ONLINE
gpt/zfs1  ONLINE
gpt/zfs2  ONLINE
gpt/zfs3  ONLINE
gpt/zfs4  ONLINE
	   

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

Состояние ONLINE не означает что пул активен, а только то, что все поставщики готовы для использования. Поскольку ZFS информирован, пул готов к работе.

Импортируйте пул при помощи zpool import и имени пула или цифрового идентификатора.

# zpool import db
	   

Если у вас есть множество неактивных пулов с одинаковым именем, импортируйте вместо этого пул по идентификационному номеру.

# zpool import 8407636206040904802
	   

Вы не можете импортировать пул если уже существует пул с этим именем пока не переименуете пул.

  Переименование импортированных пулов

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

ZFS позволяет вам окончательно переименовать пул заданием нового имени после существующего имени пула. Вот мы импортируем пул с именем db под именем olddb.

# zpool import db olddb
	   

Наборы данных импортированного пула могут быть найдены в /olddb. Такое переименование окончательное. Вы можете экспортировать пул и повторно импортировать этот пул с его новым именем навсегда.

Для временного монтирования пула в местоположении, отличном от обычной точки монтирования, применяйте флаг -R и альтернативный путь корня.

# zpool import -R /dunno data
	   

Это временно добавит путь /dunno ко всем наборам данных в импортируемом пуле. Экспорт вашего пула удаляет дополнительный путь и сбрасывает свое свойство altroot.

Используйте свойство altroot когда вы не знаете что есть в пуле и не хотите случайно наложить его на ваши существующие наборы данных или файловые системы. Помните, файловые системы BSD стекируются! Вы также можете применять альтернативную среду загрузки, при которой импортируемый пул может перекрывать активную корневую файловую систему и скрывать нужные вам для управления пулом инструменты.

  Незавершенные пулы

Вы не можете импортировать пул, если он не имеет достаточного числа участников для поддержки всех необходимых данных. Аналогично тому, что вы не можете применять RAID-Z1 если у вас нет двух дисков, точно так же вы не можете импортировать RAID-Z1 с более чем одним утраченным диском.

# zpool import
  pool: db
    id: 8407636206040904802
 state: UNAVAIL
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://illumos.org/msg/ZFS-8000-3C
config:

db                     UNAVAIL  insufficient replicas
 RAID-Z1-0             UNAVAIL  insufficient replicas
  gpt/zfs1             ONLINE
  4300284214136283306  UNAVAIL  cannot open
  gpt/zfs3             ONLINE
  3061272315720693424 UNAVAIL cannot open
	   

Это RAID-Z1 с четырьмя поставщиками, однако два поставщика утрачены. Проверьте что все повторно установленные диски правильно подключены и попробуйте снова.

  Специальный импорт

Импорт пулов чрезвычайно полезен при восстановлении разрушенных систем. Применяя импорт пулов, ZFS позволяет вам обойти многие ошибки и проблемы. Этот раздел проведет вас по ряду специальных случаев применения импорта.

Разрушение пула не разрушает на самом деле никакие данные. Система отмечает пул разрушенным, однако пул и все его метаданные остаются на диске пока их не перезапишут. Для того,чтобы попросить ZFS найти разрушенный, но пригодный к импорту пул, добавьте флаг -D.

# zpool import -D
	   

Состояние пула будет отображено как ONLINE (DESTROYED). ONLINE означает, что пул имеет все необходимое для работы. Используйте флаг -D с именем пула или его идентификационным номером для его воскрешения.

# zpool import -D 8407636206040904802
	   

Если пул утратил слишком большое число поставщиков хранения, вы не можете импортировать его. Вы не можете zpool online для отсоединенных дисков. Проверьте дисковые корзины и убедитесь, что диски, которые вы хотите импортировать, подключены и запитаны. При следующем запуске zpool import вновь подключенные диски будут отображены.

Если пул утратил своё устройство журнала, добавьте флаг -m для его импорта без этого устройства. Экспортируемый пул должен иметь все на поставщиках хранения.

# zpool import -m db
	   

При выполнении вами импорта вы можете устанавливать свойства пула с применением флага -o. Здесь мы импортируем и переименовываем пул баз данных, а также делаем его доступным только на чтение.

# zpool import -o readonly=on db olddb
	   

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

Вы можете захотеть импортировать разрушенный пул чтобы попытаться восстановить хоть какую-то часть данных в нем. Флаг -F просит zpool import откатить назад несколько транзакций. Это может вернуть пул в состояние, доступное для импорта. Вы потеряете содержимое транзакций, которые вы пропустили, однако если это сработало, в любом случае, данные транзакции, судя по всему, и вызвали проблемы.

 Увеличение поставщиков

Один интересный факт об ZFS заключается в том, что она позволяет заменять поставщиков бОльшими по размеру поставщиками. Если ваш пул хранения с избыточностью использует диски 4ТБ, вы можете заменить их на диски, скажем, моделей 10ТБ и увеличить размер вашего пула. Это потребует замены успешных поставщиков поставщиками бОлшего размера.

Пул вычисляет свой размер по наименьшему диску в каждом VDEV. Если ваше зеркало имеет диск 4ТБ и диск 10ТБ в одном VDEV, то зеркалированное VDEV будет иметь пространство 4ТБ. Не существует разумного способа зеркально отобразить 10ТБ данных на диске в 4ТБ! Однако, если вы замените ваш 4ТБ диск, вы будете способны расширить зеркало до размера наименьшего диска.

Единственный вопрос заключается в том, хотите ли вы чтобы ваши пулы автоматически расширялись,когда у них есть такая возможность, или вы хотите активировать расширение вручную? ZFS может автоматически выполнять работу по расширению, однако для начала вам нужно установить свойство autoexpand для каждого пула. ZFS оставляет его значение по умолчанию off, поскольку вы никогда не можете уменьшать никакой пул. (Наличие включенным в on autoexpand не повредит вам, однако наличие его включенным по умолчанию может оставить вас со слишком большим пулом для всех ваших других дисков.)

# zpool set autoexpand=on db
	   

Без установки этого свойства вы должны выполнить команду для расширения пула после замены поставщика.

Замена всех поставщиков в пуле не является сложной, но она связана с определенным занудством. Возьмем данный RAID-Z1 с тремя поставщиками.

NAME        STATE READ WRITE CKSUM
db          ONLINE   0     0     0
 raidz1-0   ONLINE   0     0     0
  gpt/zfs1  ONLINE   0     0     0
  gpt/zfs2  ONLINE   0     0     0
  gpt/zfs3  ONLINE   0     0     0
	   

Каждый из этих поставщиков является одним маленьким диском.

# zpool list db
NAME  SIZE   ALLOC   FREE   FRAG  EXPANDSZ  CAP  DEDUP  HEALTH  ALTROOT
db    59.5G   1.43G  58.1G  1%           -   2%  1.00x  ONLINE  -
	   

Если оборудование имеет достаточно физического пространства {для размещения новых устройств}, добавьте новые диски и создайте поставщиков для замены. Если вы ограничены в физическом пространстве, выведите заменяемого поставщика в офлайн и поменяйте диски местами. Здесь мы выводим диски в офлайн и меняем их местами.

Данный пул имеет трёх поставщиков: gpt/zfs1, gpt/zfs2 и gpt/zfs3. Первым мы заменяем gpt/zfs1. Выполнение gpart show -l показывает, что поставщик находится на диске da1.

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

# zpool offline db gpt/zfs1
	   

Это должно произойти без отображения. Проверка zpool status покажет данного поставщика в автономном состоянии. Вы можете извлечь этот диск из вашей системы.

Вставьте диск замены либо на место размещения старого диска, либо в новый слот. В /var/run/dmesg.boot появится новый диск. В данной системе новый диск отображается как /dev/da4. Создайте на этом диске требуемый раздел и маркируйте его меткой. Если вы не используете серийные номера в своих метках и используете только физическое местоположение, вы можете применить ту же метку. (Опять же, мы применяем такие короткие метки здесь, поскольку их легче читать при обучении.)

# gpart create -s gpt da4
da4 created
# gpart add –a 1m -t freebsd-zfs -l zfs1 da4
	   

Теперь попросите пул заменить отказавший диск.

# zpool offline db gpt/zfs1
	   

Позвольте пулу завершить перенос актуальных данных прежде чем продолжить замену других поставщиков. Замена устройств не обеспеченных избыточностью данных в процессе переноса актуальных данных (resilvering) вызовет только головную боль. Если вы используете RAID-Z2 или RAID-Z3, существует возможность одновременной замены множества дисков, но это рискованно. Дополнительный отказ диска может вызвать отказ VDEV. Без предоставляемой дополнительными поставщиками избыточности ZFS не способна к самовосстановлению. Пределы операций ввода/ вывода каждого диска, скорее всего, придушат скорость переноса актуальных данных.

После того, как ваш первый поставщик перенесет актуальные данные, замените ваш следующий меньший диск. Вы не увидите изменений в дисковом пространстве, пока вы не замените всех поставщиков в VDEV. Чтобы гарантировать, что вы заменили всех поставщиков на бОльших, выполните проверку zpool list.

# zpool list db
NAME    SIZE   ALLOC   FREE   FRAG  EXPANDSZ  CAP  DEDUP  HEALTH  ALTROOT
db      59.5G   1.70G  57.8G    0%      240G   2%  1.00x  ONLINE  -
	   

Отметим, что у нас теперь новый размер пространства в EXPANDSZ. Данный пул может быть увеличен.

Если вы установили пул в режим авторасширения перед началом ваших операций, он должен расшириться самостоятельно. Если нет, расширьте каждое устройство в вашем пуле вручную при помощи zpool online -e.

# zpool online -e db gpt/zfs1
# zpool online -e db gpt/zfs2
# zpool online -e db gpt/zfs3
	   

Полученный пул имеет теперь бОльшее пространство.

 Версии и обновления Zpool

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

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

  Версии ZFS и флаги свойств

Изначально ZFS использовала номера версий для индикации того, какие версии функций пула или операционной системы поддерживаются. Номера версий начинались с 1 и увеличивались по одной при каждом улучшении ZFS, которое затрагивало дисковый формат. Когда Sun Microsystems выступала центральным координатором всего развития ZFS, имел смысл единый инкрементальный номер версий. Номер версии в OpenZFS установлен в значение 5000, а пулы используют вместо этого флаги функциональности. Мы подробно обсуждали флаги функциональности в Главе 3.

Основными двумя вопросами для флагов функциональности являются: "Какую функциональность поддерживает ваш пул в настоящее время?" и "Какую функциональность поддерживает ваша операционная система?" Проверьте свойства вашего пула, чтобы посмотреть что имеется на вашем диске, как обсуждалось в Главе 3. Чтобы посмотреть все установленные флаги функциональности, поддерживаемые выпуском вашей FreeBSD, выполните zpool upgrade -v.

# zpool upgrade -v
This system supports ZFS pool feature flags.
{Данная система поддерживает флаги функциональности пула ZFS.}
The following features are supported:
(Поддерживаются следующие функции:)
FEAT DESCRIPTION
-------------------------------------------------------------
async_destroy                     (read-only compatible)
  Destroy filesystems asynchronously.
  {Асинхронное уничтожение файловых систем.}
empty_bpobj                       (read-only compatible)
  Snapshots use less space.
  {Снимки используют меньшее пространство.}
lz4_compress
  LZ4 compression algorithm support.
  {Поддержка алгоритма сжатия LZ4.}
...
	   

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

Замечания по выпускам FreeBSD для каждой версии обозначают новую функциональность ZFS. Вам действительно нужно внимательно читать эти замечания к выпуску перед обновлением, не так ли? Если вы каким-то образом пропустите эту часть документации, zpool status сообщит вам, какие пулы могут использовать обновления. (Помните, что только потому, что пул может принять некое обновление не означает, что вы должны выполнять это обновление. Если вам, вероятно, потребуется вернуть обновление операционной системы назад, оставьте функциональность вашего пула в покое!)

# zpool status db
  pool: db
 state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
        still be used, but some features are unavailable.
        {Некоторые поддерживаемые функции не разрешены в данном пуле. Это пул 
        все еще может использоваться, однако некоторая функциональность недоступна.}
action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.
        {Разрешите всю функциональность при помощи 'zpool upgrade'. Если вы сделаете это,
        пул может больше не быть доступным для программного обеспечения, которое не поддерживает
        эти функции. За подробностями обращайтесь к zpool-features(7).}
...
	   

Вы также получите список всех новых функций, поддерживаемых обновлением. Обновите ваши пулы выполнив zpool upgrade на этих пулах.

# zpool upgrade zroot
	   

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

Если у вас есть планы перемещать диски на систему, работающую с более старыми версиями операционной системы, или на операционную систему, выполняющую более старую версию OpenZFS, вы можете разрешать функциональность пула более избирательно. Перемещение дисков с системы FreeBSD 11 на систему FreeBSD 10 требует аккуратной проверки функциональностей пулов. Разрешайте отделную функциональность установкой ее свойства в enabled.

# zpool set feature@large_blocks=enabled data
	   

Данный пул теперь поддерживает функциональность large_blocks.

  Обновление Zpool и начальный загрузчик

Загрузчик FreeBSD должен понимать ваш пул ZFS, с которого вы загружаетесь. Это означает, что он должен распознавать функции пула. Всякий раз, когда вы обновляете пул, содержащий вашу файловую систему /boot, вы должны обновлять и начальный загрузчик на этих дисках. Для обновления начального загрузчика используйте gpart(8). Если вы загружаетесь с зеркала ZFS на дисках da0 и da1, вы обновите ваши загрузчики на обоих дисках как-то наподобие:

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1
	   

Система может не загрузиться без этого обновления. Команда zpool upgrade напечатает вам напоминание, но вы вольны проигнорировать его, если захотите. Если вы приведете вашу систему в незагружаемое состояние, вы можете попытаться загрузиться с ISO с самой последней на текущий момент версией FreeBSD, или с liveCD и скопировать их начальные загрузчики в вашу систему.

 Ограничения пулов FreeBSD ZFS

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

На момент написания книги не работает горячее резервирование. Горячее резервирование позволяет ZFS автоматически заменять неисправный диск с назначенным запасным диском в системе. Это зависит от предстоящей реализации zfsd(8), которая до сих пор находится в стадии разработки.

Теперь, вы можете заполнить пул данными и восстанавливать оборудования, давайте поиграем с парой более полезными функциями ZFS, клонами и снимками.