- Wie bootet man von einer GPT-Partition?
- Ist es wie die MBR-Methode, die eine Partition mit aktiviertem Boot-Flag erfordert?
- Wie markiere ich eine GPT-Partition unter Linux als bootfähig?
Antwort1
Wie bootet man von einer GPT-Partition?
Das Booten einer Linux-Installation umfasst mehrere Schritte und Softwarekomponenten, darunterFirmwareInitialisierung, Ausführung einerBootloader, Laden und Starten einesLinux KernelBild und Ausführung verschiedenerStartskripteUndDaemonenFür jede dieser Phasen und Komponenten gibt es unterschiedliche Varianten und Ansätze; zum Beispiel:RODEN,LILO,SYSLINUXoderLadelinkönnen als Bootloader verwendet werden, während die Startskripte entweder traditionelldrin-Stil, oder die Systemkonfiguration kann durch moderne Alternativen wiesystemdoderEmporkömmling.
Ein weiteres beliebtes Programm zum Booten istrEFIndAUEFI-Bootmanagerfähig zum StartenEFISTUBKernel.
DerEFI(Erweiterbare Firmware-Schnittstelle)SystempartitionoderESPist eine Partition auf einem Datenspeichergerät (normalerweise eine Festplatte oder ein Solid-State-Laufwerk), die von Computern verwendet wird, die demEinheitliche erweiterbare Firmware-Schnittstelle(UEFI). Wenn ein Computergebootet, UEFI-Firmware lädt auf dem ESP gespeicherte Dateien, um installierte Betriebssysteme und verschiedene Dienstprogramme zu starten.
Ein ESP enthält dieBootloaderoderKernel-Bilderfür alle installierten Betriebssysteme
Ist es wie die MBR-Methode, die eine Partition mit aktiviertem Boot-Flag erfordert?
DerBoot-Flagstammt aus alten Zeiten, wo Sie einMBRPartitionsdatensatz als bootfähig, damit Sie angeben können, wo sich der Bootloader befindet. Um Ihre Frage zu beantworten: Nein, Sie müssen eine Bootpartition nicht als bootfähig kennzeichnen.
Derglobal eindeutige Kennung(GUID) für dieEFISystempartition in derGUID-Partitionstabelle(GPT) Schema istC12A7328-F81F-11D2-BA4B-00A0C93EC93B, während seine ID imMaster Boot Record(MBR) Partitionstabellenschema istOS-Version:.
Wie markiere ich eine GPT-Partition unter Linux als bootfähig?
- Ingdisk, setzen Sie den Typcode auf EF00. (gdisk verwendet zwei Byte lange Typcodes, die sich zu den tatsächlichen Typcodes auf der Festplatte erweitern lassen; „EF00“ ist nur eine Eselsbrücke für „C12A7328-F81F-11D2-BA4B-00A0C93EC93B".)
- InGPartedoder parted, setzen Sie das „Boot-Flag“. Beachten Sie jedoch, dass dies nur auf GPT-Festplatten funktioniert; Sie können mit diesen Programmen den ESP-Typcode auf MBR-Festplatten nicht setzen. (Das ist normalerweise kein großes Problem, da EFI-basierte Computer normalerweise von GPT-Festplatten booten.)
- In neueren Versionen von Linuxfdisk, legen Sie den Partitionstyp über seine Nummer fest (1 für „EFI-System“ auf GPT-Festplatten oder 0xEF auf MBR-Festplatten) oder durch Eingabe des vollständigen Typcodes auf GPT-Festplatten.
Antwort2
Ist es wie die MBR-Methode, die eine Partition mit aktiviertem Boot-Flag erfordert?
Hmm, also bevor wir weitermachen, noch einmal kurz in Erinnerung gerufen, wie das BIOS die Boot-Ausführung übergibt.
- Das BIOS liest den ersten Sektor (512 Bytes) des Startmediums.
- Wenn die letzten beiden Bytes des Sektors 55 AA sind, wird dieser Sektor ausgeführt. Hier endet also die Verantwortung des BIOS.
Dieser 440 Byte große Codeausschnitt heißt MBR (Master Boot Record). Sein Zweck besteht darin, in den 4 Partitionstabelleneinträgen nach dem Boot-Flag zu suchen. Wenn es sich um eine als bootfähig markierte Partition handelt, wird der erste Sektor geladen und der Boot-Ausführungsfluss an den Code in diesem Sektor übergeben.
Beachten Sie aus Kompatibilitätsgründen, dass der sogenannte schützende MBR auch bei Verwendung von GPT vorhanden ist. (GPT startet im zweiten Sektor.)
Es ist also der MBR-Code, der für das „Bootable Flag“ sorgt. Der ausgeschnittene 440-Byte-MBR-Code kann jedoch geändert oder anders sein. Und das ist tatsächlich bei der Installation von GRUB der Fall. So installieren Sie beispielsweise GRUB2 wie folgt:
sudo grub-install --boot-directory=/mnt/boot --force --target=i386-pc /dev/sdb -v
Ersetzt den Standard-MBR-Code vollständig durch eigenen Code. (Beachten Sie, dass eine Kopie dieses Codes unter /boot/grub/i386-pc/boot.img zu finden ist.)
Fazit: -> Der Grub-Code kümmert sich nicht um bootfähige Flags.
Grub auf einem Nicht-EFI-GPT-Gerät installieren
Mit „Nicht-EFI“ meine ich, dass wir ein altes Gerät haben, dessen BIOS kein UEFI hat oder auf dem UEFI im CSM-Modus (Compatibility Support Module) läuft und auf die herkömmliche Weise bootet, die ich oben beschrieben habe.
Wenn Grub über „Blocklisten“ installiert wird, installiert es sich selbst in der Partitionslücke zwischen dem MBR und dem ersten Bootsektor. Wenn wir jedoch GPT verwenden, weigert sich Grub, diesen Weg über die Partitionslücke zu gehen. Stattdessen möchte es eine winzige Partition erstellen, in der es seinen Code sicher installieren kann.
So richten wir dies ein mitGparted:
- Erstellen Sie eine formatierte Partition mit 1 MB
- Markieren Sie diese Partition als „BIOS-Grub“. Wenn Sie das Kontrollkästchen „BIOS-Grub“ in Gparted aktivieren, wird der GPT-Typ in „BIOS-Bootpartition“ geändert.
Alternativ können Sie auch Folgendes verwenden:
gdisk -l /dev/sdb
zum Prüfen und ...
sgdisk -t 3:ef02 /dev/sdb
^- markiert die 3. Partition als ef02 => 'BIOS-Bootpartition'
... um dasselbe ohne gparted zu erreichen. Hinweis: „ef02“ ist die Abkürzung für „BIOS-Bootpartition“ oder die GUID 21686148-6449-6E6F-744E-656564454649
.
Okay, das war’s. Jetzt können wir Grub einrichten.
Mounten Sie Ihr Linux (oder Ihre /boot/grub-Partition) in /mnt/boot und führen Sie aus
-
sudo grub-install --boot-directory=/mnt/boot --force --target=i386-pc /dev/sdb -v
Wenn Sie Glück haben und alles gut gegangen ist, sehen Sie:
grub-install: Info: setting the root device to `hostdisk//dev/sda,gpt6'.
grub-install: Info: saving <556324864,0,512>.
...
Der Inhalt /boot/grub/i386-pc/core.img
wird also direkt in die 1 MB große „BIOS-Bootpartition“ kopiert,
--force
da sonst Grub die Installation über Blocklisten verweigert. Falls dies fehlschlägt, gibt es hier eine Abkürzung, um erneut mit dem Blocklistenteil der Installation zu beginnen:
grub-bios-setup --verbose --force --directory= /mnt/boot/grub/i386-pc /dev/sdb
Also kurz gesagtGrub-BIOS-Setupwird kopieren
/mnt/boot/grub/i386-pc/boot.img -> Sector 0 (MBR)
/mnt/boot/grub/i386-pc/core.img -> Sector 556324864 (BIOS boot partition)
Der wichtigste Teil, die „Kompilierung“ von core.img, wird jedoch nicht davon durchgeführt.
ich benutzeVirtualboxum den Bootvorgang zu testen:
sudo chmod 666 /dev/sd*
VBoxManage internalcommands createrawvmdk -filename ~/sdb.vmdk -rawdisk /dev/sdb
Dieser Befehl ist insbesondere nützlich, um das gesamte physische Gerät in die virtuelle Maschine zu bekommen.
<Rechte Strg> + R startet VM neu
„Spaß“ bei der Grub-Rettung >
Nur eine kurze Eile, da Sie wahrscheinlich unterwegs darauf stoßen werden. Okay, das Ziel ist, diese beiden Befehle ohne Fehler auszuführen:
> insmod normal
> normal
set
ist nützlich, um zu sehen, was eingestellt ist.
ls
Zeigt, welche Partitionen vorhanden sind.
ls (hd0,2)
Zeigt, welche Dateien sich auf Partition Nr. 1 befinden. Wenn der Grub-Ordner auf (hd0,2) gefunden wurde,
set prefix=(hd0,2)/boot/grub
ist dies der Befehl, der Sie jetzt herausholt insmod normal
und normal
Sie in das „normale“ Grub-Menü bringt. Sobald Sie normal.mod zum Laufen gebracht haben, gibt es nur noch eine coole Sache zu erwähnen:
ls (hd0,<tab>
gibt Ihnen einen detaillierteren Überblick über die vorhandenen Partitionen, ihre Namen und das verwendete Dateisystem.
Doch zurück zum Thema.
Wie markiere ich die Partition mit grub.cfg?
Dies geschieht indirekt bei der Installation von Grub. Danach ist es behoben und fast unmöglich zu ändern. Dank einiger dummer Designentscheidungen. Okay, schauen wir uns diesen nicht gut gestalteten Teil von Grub genauer an.
Der Schlüssel zu dieser core.img. Während der Grub-Installation wird diese direkt in die 1 MB große Partition geschrieben, die wir zu diesem Zweck erstellt haben. Sie enthält ein Skript, das mehr oder weniger so aussehen kann
set prefix=(hd0,2)/boot/grub
insmod normal
normal
Dieses Skript und alle Dateisystemtreiber, die es zum Zugriff auf die Partition mit den Grub-Dateien benötigt, werden zusammengefügt und in core.img komprimiert (!!!). Aufgrund der Komprimierung können Sie keinen Disk-Editor verwenden, um es anzuzeigen oder kleine Dinge zu ändern, wie (hd0,2) in (hd0,4) zu ändern oder ähnliche Dinge, die möglicherweise erforderlich sind. Sie verwenden gdisk, um GPT-Partitionen zu sortieren oder andere Änderungen vorzunehmen. Es gibt auch keine Möglichkeit, die Komprimierung zu deaktivieren (oder es gibt einen Schalter dafür, aber der funktioniert nicht). Außerdem wird dieses Skript automatisch generiert und Sie können es nicht ändern, um es ein wenig intelligenter zu machen. Verwenden Sie beispielsweise search.label, um die benötigte Grub-Partition anstelle von festen Partitionsnummern zu finden. Sie können teilweise nur das Grub-Setup erneut ausführen und hoffen, dass alles für den Bootvorgang richtig ist.
Hinweis: Seltsamerweise sind die Dinge bei der Verwendung von EFI offener und benutzerfreundlicher für eine schnelle Anpassung.
Leider bin ich immer noch dabei, zu erforschen, wie 'grub-install' funktioniert. Momentan spiele ich mit Kuriositäten herum, wie es mitsdaobwohl ich ausdrücklich angebe, dass es verwendet werden sollsdb.
Ich werde diesen Beitrag vielleicht später bearbeiten, wenn ich mehr darüber erfahren habe. EDIT: Okay, los geht’s. So gelingt das „Unmögliche“:
nano /mnt/boot/grub/i386-pc/load.cfg
seit
search.fs_uuid 39ff90d3-00b1-4cb9-8b94-03a7a9053352 root hd0,gpt6
set prefix=($root)'/mnt/boot/grub'
ist Mist und nicht das, was ich brauche. Ich ändere es in:
search.fs_label boot root hd0,gpt5
set prefix=($root)/grub
wow, das sieht besser aus. :) ... jetzt „core.img“ generieren …:
grub-mkimage -O i386-pc -o /mnt/boot/grub/i386-pc/core.img -C none \
--prefix /grub -c /mnt/boot/grub/i386-pc/load.cfg \
ext2 ntfs part_gpt biosdisk search_label normal
Hinweis: Neben ntfs habe ich für mehr Komfort in der Rettungskonsole auch das Modul „normal“ hinzugefügt. Jetzt funktioniert die Tabulatortaste zum Abschließen eines Befehls sowie die Cursortaste nach oben und unten zum Scrollen im Befehlsverlauf.
Und wie bereits erwähnt --Compression none
hat dies derzeit keine Auswirkungen. Core.img wird immer mit xz komprimiert.
... und schreiben Sie es auf die Festplatte:
grub-bios-setup -v -f -d /mnt/boot/grub/i386-pc /dev/sdb
Von welcher Partition aus gestartet wird, hängt also davon ab, was in grub.cfg geschrieben steht und natürlich davon, welche Benutzer zum Booten ausgewählt haben.
Erstellen von grub.cfg
Mounten Sie Ihr Linux-System in /mnt/MINT und führen Sie dann Folgendes aus:
grub-mkconfig -o /mnt/MINT/boot/grub/grub.cfg
Hinzufügen von UEFI-Unterstützung
Vorbereitung: Fügen Sie mit Gparted eine 1 MB große FAT32-Partition hinzu und stellen Sie den Typ auf „ef00 EFI-Systempartition“ ein. Ich verwende
sgdisk -t 11:ef00 /dev/sdb
^-, um die 11. Partition als ef00 => „EFI-Systempartition“ zu markieren.
gdisk -l /dev/sdb
um das Ergebnis zu überprüfen. Meistens gibt es jedoch bereits eine „EFI-Systempartition“. Verwenden Sie in diesem Fall einfach diese, anstatt eine zusätzliche zu erstellen.
Die „EFI-Systempartition“ speichert grubx64.efi, das später vom EFI-BIOS geladen und ausgeführt wird.Beachten Sie, dass EFI-Bios standardmäßig sowohl GPT als auch FAT32 lesen kann. Jetzt montieren
/mnt/boot -> Linux System containing grub.cfg
/mnt/UEFI -> The 'EFI system partition'
Führen Sie nun grub-install aus:
sudo grub-install --boot-directory=/mnt/boot \
--efi-directory=/mnt/UEFI --target=x86_64-efi /dev/sdb -v
Es hat sich nicht viel geändert. Nun, --force wird nicht mehr benötigt, es gibt ein anderes --target und es werden zusätzliche Argumente benötigt --efi-directory