Оригинал: https://alexskra.com/blog/ubuntu-20-04-with-software-raid1-and-uefi/

Программный RAID был относительно прост в использовании в течение долгого времени, поскольку он в основном просто работал. При использовании UEFI все стало не так просто, поскольку вам нужен раздел EFI, который не может находиться на программном RAID.

Что ж, вы можете поместить раздел EFI в программный RAID, если поместите метаданные в конец раздела. Таким образом, начало раздела будет таким же, как и без RAID. Проблема с этим заключается в том, что что-то внешнее записывает в раздел, поскольку вы не можете быть уверены, какой диск имеет правильное состояние. Вот почему мы собираемся использовать другой подход.

Вместо того чтобы размещать его на RAID, мы установим Ubuntu, как обычно, а затем скопируем раздел EFI на второй диск. Затем мы позаботимся о том, чтобы любой из двух жестких дисков можно было отключить, не влияя на возможность запуска или загрузки. Мы собираемся использовать инструмент efibootmgr, чтобы убедиться, что оба диска находятся в списке загрузки.

Я также добавлю некоторую информацию о том, как обращаться с заменой дисков и обновлениями, влияющими на EFI. Эти шаги также работают, если вы используете Ubuntu 20.04.

Итак, давайте продолжим.

 

Установка Ubuntu 22.04 с RAID

Во-первых, давайте установим Ubuntu и станем на шаг ближе к нашей цели RAID1. Когда вы попадете на экран конфигурации хранилища, выберите «Пользовательский макет хранилища» и выполните следующие действия:

  1. Переформатируйте оба диска, если они не пустые.
  2. Отметьте оба диска как загрузочные устройства. Это создаст ESP (системный раздел EFI) на обоих дисках.
  3. Добавьте неформатированный раздел GPT на оба диска. Они должны быть одного размера. Мы собираемся использовать эти разделы для RAID, содержащего ОС.
  4. Создайте программный RAID(md), выбрав два раздела, которые вы только что создали для ОС.
  5. Поздравляем, теперь у вас есть новое устройство RAID. Давайте добавим в него хотя бы один раздел GPT.
  6. Необязательно: если вам нужна возможность подкачки, создайте раздел подкачки на устройстве RAID. Установите размер таким же, как ваша оперативная память, или половину, если у вас 64 ГБ или более оперативной памяти.
  7. Создайте раздел для Ubuntu на устройстве RAID. Вы можете использовать оставшееся пространство, если хотите. Отформатируйте его как ext4 и смонтируйте в /.

Когда вы выполнили описанные выше шаги, это будет выглядеть так:

 

What partitioning of disks when installing Ubuntu on software raid might look like.

Как может выглядеть разбиение дисков при установке Ubuntu на программный рейд. Обратите внимание, что это без свопа, у вас будет больше раздела, если вы решите использовать своп.

Сохраните изменения и продолжите установку.

 

Убедитесь, что оба диска загрузочные

Поздравляем, теперь у вас есть избыточная установка! Вы можете проверить состояние RAID, выполнив следующее:

$ sudo mdadm --detail /dev/md0

Если RAID завершил синхронизацию, вы сможете отключить или удалить один диск и отключить оставшийся жесткий диск.

Однако, хотя это нормально, есть одна потенциальная скрытая проблема. Если вы удалите один диск, вы не сможете загрузить систему. Итак, давайте удостоверимся, что ESP одинаков на обоих дисках, и что система попытается загрузиться с любого из жестких дисков, а не только с одного. Установщик Ubuntu должен был позаботиться об этом за вас, но не стесняйтесь проверить.

Сначала покажите UUID разделов:

$ ls -la /dev/disk/by-partuuid/

total 0
drwxr-xr-x 2 root root 120 Oct 1 22:43 .
drwxr-xr-x 7 root root 140 Oct 1 22:43 ..
lrwxrwxrwx 1 root root 10 Oct 1 22:43 04d1fc28-4747-497b-9732-75f691a7ae7a -> ../../sdb2
lrwxrwxrwx 1 root root 10 Oct 1 22:43 0577b983-cf0a-4516-a3ab-92e19c3e9afe -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 1 22:43 97eecdcd-8ec3-4b8e-a6d9-1114d3baa75b -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 1 22:43 98d444f0-df7f-41d9-8461-95ca566bd3a7 -> ../../sdb1

