/boot on RAID1

Ubuntu 18.04

Setup KVM

Все действия происходят в QUME/KVM. В системе должно быть смонтирована 2 диска до начала установки

Рассмотрим шаги про добавление 2-го диска.

На последнем шаге обязательно ставим галочку:

Customize configuration before install

в следующем шаге в Add Hardware добавляем второй диск:

только после этого запускаем установку.

Установка Ubuntu 18.04

Рассмотрим часть про создание разделов:

Далее создаем на обеих дисках разметку без указания файловой системы:

Делаем разбивку каждого диска на 2-е части (1Gb и остаток от диска), в Вашем случае размеры могут быть другими.

Указав пустое поле Size, будет задействован весь оставшийся размер диска.

в итоге у нас получится:

Приводим второй диск к такому же состоянию:

У вас в USED DEVICES появился bios_grub, оставляем его нетронутым, в дальнейшем (уже после установки системы) мы создадим на втором диске раздел под GRUB

Теперь мы можем создать RAID1 - 2 штука:

Выбираем partition одинакового размера:

В итоге у нас должно получится в AVAILABLE DEVICES два устройства:

Приступаем к созданию partition на устройствах md0 и md1:

В моем случае md0 (он меньшего размера) идет под /boot:

А md1 идет под корень системы:

В итоге у нас должна получится такая разметка:

Далее Done и в следующем окне Continue :

Вся информация будет удалена, диски будут отформатированы

Далее следуем по меню чтобы завершить установку системы:

Reboot

Install GRUB

все последующие действия в системы выполняются от root

Смотрим информацию по дискам:

lsblk

В output интересуют имена дисков (vda и vdb), далее сам процес установки grub:

grub-install /dev/vda
grub-install /dev/vdb

Ошибка при выполнении grub-install на vdb ожидаемая, так как там нету раздела по него.

Создаем раздел:

parted /dev/vdb set 1 bios_grub on
parted /dev/vdb print

Все прошло успешно, повторяем попытку grub-install:

grub-install /dev/vdb

Мы получили систему которая может грузиться с любого из /boot в случае выхода какого то из дисков. Далее мы протестируем как это работает и возможные применения такой схемы на практике.

Тесты

Переключение на загрузку со второго диска

Проверяем что с рейдами все ОК!

cat /proc/mdstat

[UU] - нам говорит о том что рейдах участвует по два диска, в нашем случае partition.

Выключаем систему, меняем загрузочный диск:

shutdown now

Запускаем систему. Система загрузилась с VirtIO Disk 2.

VirtIO Disk 1 мы можем безболезненно отключить от системы, и система у нас останется в рабочем состоянии.

Второй диск вышел из строя

Представим ситуацию что какой-то из дисков, в нашем случае будет VirtlO Disk2, вышел из строя. Для имитации поломки, мы его удалим из системы.

До начала эксперимента проверяем что у нас все ок, и создадим в папке root файл, чтоб проверить синхронизацию с новым диском при отключении VirtlO Disk1 😁 .

P.S. Да у нас авария за аварией!

cat /proc/mdstat
cd && echo text in file >> test.file && cat test.file && ll 

Выключаем машину, удаляем диск из системы, а загрузочным ставим VirtlO Disk1

В системе остался один диск:

Запускаем систему и проверяем состояние дисков, рейдов, файлов

lsblk
cat /proc/mdstat

[U_] - у нас в md0/md1 не хватает по одному диску.

cd && cat test.file && ll

Но система продолжает быть в рабочем состоянии.

Восстанавливаемся:

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

Запускаем систему, проверяем диски, рейд

lsblk
cat /proc/mdstat

Размечаем диск vdb по partition как у vda, для более корректного отображения в дереве, разметку делаем в том же порядке:

более детальную информацию по команде fdisk можно посмотреть в man fdisk

fdisk /dev/vdb

смотрим что у нас получилось по дискам:

lsblk

Теперь можем восстановить "первый" RAID1 (md0):

mdadm /dev/md0 --add /dev/vdb2

К сожалению вывода у команды нет, но если запустить в отдельном окне:

watch cat /proc/mdstat

можно увидеть как идет восстановление md0 :

Восстанавливаем "второй" RAID1 (md1):

mdadm /dev/md1 --add /dev/vdb3

Дожидаемся конца восстановления.

Проверяем состояние:

cat /proc/mdstat
lsblk
cd && cat test.file && ll

RAID1(md0/md1) в порядке, мы обратно вернули разметку дискам, файлы на месте, с теми же данными что были созданы на отключенном (удаленном) диске.

Устанавливаем grub на новый диск и пробуем с него запустить систему.

grub-install /dev/vdb

Выключаем систему, переключаем диск для загрузки

Запускаем систему, система загрузилась с VirtIO Disc 2.

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

Создаем и добавляем в систему 3-й диск

Запускаем систему, смотрим имя диска, и розмечаем его как при востановлении:

lsblk
fdisk /dev/vdc

Добавляем новые разделы в md0/md1:

mdadm /dev/md0 --add /dev/vdc2
mdadm /dev/md1 --add /dev/vdc3

Расширяем рейды с 2-х дисков до 3-ч.

mdadm -G /dev/md0 --raid-devices=3
mdadm -G /dev/md1 --raid-devices=3

Опция --raid-devices указывает новое количество дисков используемое в массиве. Например, было 2 диска, а теперь расширяем до 3-х - указываем 3.

Устанавливаем на него grub

grub-install /dev/vdc

Теперь в системе 3 диска в RAID1 и с любого из них можно произвести загрузку системы.

Last updated