8 апр. 2022 г.

Linux на программном RAID-1

Продолжаем сериал с установкой ОС на программное зеркало. Установка и настройка Linux будет приведена на примере Ubuntu 20.04 с GRUB в качестве загрузчика Для подавляющего большинства других актуальных дистрибутивов схема остаётся аналогичной.

Концепция та же, что и для Windows: отдельные разделы ESP, зеркалируются разделы под систему. Но обслуживать систему гораздо проще. Нет двух загрузочных пунктов, конфигурации GRUB и в /etc/fstab используются UUID — ошибиться сложно.


  • Установщик Ubuntu позволяет сразу создать зеркало и второй ESP.
  • Выбираем Custom storage layout.
  • Если диски не пусты, то удаляем все разделы (reformat в контекстном меню).
  • Назначаем первый диск в качестве загрузочного (use as boot device), затем второй (set as another boot device). Это приведет к созданию двух разделов ESP. Первый будет монтироваться в /boot/efi
  • Создаём на первом и втором диске разделы одинакового размера без файловой системы, выбираем Create software RAID (md).
  • Затем поверх массива можно создавать обычные разделы или LVM.

После загрузки смотрим, что получилось:

  lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0             7:0    0  55.4M  1 loop  /snap/core18/2128
loop1             7:1    0  70.3M  1 loop  /snap/lxd/21029
loop2             7:2    0  32.3M  1 loop  /snap/snapd/12704
sda               8:0    0 447.1G  0 disk
├─sda1            8:1    0   1.1G  0 part
└─sda2            8:2    0   100G  0 part
  └─md0           9:0    0   100G  0 raid1
    ├─vg0-lv--0 253:0    0    80G  0 lvm   /
    └─vg0-lv--1 253:1    0    20G  0 lvm   [SWAP]
sdb               8:16   0 447.1G  0 disk
├─sdb1            8:17   0   1.1G  0 part  /boot/efi
└─sdb2            8:18   0   100G  0 part
  └─md0           9:0    0   100G  0 raid1
    ├─vg0-lv--0 253:0    0    80G  0 lvm   /
    └─vg0-lv--1 253:1    0    20G  0 lvm   [SWAP]
  

Дождемся окончания синхронизации зеркала:

cat /proc/mdstat
[sudo] password for nosachev:
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sda2[1] sdb2[0]
      104791040 blocks super 1.2 [2/2] [UU]

Теперь нужно смонтировать второй ESP (в данном случае /dev/sda1). Монтировать его, конечно, надо по UUID, который надо найти:

sudo blkid
/dev/sdb1: UUID="6153-EE45" TYPE="vfat" 
	PARTUUID="74b52d60-f93f-4d71-be26-08d8051e20a7"
/dev/sdb2: UUID="7db4352a-9fe0-f97e-ec52-4054b3f6d0e0" 
	UUID_SUB="d973967c-e57b-be62-22e8-5c42cc1d7690" 
	LABEL="ubuntu-server:0" TYPE="linux_raid_member" 
	PARTUUID="a9266435-ff30-42ff-aa22-0fd7e42f8b9d"
/dev/sda1: UUID="6171-3842" TYPE="vfat"
	PARTUUID="49abd183-99e4-4385-8c5a-f913f49e9d1a"
/dev/sda2: UUID="7db4352a-9fe0-f97e-ec52-4054b3f6d0e0" 
	UUID_SUB="41a354a8-01a9-dc8f-e22b-b7c07c737811" 
	LABEL="ubuntu-server:0" TYPE="linux_raid_member" 
	PARTUUID="d43bf558-fb0d-4210-8e9f-ac28cc2e5adc"
/dev/md0: UUID="lL90UC-Xxnl-I0MJ-Al0f-1hA1-tfjb-M0vHD0" 
	TYPE="LVM2_member"
/dev/mapper/vg0-lv--0: UUID="17f2a56f-6012-42d9-97eb-65384e2455d5" 
	TYPE="ext4"
/dev/mapper/vg0-lv--1: UUID="d14c3ff7-b4ae-4a34-aaf1-4adc7e24aa5b" 
	TYPE="swap"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"

Создаем точку монтирования

sudo mkdir /boot/eficopy
Правим /etc/fstab, добавляем строчку:
/dev/disk/by-uuid/6171-3842 /boot/eficopy vfat defaults 0 1
Монтируем:
sudo mount /boot/eficopy

В Ubuntu можно воспользоваться

dpkg-reconfigure grub-efi-amd64
Получим на всех доступных ESP-разделах GRUB с правильной конфигурацией.

Восстановление. Вытаскиваем диск sdb, меняем на другой. Нужно создать аналогичные разделы на новом диске. Пример для gparted:

unit MiB
mklabel gpt
mkpart "EFI system partition" fat32 1MiB 1076MiB
set 1 esp on
mkpart "" 1076MiB 103476MiB

Добавляем новый раздел в массив, начнётся синхронизация:

nosachev@r1test:~$ sudo mdadm --add /dev/md0 /dev/sdb2
mdadm: added /dev/sdb2
nosachev@r1test:~$ sudo cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb2[2] sda2[1]
      104791040 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  0.1% (166784/104791040) 
      	finish=20.9min speed=83392K/sec

unused devices: 

Меняем в /etc/fstab UUID соотвествующего ESP-раздела, монтируем, запускаем конфигурирование GRUB.

При помощи efibootmgr можно посмотреть, какие пункты загрузки присутствуют в NVRAM и удалить ненужные:

nosachev@r1test:/boot/eficopy/EFI/ubuntu$ sudo efibootmgr -v
[sudo] password for nosachev:
BootCurrent: 0001
Timeout: 2 seconds
BootOrder: 0001,000D,000B,000C,000E,0002,0009
Boot0001* ubuntu        HD(1,GPT,
	49abd183-99e4-4385-8c5a-f913f49e9d1a,0x800,0x219800)/
    File(\EFI\ubuntu\grubx64.efi)
Boot0002* UEFI: Built-in EFI Shell     
	VenMedia(5023b95c-db26-429b-a648-bd47664c8012)..BO
Boot000B* UEFI OS       HD(1,GPT,
	49abd183-99e4-4385-8c5a-f913f49e9d1a,0x800,0x219800)/
    File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot000C* Windows Boot Manager  HD(1,GPT,
	bee52ecc-06c1-4da9-853f-d83d6f47ed95,0x800,0x219800)/
    File(\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI)..BO
Boot000D* ubuntu        HD(1,GPT,
	bee52ecc-06c1-4da9-853f-d83d6f47ed95,0x800,0x219800)/
    File(\EFI\ubuntu\grubx64.efi)
Boot000E* UEFI OS       HD(1,GPT,
	bee52ecc-06c1-4da9-853f-d83d6f47ed95,0x800,0x219800)/
    File(\EFI\BOOT\BOOTX64.EFI)..BO
Проверить очень просто — UUID здесь соотвествуют UUID'ам разделов ESP.

Комментариев нет:

Отправить комментарий