UNIX

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

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

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

To top