Von den bestehenden FragenDassieht dem am ähnlichsten aus, was ich mache, nur dass ich versuche, meine Partition zu vergrößern, und ich nicht weiß, warum in /boot/ und /boot/efi unterschiedliche Partitionen eingebunden sind und wie ich weiter vorgehen soll, ohne mir ins Bein zu schießen.
Bisher habe ich eine neue Partition erstellt, sie gemountet /newBoot
und dies getan sudo rsync -a /boot/ /newBoot/
, daher gehe ich davon aus, dass ich alle relevanten Dateien zum Wechseln in der neuen Partition habe.
$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME FSTYPE SIZE FSUSED LABEL PARTLABEL MOUNTPOINT UUID PARTUUID
sda 7.3T
└─sda1 crypto 7.3T 4dffc196-9926-43d9-a7c8-38898681f402 85b3a656-4886-4b37-b9c1-2acb0158587a
...
nvme0n1 931.5G
├─nvme0n1p1 vfat 512M 5.3M EFI System Partition
│ /boot/efi FD0E-EECA 587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2 ext2 488M 313.7M /boot 606a1976-d1c2-4246-a256-a8afddb04f84 2e10e277-560f-4f5e-abce-1dce5187a7f0
...
└─nvme0n1p4 vfat 1.5G NEWBOOT newboot 530D-4828 ea886018-714f-46fb-8f21-785c74543891
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004
Boot0004* ubuntu HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
$ sudo efibootmgr -c -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0000,0004
Boot0000* ubuntuNew HD(1,GPT,85b3a656-4886-4b37-b9c1-2acb0158587a,0xffff,0x3a3535ca9)/File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0004* ubuntu HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
also obwohl ich nicht verstehe, warum im aktuellen /boot
Ordner zwei Partitionen beteiligt sind, denke ich, dass eine auch funktionieren sollte? So lautet zumindest die ausgewählte Antwort auf die oben verlinkte Frage, oder?
Was fehlt denn nun /etc/fstab
??
$ cat /etc/fstab
...
UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot ext2 defaults 0 2
...
UUID=FD0E-EECA /boot/efi vfat umask=0077 0 1
...
Laut lsblk
und efibootmgr -v
(danke @oldfred) ist die neue Option für den ersten Start nun . sda1
und nicht nvme0n1p4
. sda1
ein externes Laufwerk, von dem ich auf keinen Fall starten möchte. Warum wurde das als Standard verwendet??
- Welche Änderung fehlt, damit von der neuen Partition gebootet wird?
- Muss ich vor dem Neustart das
UUID
of in fstab ändern?/boot
- Benötige ich dafür eine separate Partition
/boot/efi
?
Antwort1
/boot
Sowohl als auch als separate Dateisysteme zu haben /boot/efi
, ist übertrieben, aber:
- sehr alte BIOS-basierte Systeme benötigen möglicherweise eine separate
/boot
Partition, um BIOS-Einschränkungen zu vermeiden - Alle Systeme, die im UEFI-Stil booten, benötigen
/boot/efi
eine entsprechende ESP-Partition, da die Firmware die Bootloaderdatei dort erwartet. - Wenn Sie über ein separates unverschlüsseltes Dateisystem verfügen,
/boot
können Sie jede vom Root-Dateisystem unterstützte Verschlüsselungsmethode verwendencryptsetup
, anstatt der begrenzteren Anzahl von Verschlüsselungen, die von GRUB verstanden werden.
Die Standardpartitionierung eines modernen Debian/Ubuntu verfügt über beide als separate Partitionen, sodass die Standardkonfiguration die größtmögliche Bandbreite an Systemen abdecken kann.
Wie in den Kommentaren von oldfred erwähnt, identifiziert UEFI die zu verwendende ESP-Partition durch eine partitionsspezifische GUID in der GPT-Partitionstabelle. Diese GUID ist in Linux als PARTUUID bekannt. lsblk -o +partuuid
wird sie anzeigen.
Ihr efibootmgr
Befehl war fast korrekt. Um die UbuntuNew-Startoption mit der richtigen Festplatte zu erstellen, hätten Sie Folgendes verwenden sollen:
sudo efibootmgr -c -d /dev/nvme0n1 -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI
efibootmgr
sucht die PARTUUID selbst und verwendet sie automatisch, um den neuen Starteintrag zu erstellen. Sie müssen nur die Festplatte angeben (es sei denn, die Festplatte enthält mehrere EFI-Systempartitionen).
Sobald shimx64.efi
geladen wurde grubx64.efi
, wird es auf Systemen, die im Debian/Ubuntu-Stil konfiguriert sind, grub.cfg
im selben Verzeichnis wie gelesen grubx64.efi
. Diese Datei enthält nur wenige Zeilen, die die Dateisystem-UUID des Dateisystems identifizieren, das das /boot
Verzeichnis enthält (ob es sich um eine separate Partition oder nur um ein normales Verzeichnis im Root-Dateisystem handelt). Daher können Debian/Ubuntu-SystemestetsDie „Haupt“-GRUB-Konfigurationsdatei sollte unter vorhanden sein /boot/grub/grub.cfg
, unabhängig davon, ob das System BIOS oder UEFI verwendet. Wenn Sie eine große Anzahl von Systemen unterschiedlichen Alters haben, ist dies praktisch.
Als Referenz: RedHat 7 und 8 haben die tatsächliche GRUB-Konfiguration auf /boot/grub2/grub.cfg
BIOS-Systemen bei und /boot/efi/EFI/redhat/grub.cfg
auf UEFI-Systemen bei .
Jedoch/boot
Wenn Sie und zusammenführen möchten /boot/efi
, müssen Sie einige Dinge beachten:
- Der angegebene Bootloaderpfad
efibootmgr
basiert auf dem Stamm des ESP-Dateisystems. Ursprünglich beginnt dieser Pfad bei/boot/efi
und bezieht sich daher\\EFI\\UBUNTU\\SHIMX64.EFI
auf/boot/efi/EFI/UBUNTU/SHIMX64.EFI
, wie von Linux aus gesehen. Wenn Sie nur verwenden/boot
, müssen Sie entweder das UBUNTU-Verzeichnis eine Ebene nach oben verschieben oder den Bootloaderpfad als angeben\\EFI\\EFI\\UBUNTU\\SHIMX64.EFI
. /boot
muss etwas sein, das von GRUB verstanden wird, damit es die Kernel- und Initramfs-Dateien von dort laden kann. Die UEFI-Version von GRUB in Ubuntu versteht definitiv ext2 und vfat; wenn Sie also in eine einzelne vfat-Partition zusammenführen/boot
,/boot/efi
wird GRUB keine Probleme haben. Sie können ext2 nicht verwenden, da die Firmware SHIMX64.EFI und GRUBX64.EFI von dieser Partition lesen muss und die typische UEFI-Firmware ext2 nicht verstehen kann.- Wird beim Booten
/boot
nur von GRUB benötigt, nicht vom Linux-Kernel: Sie können es/boot
unmounten und das System würde trotzdem einwandfrei booten. Sie sollten es aber unmounten,/boot
damit Kernel-Updates normal durchgeführt werden können. (Oder wenn Sie es wirklich verbergen möchten, indem Sie es unmounten, können Sie Skripte hinzufügen, um/etc/kernel/pre*.d/
es automatisch zu mounten, bevor Kernel-Updates installiert werden, und um/etc/kernel/post*.d
es wieder zu unmounten, nachdem die Installation/Entfernung eines bestimmten Kernel-Pakets abgeschlossen ist.)
Der Bootloader wird oft als „beängstigend und gefährlich“ empfunden, wenn Sie die Anforderungen nicht genau kennen. Andererseits ist er normalerweise ziemlich eigenständig, sodass Probleme, die nur mit dem Bootloader zusammenhängen, normalerweise nicht so schwer zu beheben sind ... sobald Sie die erste Hürde überwunden haben, das System von einem externen Medium zu booten, können Sie mit der Behebung beginnen. Ich würde nicht sagen, dass ein System mit einem nicht funktionierenden Bootloader „erledigt“ ist: Es braucht nur ein wenig externe Hilfe.
Antwort2
Der Bootloader sucht nach dem, was Sie aktuell gemountet haben /boot/efi
. Wenn Sie also diese Partition nicht auch vergrößern möchten, können Sie die Partition so belassen, wie sie ist, und nur eine kleine Änderung an einer Datei vornehmen, wie unten beschrieben.
Vorbereiten der neuen Bootpartition
- Erstellen Sie eine neue
ext2
Partition mit der gewünschten Größe. Diese Partition benötigt kein Boot-Flag – Ihre EFI-Partition ist der Einstiegspunkt und wird an diese neue Partition delegiert. - Hängen Sie die neue Partition irgendwo ein.
/newBoot
Zum Beispiel - Kopieren Sie Ihre Dateien von der alten Bootpartition, zum Beispiel mit
rsync --recursive --delete --archive /boot/ /newBoot/
- Löschen Sie den Inhalt von
/newBoot/efi/
, hier war das nur ein Ordner:rm -rf /newBoot/efi/EFI/
. Löschen Sie nichtnewBoot/efi/
. Wir wollen den altenefi
Ordner dort mounten.
Weisen Sie efi
an, die neue Partition zu verwenden
Ermitteln Sie /newBoot
die UUID von :
$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME FSTYPE SIZE FSUSED LABEL PARTLABEL MOUNTPOINT UUID PARTUUID
nvme0n1 931.5G
├─nvme0n1p1 vfat 512M 5.3M EFI System Partition /boot/efi FD0E-EECA 587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2 ext2 488M 313.7M /boot 606a1976-d1c2-4246-a256-a8afddb04f84 2e10e277-560f-4f5e-abce-1dce5187a7f0
├─nvme0n1p3 crypto_LUKS 927.7G e7f674b8-4bec-4502-a1e5-0e93aa34786f 2fed2ecb-b548-479b-aa3f-7f1bbfb9981f
│ └─sda3_crypt LVM2_member 927.7G 9tx8Yv-XDCR-RmGf-fmXo-WiX2-SDpG-xH1si4
│ ├─ubuntu--gnome--vg-root ext4 911.6G 734.2G / 1cccfb0a-69da-4246-a071-52f882681418
│ └─ubuntu--gnome--vg-swap_1 swap 15.8G [SWAP] e3facfb8-db2e-426d-aef4-b6c81004fd6f
└─nvme0n1p4 ext2 1.5G newBoot newBoot 5aca79e7-b740-46d3-bc76-aa7e8b8b93da 9e8baf2f-2118-4042-9c47-7ffb824ada52
Bearbeiten Sie /boot/efi/EFI/ubuntu/grub.cfg
es entsprechend und ersetzen Sie die alte aktuelle UUID durch die neue:
# cat /boot/efi/EFI/ubuntu/grub.cfg
# search.fs_uuid 606a1976-d1c2-4246-a256-a8afddb04f84 root
search.fs_uuid 5aca79e7-b740-46d3-bc76-aa7e8b8b93da root
set prefix=($root)'/grub'
configfile $prefix/grub.cfg
Beenden
Jetzt sollte das System bereits von der neuen Partition booten, /boot/
wäre aber nach dem Booten von der neuen Partition die alte. Bearbeiten Sie /etc/fstab
es so, dass Systemupdates alle Dateien an ihrem Platz finden:
# UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot ext2 defaults 0 2
UUID=5aca79e7-b740-46d3-bc76-aa7e8b8b93da /boot ext2 defaults 0 2
Die /boot/efi
Zeile in /etc/fstab
bleibt wie sie war:
UUID=FD0E-EECA /boot/efi vfat umask=0077 0 1