UEFI i programowy RAID1

W przypadku bootowania systemu na komputerze, który nie obsługuje tradycjnego ładowania z MBR przez BIOS w trybie legacy mogą wystąpić problemy z synchronizacją partycji EFI.

Pierwsza sprawa - partycja EFI zawiera system plików FAT32, jeżeli użyjemy zwykłego RAIDa z mdadm to UEFI nie będzie widzieć FAT32 na tej partycji (kilka pierwszych sektorów będzie zawierać opis partycji mdadm a nie FAT32). Można ten problem ominąć dodając parametr --metadata=1.0 podczas tworzenia RAID - w ten sposób dane metadane opisujące macierz będą umieszczone na końcu partycji (nie zmieniając pierwszych bajtów tej partycji).

Druga sprawa - UEFI może coś zapisać na partycji EFI ale zrobi to tylko na jednym dysku zanim RAID zacznie działać - spowoduje to niezgodność danych między dwoma partycjami w macierzy. Ten problem jest poważniejszy, niemniej póki na tym dysku nie znajdą się jakieś niezbędne zmiany temat można zignorować, ponieważ mdadm zsynchronizuje partycje i najwyżej utracimy nowe dane, który zwykle nie są istotne.

Tworzenie RAID1 z partycją EFI

Zaczynamy od stworzenia RAID1 na partycji EFI, zakładamy, że na obu dyskach, które są w komputerze mamy partycje o tym samym rozmiarze pod naszą macierz. Kopiujemy zawartość partycji EFI z pierwszego dysku w bezpieczne miejsce. Odmontowujemy poartycję EFI używając polecenia umount /boot/efi

Tworzymy macierz z metadanymi w starym formacie:
mdadm --create --verbose /dev/mdX --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 /dev/sdb1

Formatujemy macierz na system plików FAT32:
mkfs.vfat /dev/mdX

Sprawdzamy jaki UUID ma nowa partycja:
/dev/disk/by-uuid

Zamieniamy wpis dla /boot/efi w pliku /etc/fstab tak by wskazywał UUID systemu plików w RAID

Montujemy zmirrorowaną partycję /boot/efi używając polecenia mount /boot/efi

Kopiujemy wcześniej zachowaną w bezpiecznym miejscu pierwotną zawartość /boot/efi na zmirrorowaną partycję EFI

Wpisy startowe w UEFI

Musimy poinformować UEFI, że system może startować z obu dysków, domyślnie mimo użycia RAID system operacyjny dodaje wpis tylko dla jednego dysku. Do tego celu użyjemy efibootmgr

Możemy sprawdzić jak wyglądają obecne wpisy za pomocą polecenia (-v oznacza szczegółową infromację):
efibootmgr -v

Przykładowy wynik:

BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0001,0000,0007,0005,0004,0006,0008
Boot0000* Debian /dev/sda   HD(1,GPT,4e3036b3-0d22-9444-b15b-ef49b43f3398,0x800,0x32000)/File(\EFI\debian\grubx64.efi)....ISPH
Boot0001* Debian /dev/nvme  HD(1,GPT,b5e42a54-5e54-1e4e-a347-f53ecc0b95a8,0x800,0x32000)/File(\EFI\debian\grubx64.efi)....ISPH
Boot0004* GIGABYTE GP-GSM2NE3256GNTD-SN223808916139:    BBS(HD,GIGABYTE GP-GSM2NE3256GNTD-SN223808916139: ,0x400)/PciRoot(0x0)/Pci(0x1d,0x0)/Pci(0x0,0x0)/NVMe(0x1,64-79-A7-6B-50-C0-15-6E)......ISPH
Boot0005  USB:      BBS(65535,,0x0)/PciRoot(0x0)/Pci(0x14,0x0)......ISPH
Boot0006* SAMSUNG MZ7LN256HMJP-000H1 :  BBS(HD,SAMSUNG MZ7LN256HMJP-000H1 : ,0x400)/PciRoot(0x0)/Pci(0x17,0x0)/Sata(0,0,0)......ISPH
Boot0007  USB:      PciRoot(0x0)/Pci(0x14,0x0)N.....YM....R,Y.....ISPH
Boot0008* Intel Corporation: IBA CL Slot 00FE v0112 BBS(Network,Intel Corporation: IBA CL Slot 00FE v0112,0x0)/PciRoot(0x0)/Pci(0x1f,0x6)......ISPH
Kolejność bootowania

Kolejność jest określona w postaci czterocyfowej liczby, w linii BootOrder jest obecnie aktywna kolejność.
Zakładając, że chcemy by jako pierwszy wpis figurował ten o oznaczeniu Boot0000 wydajemy polecenie: efibootmgr -o 0000,0001,0007,0005,0004,0006,0008

Dodawanie nowego wpisu

Poprzedni wpis Następny wpis