EFI-System-Partition

Last change on 2020-09-28 • Created on 2020-03-19 • ID: RO-2AA14

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

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.

Table of Contents