Замена сбойного диска в корне ZFS

Пошаговое руководство по замене вышедшего из строя диска в корне ZFS

Допустим, у сервера 2 диска: /dev/sda и /dev/sdb
Один из дисков вышел из строя, например, это /dev/sdb
Поврежденный диск нужно заменить.

Для начала определим наш пул командой:

zpool list

Перед заменой диска желательно убрать диск из массива:

zpool detach rpool /dev/sdb

Далее выключаем сервер, если у вас нет возможности горячей замены дисков, а так все ниже описанное можно проделать, не останавливая сервер – если есть контроллер и hotswap

poweroff

Производим физическую замену сбойного диска.

Определение таблицы разделов (GPT или MBR) и ее перенос на новый диск

После замены поврежденного диска нужно определить тип таблицы разделов: GPT или MBR.
Для этого используется gdisk. Установите gdisk:

apt-get install gdisk -y

Выполните команду:

gdisk -l /dev/sda

Где /dev/sda — исправный диск, находящийся в RAID.

Для MBR в выводе будет примерно следующее:

Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present

Для GPT примерно следующее:

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Перед добавлением диска в массив на нем нужно создать разделы в точности такие же, как и на исправном диске sda.
В зависимости от разметки диска это делается по-разному.

Копирование разметки для GPT

Для копирования разметки GPT выполните команду:

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

sgdisk -R /dev/sdb /dev/sda

Присвойте диску новый случайный UUID:

sgdisk -G /dev/sdb

Копирование разметки для MBR

Для копирования разметки MBR:

Обратите внимание!
Здесь первым пишется диск, с которого переносим разметку, а вторым — на который переносим.

sfdisk -d /dev/sda | sfdisk /dev/sdb

Если разделы не видны в системе, то можно перечитать таблицу разделов командой:

sfdisk -R /dev/sdb

Установка загрузчика

После разметки диска нужно установить на него загрузчик:

grub-install /dev/sdb

Добавление диска

Указываем какой диск мы собираемся заменить (в нашем случае это /dev/sdb3):

zpool replace rpool /dev/sdb3

Добавляем диск в рейд:

zpool online rpool /dev/sdb3

Ждем окончания синхронизации массива:

zpool status