Einleitung
Die EFI system partition (kurz ESP) ist eine eigenstaendige FAT-formatierte Partition welche als Speicherplatz fuer den EFI Bootloader dient und so auch Treiber etc. von der UEFI Firmware geladen werden koennen. Diese ist notwendig fuer den UEFI Boot.
Einrichten der EFI system partition
Linux (GRUB)
Die Partitionstabelle muss dafuer zuerst geaendert werden. Es muss sichergestellt werden, dass mindestens 200MB nicht partitionierter Speicher verfuegbar ist auf jedem Datentraeger. Um eine ESP zu erstellen, muss zuerst die Partition in der Partitionstabelle definiert werden. Dies kann mit gdisk
im Rescue getan werden.
$ gdisk /dev/nvme0n1
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help):
Der ausgewaehlte Datentraeger hat eine GPT Partitionstabelle. Mit p
kann die derzeitige Partitionstabelle angezeigt werden.
Command (? for help): p
Disk /dev/nvme0n1: 1000215216 sectors, 476.9 GiB
Model: SAMSUNG MZVLB512HAJQ-00000
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 81C8DFEB-06A0-4164-84BC-B5F5D696B519
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1000215182
Partitions will be aligned on 2048-sector boundaries
Total free space is 411614 sectors (201.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 999805582 476.7 GiB 8300 Linux filesystem
Command (? for help):
In diesem Fall ist nur eine Partition mit 476.7 GiB
verfuegbar, wo sich das OS befindet. Damit sind noch genau 201.0 MiB
von unpartitionieren Speicher verfuegbar. Diese werden fuer die ESP benutzt.
Mit n
kann eine neue Partition angelegt werden.
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-1000215182, default = 999806976) or {+-}size{KMGTP}:
Last sector (999806976-1000215182, default = 1000215182) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI System'
Bitte Beachten: Die ESP muss nicht am Anfang der Partitionstabelle sein. Die einzige Notwendigkeit ist, dass die Partition mindestens 200MB ist und den Hex code EF00
besitzt.
Wenn dies erledigt wurde, kann die Partitionstabelle mit w
gespeichert werden.
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/nvme0n1.
The operation has completed successfully.
Um sicherzustellen, dass die Partitionstabelle neugeladen wird kann partprobe
ausgefuehrt werden.
Die Ausgabe von lsblk
kann nun so aussehen:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 4G 1 loop
nvme0n1 259:0 0 477G 0 disk
├─nvme0n1p1 259:4 0 476.7G 0 part
└─nvme0n1p2 259:5 0 200M 0 part
BEACHTE
Wenn der Server mehr als einen Datentraeger besitze, dann ist es empfohlen die ESP in einem RAID 1 zu erstellen.
Der wichtige Punkt hierbei ist dabei, dass im MD der Parameter --metadata=1.0
gesetzt wird. Hierbei werden die MD Metadaten an das Ende der Partition geschrieben und nicht am Anfang der Partition. Dies ist noetig um der UEFI Firmware die Moeglichkeit zu geben um die Partition zu erkennen.
Zuerst muss hierfuer der Status des MD mit cat /proc/mdstat
abgerufen werden. Die Ausgabe wird in etwa so aussehen:
Personalities : [raid1] [raid10] [linear] [multipath] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 nvme0n1p1[1] nvme1n1p1[0]
523712 blocks super 1.2 [2/2] [UU]
md1 : active raid1 nvme0n1p2[1] nvme1n1p2[0]
1874716672 blocks super 1.2 [2/2] [UU]
bitmap: 1/14 pages [4KB], 65536KB chunk
In diesem Fall, das naechstmoegliche MD-Device waere md2
. Dies wird fuer die ESP genutzt.
Die Partition muss auf jeder Disk vorhanden sein wie bereits oben beschrieben.
Das MD Device kann wiefolgt erstellt werden (die Anzahl von den raid-devices
und der logischen Datentraeger muss entsprechend angepasst werden):
mdadm --create --verbose --level=1 --raid-devices=2 --metadata=1.0 /dev/md/2 /dev/nvme0n1p3 /dev/nvme1n1p3
Nach der Erstellung sollte ein Eintrag fuer die mdadm.conf
generiert werden:
mdadm --detail --scan /dev/md/2 >> /etc/mdadm/mdadm.conf
Die neuerstellte Partition muss jetzt noch mit FAT32 formatiert werden:
$ mkfs.vfat -F 32 /dev/nvme0n1p2 # or the md device
mkfs.fat 4.1 (2017-01-24)
Mit mkdir /boot/efi
kann der benoetigte Ordner angelegt werden. Der Ordner muss anschliessend gemounted werden.
Mit blkid -o value -s UUID /dev/your_esp_partition_or_md_device
kann die UUID der Partition abgerufen werden. Mit dieser UUID kann nun in der /etc/fstab
ein neuer Eintrag erstellt werden:
UUID=the_uuid_of_the_esp /boot/efi vfat umask=0077 0 1
Um die EFI Boot Binaerdateien zu installieren muss der EFI-GRUB Bootloader zuerst installiert werden.
Unter Debian/Ubuntu ist dies grub-efi-amd64-bin
, unter CentOS ist dies grub2-efi-x64
.
Nun kann der EFI-GRUB Bootloader installiert werden:
$ # Ubuntu/Debian
$ grub-install --target=x86_64-efi --efi-directory=/boot/efi --no-floppy --no-nvram --removable
$ # CentOS
$ grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
BEACHTE Bei der Installation von Ubuntu über das "installimage" Werkzeug ist es aufgrund der Standardinstallationsroutine von Ubuntu nicht möglich, die EFI-Systempartition in einem RAID 1-Verbund zu konfigurieren.
Windows
Microsoft bietet seit Windows Server 2012 ein Tool namens mbr2gpt
welches automatisch die Partitionstabelle in GPT konvertiert und dabei eine ESP anlegt.
Es ist empfohlen dies in einer WinPE Umgebung zu erledigen, es kann jedoch auch im laufenden System getan werden.
Hierfuer muss eine administrative Command prompt (cmd
) aufgerufen werden. In dieser kann dann mbr2gpt /validate /allowFullOS
ausgefuehrt werden. Es muss beachtet werden, dass /allowFullOS
nur benoetigt wird, wenn die Konvertierung in einem laufenden System erledigt wird (nicht WinPE).
Die Ausgabe sollte in etwa so aussehen:
C:\Windows\System32> mbr2gpt /validate /allowFullOS
MBR2GPT: Attempting to validate disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
MBR2GPT: Validation completed successfully
Wichtig: Wenn die Validierung fehlschlaegt, sollte hier abgebrochen werden und ueberprueft werden, warum dies fehlgeschlagen ist.
Wenn der Datentraeger als dynamisch
gekennzeichnet ist, gibt es keine Moeglichkeit dies auf diesem Wege zu erledigen.
Wenn die Validierung erfolgreich war, kann hier die Konvertierung weitergefuehrt werden. Dies kann mit mbr2gpt /convert /allowFullOS
erledigt werden. Die Ausgabe sollte in etwa so aussehen:
C:\Windows\System32> mbr2gpt /convert /allowFullOS
MBR2GPT will now attempt to convert the default book disk.
If conversion is successful the disk can only be booted in GPT mode.
These changes cannot be undone!
MBR2GPT: Attempting to convert disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
MBR2GPT: Trying to shrink the OS partition
MBR2GPT: Creating the EFI system partition
MBR2GPT: Installing the new boot files
MBR2GPT: Performing the layout conversion
MBR2GPT: Migrating default boot entry
MBR2GPT: Adding recovery boot entry
MBR2GPT: Fixing drive letter mapping
MBR2GPT: Conversion completed successfully
MBR2GPT: Before the new system can boot properly you need to switch the firmware to boot to UEFI mode!
Nun kann die Firmware zu UEFI geaendert werden.