Freebsd: ZFS — «Правильная» замена диска в зеркале (mirror)
Файловая система ZFS фактически стала основной в FreeBSD и для многодисковых систем (в том числе и на SSD). ZFS обеспечивает хорошую производительность. Это достигается даже при встроенном стандартном кешировании. Для ускорения и повышения надёжности файловых операций в высоконагруженных системах используются ZIL и l2arc.
ZFS чрезвычайно устойчива к сбоям — максимум, что грозит — это откат к предыдущей версии файла(ов). Также есть штачная система сохранения состояний — snapshots — создаёте и в случае непредвиденного восстанавливаете предыдущее состояние.
Замена накопителя может понадобиться при сбое, для увеличения пространства, для перехода с ssd sata 3.0 на nvme, для обновления устройства на более надёжное или при исчерпании его ресурса.
Замена диска может понадобиться при сбое, для увеличения пространства, для перехода с 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
Дополнительно
Если вы хотите просто заменить диск в любом другом зеркале (и не обязательно в зеркале) — пропустите ту часть где копирование разделов необходимых для загрузки