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

Вводные понятия

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

Степени многословия

При отказе диска или возникновении ошибок SmartOS записывает в журнал большое количество информации. Чтобы выяснить причину отказа диска, необходимо более детальное изучение информации. Ниже приведены команды в порядке убывания их сложности:

Команда 'zpool status' предоставляет обзор состояния пула. 

Команда iostat предоставляет нам данные о количестве ошибок на высоком уровне, а также специфическую информацию об устройствах.

Команда fmadm faulty поможет более точно определить причину отказа диска. fmadm также способен устранять временные сбои;

Команда fmdump позволяет получить журнал событий сбоев за последние {n} дней. Помимо замены неисправных дисков, эта информация может быть очень полезна для выявления основной причины проблемы, если проблема более сложная, чем простой отказ диска.

Общий процесс отказа

В системе, когда происходит отказ диска, ZFS не является первым компонентом, который обнаруживает его и реагирует на него. Вместо этого происходит следующий общий порядок событий:

1. FMA (Fault Management Architecture) обнаруживает и регистрирует сбойный диск. FMA отслеживает и управляет аппаратными сбоями в системе.

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

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

Этот общий процесс устранения неисправностей гарантирует, что любые отказы дисков в системе будут своевременно обнаружены, зарегистрированы и отреагированы соответствующими компонентами. Сначала FMA идентифицирует сбойный диск, затем операционная система удаляет его, и, наконец, 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