/boot on RAID1
Ubuntu 18.04
Setup KVM
Рассмотрим шаги про добавление 2-го диска.
На последнем шаге обязательно ставим галочку:

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

только после этого запускаем установку.
Установка Ubuntu 18.04
Рассмотрим часть про создание разделов:

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

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



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

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

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


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

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


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

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

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

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

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

Далее Done и в следующем окне Continue :
Вся информация будет удалена, диски будут отформатированы

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

Reboot
Install GRUB
Смотрим информацию по дискам:
lsblkroot@test:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 89.1M 1 loop /snap/core/8268
sr0 11:0 1 1024M 0 rom
vda 252:0 0 15G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vda3 252:3 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /
vdb 252:16 0 15G 0 disk
├─vdb1 252:17 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vdb2 252:18 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /В output интересуют имена дисков (vda и vdb), далее сам процес установки grub:
grub-install /dev/vdaroot@test:~# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.
root@test:~# grub-install /dev/vdbroot@test:~# grub-install /dev/vdb
Installing for i386-pc platform.
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: error: embedding is not possible, but this is required for RAID and LVM install.
root@test:~# Ошибка при выполнении grub-install на vdb ожидаемая, так как там нету раздела по него.
Создаем раздел:
parted /dev/vdb set 1 bios_grub onroot@test:~# parted /dev/vdb set 1 bios_grub on
Information: You may need to update /etc/fstab.
root@test:~# parted /dev/vdb printroot@test:~# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 16.1GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1075MB 1074MB bios_grub
2 1075MB 16.1GB 15.0GB
root@test:~# Все прошло успешно, повторяем попытку grub-install:
grub-install /dev/vdbroot@test:~# grub-install /dev/vdb
Installing for i386-pc platform.
Installation finished. No error reported.
root@test:~# Мы получили систему которая может грузиться с любого из /boot в случае выхода какого то из дисков. Далее мы протестируем как это работает и возможные применения такой схемы на практике.
Тесты
Переключение на загрузку со второго диска
Проверяем что с рейдами все ОК!
cat /proc/mdstatroot@test:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 vdb1[1] vda2[0]
1046528 blocks super 1.2 [2/2] [UU]
md1 : active raid1 vdb2[1] vda3[0]
14667776 blocks super 1.2 [2/2] [UU]
unused devices: <none>
root@test:~# [UU] - нам говорит о том что рейдах участвует по два диска, в нашем случае partition.

Выключаем систему, меняем загрузочный диск:
shutdown now
Запускаем систему. Система загрузилась с VirtIO Disk 2.
VirtIO Disk 1 мы можем безболезненно отключить от системы, и система у нас останется в рабочем состоянии.
Второй диск вышел из строя
Представим ситуацию что какой-то из дисков, в нашем случае будет VirtlO Disk2, вышел из строя. Для имитации поломки, мы его удалим из системы.
До начала эксперимента проверяем что у нас все ок, и создадим в папке root файл, чтоб проверить синхронизацию с новым диском при отключении VirtlO Disk1 😁 .
P.S. Да у нас авария за аварией!
cat /proc/mdstatroot@test:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 vdb1[1] vda2[0]
1046528 blocks super 1.2 [2/2] [UU]
md1 : active raid1 vdb2[1] vda3[0]
14667776 blocks super 1.2 [2/2] [UU]
unused devices: <none>
root@test:~#
cd && echo text in file >> test.file && cat test.file && ll root@test:~# cd && echo text in file >> test.file && cat test.file && ll
text in file
total 28
drwx------ 3 root root 4096 May 29 15:58 ./
drwxr-xr-x 24 root root 4096 May 29 13:39 ../
-rw------- 1 root root 408 May 29 15:32 .bash_history
-rw-r--r-- 1 root root 3106 Apr 9 2018 .bashrc
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
drwx------ 2 root root 4096 May 29 14:41 .ssh/
-rw-r--r-- 1 root root 13 May 29 15:58 test.file
root@test:~# Выключаем машину, удаляем диск из системы, а загрузочным ставим VirtlO Disk1


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


