Замена устройства в пуле устройств хранения данных ZFS на ОС FreeBSD (в целом подходит для любой другой системы). При выходе из строя одно из дисков, необходимости увеличения размера пула, переход на более скоростные носители (hdd>ssd, sata ssd>nvme). Простой набор шагов с примерами

Freebsd: ZFS — «Правильная» замена диска в зеркале (mirror)

Файловая система ZFS фактически стала основной в FreeBSD и для многодисковых систем (в том числе и на SSD). ZFS обеспечивает хорошую производительность. Это достигается даже при встроенном стандартном кешировании, Для ускорения и повышения надёжности файловых операций в высоконагруженных системах используются ZIL и l2arc
ZFS чрезвычайно устойчива к сбоям — максимум, что грозит — это откат к предыдущей версии файла(ов). Так же есть штатная система сохранения состояний — snapshots — создаёте и в случае непредвиденного восстанавливаете предыдущее состояние

Замена диска может понадобиться при сбое, для увеличения пространства, для перехода с ssd sata 3.0 на nvme, для замены диска на более надёжный или при исчерпании ресурса диска

Процедура

  • Вывести диск из массива
  • Перенести разметку с оставшегося диска в массиве на новый
  • Добавить новый диск в массив и дождаться синхронизации
  • Скопировать загрузчик (разделы) с оставшегося в массиве диска на новый
  • Радоваться результату

Пример

Собственно рассмотрим конкретный пример.

Что имеем?

  • zroot — основной пул на котором размещена система, пул создан как зеркало (mirror)
  • nda1, nda0 — диски zroot (nvme-диски)
  • nda1p4, nda0p4 — разделы зеркала пула zroot
  • nda0 — диск который меняем
  • nda2 — диск на который меняем

Что делаем?

Просмотр данных о пулах zfs
#zpool list
NAME       SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
zroot      236G  94.9G   141G        -         -    17%    40%  1.00x    ONLINE

Просмотр текущего статуса пула zroot и информации о дисках в этом пуле
#zpool status zroot
  pool: zroot
 state: ONLINE
status: Some supported and requested 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.
  scan: 
config:

 NAME        STATE     READ WRITE CKSUM
 zroot       ONLINE       0     0     0
   mirror-0  ONLINE       0     0     0
     nda1p4  ONLINE       0     0     0
     nda0p4  ONLINE       0     0     0

errors: No known data errors

Отключаем раздел от зеркала
#zpool detach nda0p4

Уничтожаем разметку на добавляемом диске
#gpart destroy -F nda2

Резервное копирование таблицы разделов при помощи gpart оставшегося в зеркале диска (nda1)
#gpart backup nda1 > nda1.backup

Копирование резервной таблицы разделов при помощи gpart на новый диск (nda2)
#gpart restore nda2 < nda1.backup

Копируем раздел необходимый для загрузки на новый диск 
#dd if=/dev/nda1p1 of=/nda2p1

Копируем раздел необходимый для загрузки на новый диск 
#dd if=/dev/nda1p2 of=/nda2p2

Добавляем новый диск в зеркало (говорим, что nda2p4 является дополнительным диском для nda1p4 и мастером будет nda1p4 при синхронизации
#zpool attach zroot nda1p4 nda2p4

Проверяем что пошла синхронизация (прогресс виден в разделе scrub: resilving)
#zpool status zroot

Дополнительно

Если вы хотите просто заменить диск в любом другом зеркале (и не обязательно в зеркале) — пропустите ту часть где копирование разделов необходимых для загрузки

UNIX