Обратите внимание на UUID, принадлежащие первому разделу на обоих дисках. В данном случае это те, которые начинаются с 0577b983(sda1) и 98d444f0(sdb1).

Затем проверьте, какой диск вы используете в данный момент:

$ mount | grep boot

/dev/sdb1 on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

Как видите, сейчас мы используем sdb1, так что это работает. Скопируем его в sda1:

$ sudo dd if=/dev/sdb1 of=/dev/sda1

Теперь у нас есть работающий ESP на обоих дисках, поэтому следующий шаг — убедиться, что оба ESP присутствуют в списке загрузки:

$ efibootmgr -v

BootCurrent: 0005
Timeout: 0 seconds
BootOrder: 0001,0005,0006,0000,0002,0003,0004
Boot0000* UiApp FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(462caa21-7614-4503-836e-8ab6f4662331)
Boot0001* UEFI VBOX CD-ROM VB2-01700376 PciRoot(0x0)/Pci(0x1,0x1)/Ata(1,0,0)N…..YM….R,Y.
Boot0002* UEFI VBOX HARDDISK VBf2f22214-890bfc65 PciRoot(0x0)/Pci(0xd,0x0)/Sata(0,65535,0)N…..YM….R,Y.
Boot0003* UEFI VBOX HARDDISK VB7e066f6b-0343c49a PciRoot(0x0)/Pci(0xd,0x0)/Sata(1,65535,0)N…..YM….R,Y.
Boot0004* EFI Internal Shell FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(7c04a583-9e3e-4f1c-ad65-e05268d0b4d1)
Boot0005* ubuntu HD(1,GPT,98d444f0-df7f-41d9-8461-95ca566bd3a7,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0006* ubuntu HD(1,GPT,0577b983-cf0a-4516-a3ab-92e19c3e9afe,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)

Вы должны увидеть две записи под названием Ubuntu. Убедитесь, что UUID совпадают с двумя, которые вы отметили ранее.

Если запись отсутствует, вам нужно добавить ее.

Пример того, как добавить запись для UUID, начинающуюся с 0577b983(sda1), если она отсутствует:

$ sudo efibootmgr --create --disk /dev/sda --part 1 --label "ubuntu" --loader "\EFI\ubuntu\shimx64.efi"

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

Добавление нового диска после сбоя

Итак, диск вышел из строя, и вы заменили его на новый. Как это настроить?

Сначала найдите новый диск:

$ sudo fdisk -l

Это, вероятно, один без каких-либо разделов. Убедитесь, что вы используете правильный диск. В моем случае это /dev/sdb, поэтому я хочу сделать резервную копию таблицы разделов из /dev/sda и записать ее в /dev/sdb.

Измените источник на существующий диск и место назначения на новый:

$ source=/dev/sda
$ dest=/dev/sdb

Создайте резервную копию на случай, если вы перепутаете:

$ sudo sgdisk --backup=backup-$(basename $source).sgdisk $source
$ sudo sgdisk --backup=backup-$(basename $dest).sgdisk $dest

Создайте реплику исходной таблицы разделов, а затем сгенерируйте новые UUID для нового диска:

$ sudo sgdisk --replicate=$dest $source
$ sudo sgdisk -G $dest

Запустите синхронизацию raid, замените X на правильный раздел (у меня это 2):

$ sudo mdadm --manage /dev/md0 -a $(echo "$dest"X)

Теперь скопируйте ESP (замените X на правильный раздел, у меня это 1):

$ sudo dd if=$(echo "$source"X) of=$(echo "$dest"X)

Затем перечислите текущие UUID дисков:

$ ls -la /dev/disk/by-partuuid/

Затем покажите загрузочный список:

$ efibootmgr -v

Обратите внимание на BootOrder, если вы хотите его изменить.

Если какая-либо из записей Ubuntu указывает на UUID, которого в настоящее время не существует, удалите его (замените XXXX идентификатором из списка загрузки):

$ sudo efibootmgr -B -b XXXX

Если какой-либо из текущих UUID для раздела 1 на дисках отсутствует в списке загрузки, добавьте его (замените X на отсутствующий диск):

$ sudo efibootmgr --create --disk /dev/sdX --part 1 --label "ubuntu" --loader "\EFI\ubuntu\shimx64.efi"

Убедитесь, что это правильно:

$ efibootmgr -v

Все хорошо? Прекрасно! Теперь у вас снова есть работающий RAID.