Запускаем систему и проверяем состояние дисков, рейдов, файлов
lsblkroot@test:/home/test# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 89.1M 1 loop /snap/core/8268
sr0 11:0 1 1024M 0 rom
vda 252:0 0 15G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vda3 252:3 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /
root@test:/home/test# cat /proc/mdstatroot@test:/home/test# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 vda2[0]
1046528 blocks super 1.2 [2/1] [U_]
md1 : active raid1 vda3[0]
14667776 blocks super 1.2 [2/1] [U_]
unused devices: <none>
root@test:/home/test# [U_] - у нас в md0/md1 не хватает по одному диску.
cd && cat test.file && llroot@test:~# cd && cat test.file && ll
text in file
total 28
drwx------ 3 root root 4096 May 29 15:58 ./
drwxr-xr-x 24 root root 4096 May 29 13:39 ../
-rw------- 1 root root 871 May 29 16:03 .bash_history
-rw-r--r-- 1 root root 3106 Apr 9 2018 .bashrc
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
drwx------ 2 root root 4096 May 29 14:41 .ssh/
-rw-r--r-- 1 root root 13 May 29 15:58 test.file
root@test:~# Но система продолжает быть в рабочем состоянии.
Восстанавливаемся:
Создаем чистый не размеченный диск, подключаем его к системе, такого же размера как оставшийся диск в системе, предварительно выключив систему.


