Типичным решением для создания отказоустойчивых систем является установка корня Linux на зеркальный RAID. Это решение позволяет защитить как данные на корневом разделе, так и возможность загрузки в случае отказа одного из дисков.
В случае использования для этой цели mdadm
настройка массива производится ещё при установке. К сожалению, установщик Debian ставит загрузчик grub
только на первый (hd0) из физических дисков, второй при этом остается незагрузочных (хотя и зеркалирует данные). Если разметка диска делается через GPT, то стандартная команда grub-install /dev/sdb
хотя и прописывает загрузчик на второй диск, но загрузочным разделом все равно указывает hd0
, а значит система без hd0 не грузится и задача резервирования загрузчика проваливается.
Для резервирования нужно на каждом из физических дисков прописать в качестве загрузочного раздела — раздел с того же физического диска. Штатным путем в grub-install
указать загрузочный раздел не получается, но можно пойти следующим обходным путем. Изначально по установке ОС имеет корректный загрузчик на /dev/sda
(hd0), и этот загрузчик указывает на тот же hd0. Сделаем то же для sdb
. Это можно сделать «обманув» grub-install
. А именно:
- Создаем с помощью
grub-mkdevicemap
файл/boot/grub/device.map
. - Подменяем в
device.map
диски (hd0) и (hd1) местами так, чтобы (hd0) теперь указывал на/dev/sdb
. - Делаем
grub-install /dev/sdb
. - Удаляем
device.map
(или, в качестве альтернативы, прописываем в нем (hd0) на оба диска sda и sdb).
Всё! В результате при отказе любого из загрузочных sda или sdb система загрузится с массивом в degraded-режиме, но полностью сохранит работоспособность.