Типичным решением для создания отказоустойчивых систем является установка корня 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-режиме, но полностью сохранит работоспособность.