Запускаем систему, проверяем диски, рейд
lsblkroot@test:/home/test# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 89.1M 1 loop /snap/core/8268
sr0 11:0 1 1024M 0 rom
vda 252:0 0 15G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vda3 252:3 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /
vdb 252:16 0 15G 0 disk
root@test:/home/test# cat /proc/mdstatroot@test:/home/test# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 vda2[0]
1046528 blocks super 1.2 [2/1] [U_]
md1 : active raid1 vda3[0]
14667776 blocks super 1.2 [2/1] [U_]
unused devices: <none>
root@test:/home/test# Размечаем диск vdb по partition как у vda, для более корректного отображения в дереве, разметку делаем в том же порядке:
fdisk /dev/vdbroot@test:/home/test# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x9bc6d9da.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-31457279, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-31457279, default 31457279): +1M
Created a new partition 1 of type 'Linux' and of size 1 MiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (2-4, default 2):
First sector (4096-31457279, default 4096):
Last sector, +sectors or +size{K,M,G,T,P} (4096-31457279, default 31457279): +1G
Created a new partition 2 of type 'Linux' and of size 1 GiB.
Command (m for help): n
Partition type
p primary (2 primary, 0 extended, 2 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (3,4, default 3):
First sector (2101248-31457279, default 2101248):
Last sector, +sectors or +size{K,M,G,T,P} (2101248-31457279, default 31457279):
Created a new partition 3 of type 'Linux' and of size 14 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
root@test:/home/test# смотрим что у нас получилось по дискам:
lsblkroot@test:/home/test# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 89.1M 1 loop /snap/core/8268
sr0 11:0 1 1024M 0 rom
vda 252:0 0 15G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vda3 252:3 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /
vdb 252:16 0 15G 0 disk
├─vdb1 252:17 0 1M 0 part
├─vdb2 252:18 0 1G 0 part
└─vdb3 252:19 0 14G 0 part
root@test:/home/test# Теперь можем восстановить "первый" RAID1 (md0):
mdadm /dev/md0 --add /dev/vdb2К сожалению вывода у команды нет, но если запустить в отдельном окне:
watch cat /proc/mdstatможно увидеть как идет восстановление md0 :

Восстанавливаем "второй" RAID1 (md1):
mdadm /dev/md1 --add /dev/vdb3
Дожидаемся конца восстановления.
Проверяем состояние:
cat /proc/mdstatroot@test:/home/test# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 vdb2[2] vda2[0]
1046528 blocks super 1.2 [2/2] [UU]
md1 : active raid1 vdb3[2] vda3[0]
14667776 blocks super 1.2 [2/2] [UU]
unused devices: <none>
root@test:/home/test# lsblkroot@test:/home/test# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 89.1M 1 loop /snap/core/8268
sr0 11:0 1 1024M 0 rom
vda 252:0 0 15G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vda3 252:3 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /
vdb 252:16 0 15G 0 disk
├─vdb1 252:17 0 1M 0 part
├─vdb2 252:18 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vdb3 252:19 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /
root@test:/home/test# cd && cat test.file && llroot@test:/home/test# cd && cat test.file && ll
text in file
total 28
drwx------ 3 root root 4096 May 29 15:58 ./
drwxr-xr-x 24 root root 4096 May 29 13:39 ../
-rw------- 1 root root 959 May 29 16:21 .bash_history
-rw-r--r-- 1 root root 3106 Apr 9 2018 .bashrc
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
drwx------ 2 root root 4096 May 29 14:41 .ssh/
-rw-r--r-- 1 root root 13 May 29 15:58 test.file
root@test:~# RAID1(md0/md1) в порядке, мы обратно вернули разметку дискам, файлы на месте, с теми же данными что были созданы на отключенном (удаленном) диске.
Устанавливаем grub на новый диск и пробуем с него запустить систему.
grub-install /dev/vdbroot@test:~# grub-install /dev/vdb
Installing for i386-pc platform.
Installation finished. No error reported.
root@test:~# Выключаем систему, переключаем диск для загрузки


Запускаем систему, система загрузилась с VirtIO Disc 2.
Добавление 3-го диска
Создаем и добавляем в систему 3-й диск


Запускаем систему, смотрим имя диска, и розмечаем его как при востановлении:
lsblkroot@test:/home/test# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 93.9M 1 loop /snap/core/9066
loop1 7:1 0 89.1M 1 loop /snap/core/8268
sr0 11:0 1 1024M 0 rom
vda 252:0 0 15G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vda3 252:3 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /
vdb 252:16 0 15G 0 disk
├─vdb1 252:17 0 1M 0 part
├─vdb2 252:18 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1
│ └─md0p1 259:0 0 1018M 0 md /boot
└─vdb3 252:19 0 14G 0 part
└─md1 9:1 0 14G 0 raid1
└─md1p1 259:1 0 14G 0 md /
vdc 252:32 0 15G 0 disk
root@test:/home/test# fdisk /dev/vdcroot@test:/home/test# fdisk /dev/vdc
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x395de8c7.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-31457279, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-31457279, default 31457279): +1M
Created a new partition 1 of type 'Linux' and of size 1 MiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (2-4, default 2):
First sector (4096-31457279, default 4096):
Last sector, +sectors or +size{K,M,G,T,P} (4096-31457279, default 31457279): +1G
Created a new partition 2 of type 'Linux' and of size 1 GiB.
Command (m for help): n
Partition type
p primary (2 primary, 0 extended, 2 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (3,4, default 3):
First sector (2101248-31457279, default 2101248):
Last sector, +sectors or +size{K,M,G,T,P} (2101248-31457279, default 31457279):
Created a new partition 3 of type 'Linux' and of size 14 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
root@test:/home/test#Добавляем новые разделы в md0/md1:
mdadm /dev/md0 --add /dev/vdc2root@test:/home/test# mdadm /dev/md0 --add /dev/vdc2
mdadm: added /dev/vdc2
root@test:/home/test#mdadm /dev/md1 --add /dev/vdc3root@test:/home/test# mdadm /dev/md1 --add /dev/vdc3
mdadm: added /dev/vdc3
root@test:/home/test#Расширяем рейды с 2-х дисков до 3-ч.
mdadm -G /dev/md0 --raid-devices=3mdadm -G /dev/md1 --raid-devices=3
Устанавливаем на него grub
grub-install /dev/vdcroot@test:/home/test# grub-install /dev/vdc
Installing for i386-pc platform.
Installation finished. No error reported.
root@test:/home/test# Теперь в системе 3 диска в RAID1 и с любого из них можно произвести загрузку системы.
Last updated