GRUB: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
K (grub-customizer hinzugefügt)
(38 dazwischenliegende Versionen von 12 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{righttoc}}
{{righttoc}}


'''GRUB2''' ist die nächste Generation des ''GRand Unified Bootloaders'' ([[GRUB]]) und stellt eine komplette Neuentwicklung dar, an der aktiv gearbeitet wird.  
'''GRUB ab Version 2''' ist die nächste Generation des ''GRand Unified Bootloaders'' (GRUB-legacy) und stellt eine komplette Neuentwicklung dar, an der aktiv gearbeitet wird.<br>
Die ältere Version des GRUB Bootloaders wird GRUB-legacy genannt.  


== Upgrade ==


== Upgrade ==
Um ein Upgrade von GRUB-legacy auf GRUB durchzuführen, kann man wie folgt vorgehen:


Um GRUB auf GRUB2 upzugraden, gehen wir folgendermassen vor:
Zuerst sichern der aktuellen GRUB Konfiguration:


Zuerst wird das GRUB2 Paket mit [[pacman]] installiert:
cp /boot/grub/menu.lst /tmp


pacman -S grub2
Dann installieren des GRUB Paketes:


Hinweis: Es wird angenommen, dass sich GRUB bereits lauffähig auf /dev/sda befindet !
pacman -S grub


Dann installieren wir GRUB2 in den MBR:
Es wird eine Meldung angezeigt:
grub-common und grub stehen miteinander in Konflikt. grub entfernen? [j/n] j
Antwort mit j<br>
grub-legacy wird deinstalliert und grub wird installiert.<br>
Anschließend GRUB in den MBR installieren:


  grub-install /dev/sda
  grub-install /dev/sda


Abschliessend konvertieren wir unsere alte GRUB Konfiguration ins neue GRUB2 Format:
Konvertieren der alten GRUB-legacy Konfiguration ins neue GRUB Format:
grub-menulst2cfg /tmp/menu.lst /boot/grub/grub.cfg
Theoretisch ist man jetzt fertig - es kann neu gebootet werden. Praktisch sollte auf jeden Fall aber noch ein Blick auf die neue Konfiguration geworfen werden, um sie ggf. zu ändern:


  grub-menulst2cfg /boot/grub/menu.lst.pacsave /boot/grub/grub.cfg
  nano /boot/grub/grub.cfg
 
Fertig - wir können rebooten oder gegebenenfalls die neue Konfiguration noch anpassen mit:


nano /boot/grub/grub.cfg
Z.B. musste bei mir in der Zeile mit legacy_initrd der Eintrag 'systemd' durch '/bin/systemd' ersetzt werden.


Eine detaillierte Konfiguration von GRUB2 wird weiter unten beschrieben.
Eine detaillierte Konfiguration von GRUB wird weiter unten beschrieben.


Eine frische Installation von GRUB2 ohne bereits bestehendem GRUB wird im Teil "Installation" beschrieben.
Eine frische Installation von GRUB ohne bereits bestehendem GRUB wird im Teil "Installation" beschrieben.<br>
<br>


== Installation ==
== Installation ==
Falls man eine gpt Partitionstabelle bevorzugt, so kann man GRUB benutzen. Genaueres hier:  [[gpt]]<br>
Zuerst wird das GRUB-Paket installiert


Zuerst wird GRUB2 mit [[pacman]] installiert
pacman -S grub


pacman -S grub2
Wenn weitere Betriebssysteme auf dem PC vorhanden sind, z.B. Windows, empfiehlt es sich, [https://www.archlinux.de/?page=PackageDetails;repo=community;arch=i686;pkgname=os-prober os-prober] gleich mitzuinstallieren.
Dann werden für die anderen Betriebssysteme die Start-Einträge gleich mitgeneriert.


und dann in den MBR (Master Boot Record) geschrieben
Dann wird grub in den MBR (Master Boot Record) geschrieben.


  grub-install /dev/sda
  grub-install /dev/sda
Zeile 42: Zeile 52:
== Konfiguration ==
== Konfiguration ==


GRUB2 nutzt nun die Datei ''/boot/grub/grub.cfg'' als Konfigurationsdatei. Dabei ist darauf zu achten, dass GRUB2 die Festplatten anders als Linux und [[GRUB]] benennt:
Die grub.cfg ist die Konfigurations-Datei, die GRUB beim Starten verwendet.
 
Wenn man grafische Tools wie
*[http://pkgbuild.com/git/aur-mirror.git/tree/grub2-editor grub2-editor] (AUR Archiv)
*{{AUR|startupmanager}}
*{{AUR|grub-customizer}}
verwenden möchte, muss die automatische Generierung (s.u.) gewählt werden.
 
Sonst kann die grub.cfg auch Manuell erstellt werden, was zu einer deutlich übersichtlicheren grub.cfg führt.
 
=== Automatisch generierte grub.cfg ===
 
Man kann die grub.cfg mit folgendem Befehl automatisch generieren lassen.
 
grub-mkconfig -o /boot/grub/grub.cfg
 
 
 
Wenn dennoch einige Werte angepasst werden sollen, so geht das in der /etc/default/grub
 
Kernel Parameter können z.B. bei
 
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
 
oder
 
  GRUB_CMDLINE_LINUX="loglevel=3"
 
angegeben werden. Danach ist grub-mkconfig erneut wie oben angegeben aufzurufen.
 
==== Windows ====
 
Wenn [https://www.archlinux.de/?page=PackageDetails;repo=community;arch=i686;pkgname=os-prober os-prober] installiert ist, sollten Windows Installationen beim automatischen Generieren berücksichtigt werden.
 
 
Falls man aber doch manuell erstellte Einträge benötigt, so wird dafür die


Die '''erste''' Partition der '''ersten''' Festplatte ist '''(hd0,1)''', die '''zweite''' Partition '''(hd0,2)''' und die '''erste''' Partition auf der '''zweiten''' Festplatte '''(hd1,1)''' usw..
/etc/grub.d/40_custom


=== Allgemeine Konfiguration ===
verwendet.
 
=== Manuell erstellte grub.cfg ===
 
GRUB nutzt nun die Datei ''/boot/grub/grub.cfg'' als Konfigurationsdatei. Dabei ist darauf zu achten, dass GRUB die Festplatten anders als Linux und GRUB-legacy benennt:
 
Es bezeichnet die Partitionen mit ''(hdX,Y)'', dabei ist
 
* X die Nummer der Festplatte, beginnend bei 0, und
* Y die Zählnummer der Partition, beginnend bei 1.
 
Die '''erste''' Partition der '''ersten''' Festplatte ist also '''(hd0,1)''', die '''zweite''' Partition '''(hd0,2)''' und die '''erste''' Partition auf der '''zweiten''' Festplatte '''(hd1,1)''' usw..
 
==== Allgemeine Konfiguration ====


  set default=<Nummer_des_Eintrags>
  set default=<Nummer_des_Eintrags>


Dieser Eintrag wird automatisch geladen. (GRUB2 beginnt bei 0!)
Dieser Eintrag wird automatisch geladen. (GRUB beginnt bei 0!)


  set timeout=<Zeit_in_Sekunden>
  set timeout=<Zeit_in_Sekunden>
Zeile 60: Zeile 118:
Alle Befehle innerhalb der geschweiften Klammer beziehen sich auf diesen Eintrag, der im Menü mit dem hier angegebenen Titel angezeigt wird.
Alle Befehle innerhalb der geschweiften Klammer beziehen sich auf diesen Eintrag, der im Menü mit dem hier angegebenen Titel angezeigt wird.


=== Linux ===
==== Linux ====


  set root=<Partition>
  set root=<Partition>
Zeile 72: Zeile 130:
  initrd <Pfad>
  initrd <Pfad>


Pfandangabe zur Ramdisk. (Wenn eine "boot"-Partition verwendet wird liegt die Ramdisk in "/"!)
Pfadangabe zur Ramdisk. (Wenn eine "boot"-Partition verwendet wird liegt die Ramdisk in "/"!)


{{Hinweis|Der Parameter '''vga''' des Linux Kernels wird von Grub2 nicht mehr unterstüzt. Statt dessen muss der Befehl '''gfxpayload''' verwendet werden.}}
{{Hinweis|Der Parameter '''vga''' des Linux Kernels wird von GRUB nicht mehr unterstüzt. Statt dessen muss der Befehl '''gfxpayload''' verwendet werden.}}


  gfxpayload <resolution>
  gfxpayload <resolution>
Zeile 80: Zeile 138:
Angabe der Auflösung des Linux Framebuffers. Beispiel: 1024x768x32.
Angabe der Auflösung des Linux Framebuffers. Beispiel: 1024x768x32.


Damit dieser Befehl funktioniert, muss noch das Grub2-Modul ''vbe'' in der allgemeinen Konfiguration geladen werden.
Damit dieser Befehl funktioniert, muss noch das GRUB-Modul ''vbe'' in der allgemeinen Konfiguration geladen werden.


  insmod vbe
  insmod vbe


=== Windows/Chainloading ===
==== Windows/Chainloading ====


GRUB2 bietet die Möglichkeit, Bootloader anderer Betriebssysteme zu starten (Chainloading). Dies ist bei Windows der Fall, das seinen Bootloader in den Partition Boot Record, den Bootsector einer Partition, im Regelfall (hd0,1).
GRUB bietet die Möglichkeit, Bootloader anderer Betriebssysteme zu starten (Chainloading). Dies ist bei Windows der Fall, das seinen Bootloader in den Partition Boot Record, den Bootsector einer Partition, im Regelfall (hd0,1) beinhaltet.


  set root=<Partition>
  set root=<Partition>


GRUB2 verwendet hier im Gegensatz zu GRUB den gleichen Befehl zum Festlegen der Partition.
GRUB verwendet hier im Gegensatz zu GRUB-legacy den gleichen Befehl zum Festlegen der Partition.


  chainloader +1
  chainloader +1


Damit wird bewirkt, dass der Bootsector der Partition geladen wird.
Damit wird bewirkt, dass der Bootsektor der Partition geladen wird.


=== Beispieldatei ===
==== Beispieldatei ====


  # Config file for GRUB2 - The GNU GRand Unified Bootloader
  # Config file for GRUB - The GNU GRand Unified Bootloader
  # /boot/grub/grub.cfg
  # /boot/grub/grub.cfg
   
   
Zeile 120: Zeile 178:
  set root=(hd0,2)
  set root=(hd0,2)
  gfxpayload=1024x768x32
  gfxpayload=1024x768x32
  linux /boot/vmlinuz-linux root=/dev/sda2 ro
  linux /boot/vmlinuz-linux root=/dev/sda2 init=/usr/lib/systemd/systemd rw
  initrd /boot/initramfs-linux.img
  initrd /boot/initramfs-linux.img
  }
  }
Zeile 129: Zeile 187:
  }
  }


==Grub2 Bootcd erstellen==
==Grub Bootcd erstellen==
Paket libisoburn installieren. (Wird zum Erstellen der isodatei benötigt)
Paket libisoburn installieren. (Wird zum Erstellen der isodatei benötigt)


Zeile 137: Zeile 195:
Darin die Datei grub.cfg kopieren.
Darin die Datei grub.cfg kopieren.


Es müssen noch einige Module mit in die grub.cfg eingetragen werden je nachdem was für ein Dateisystem benutzt ist:
Es müssen noch einige Module mit in die grub.cfg eingetragen werden je nachdem was für ein Dateisystem und Partitionstabellentyp benutzt wird:


  insmod vbe
  insmod vbe
Zeile 153: Zeile 211:
Bootcd testen.
Bootcd testen.


==Grub2 auf einer seperaten Bootloader Partition installieren==
==Grub auf einer separaten Bootloader Partition installieren==
Manchmal ist es sinnvoll den Bootmanager auf einer seperaten Bootloader Partition zu installieren. Die Anwendung wäre interessant für Benutzer mit mehreren Betriebssystemen von denen der Bootloader unabhängig sein soll.
Manchmal ist es sinnvoll den Bootmanager auf einer separaten Bootloader Partition zu installieren. Die Anwendung wäre interessant für Benutzer mit mehreren Betriebssystemen von denen der Bootloader unabhängig sein soll.


Die Partition kann eine Größe von 16MB haben.
Die Partition kann eine Größe von 16MB haben.
Als Beispiel wäre die Partition für den Bootloader auf /mnt/Bootpart gemountet.
Als Beispiel wäre die Partition für den Bootloader auf /mnt/Bootpart gemountet.


Installieren des grub2 auf die seperate Partition und schreiben des MBR:
Installieren des GRUB auf die separate Partition und schreiben des MBR:
  grub-install --no-floppy --root-directory=/mnt/Bootpart /dev/sda
  grub-install --no-floppy --root-directory=/mnt/Bootpart /dev/sda


Zeile 171: Zeile 229:
  reboot
  reboot


== msdos-style Fehlermeldung ==
Startet die erste Partition direkt hinter dem MBR (Sektor 63), also ohne das notwendige eine MiB Abstand (Sektor 2048) vor der ersten Partition (z.B. durch die Nutzung von cfdisk zum [[Partitionierung|Partitionieren]]), kann bei der Installation von GRUB in einen VMware-Container folgende Fehlermeldung auftreten:
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible!
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.
            However, blocklists are UNRELIABLE and its use is discouraged.
grub-setup: error: If you really want blocklists, use --force.
Siehe auch [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 diesen Thread] {{sprache|en}}
==Siehe auch==
==Siehe auch==
 
* [[gpt]]
* [[GRUB]]


== Weblinks ==
== Weblinks ==


* [http://www.gnu.org/software/grub GRUB2 Homepage] {{sprache|en}}
* [http://www.gnu.org/software/grub GRUB2 Homepage] {{sprache|en}}
* [http://grub.enbug.org/ GRUB2 Wiki] {{sprache|en}}


[[Kategorie:Bootloader]]
[[Kategorie:Bootloader]]


[[en:GRUB2]]
[[en:GRUB2]]

Version vom 15. Dezember 2015, 17:41 Uhr

GRUB ab Version 2 ist die nächste Generation des GRand Unified Bootloaders (GRUB-legacy) und stellt eine komplette Neuentwicklung dar, an der aktiv gearbeitet wird.
Die ältere Version des GRUB Bootloaders wird GRUB-legacy genannt.

Upgrade

Um ein Upgrade von GRUB-legacy auf GRUB durchzuführen, kann man wie folgt vorgehen:

Zuerst sichern der aktuellen GRUB Konfiguration:

cp /boot/grub/menu.lst /tmp

Dann installieren des GRUB Paketes:

pacman -S grub

Es wird eine Meldung angezeigt:

grub-common und grub stehen miteinander in Konflikt. grub entfernen? [j/n] j

Antwort mit j
grub-legacy wird deinstalliert und grub wird installiert.
Anschließend GRUB in den MBR installieren:

grub-install /dev/sda

Konvertieren der alten GRUB-legacy Konfiguration ins neue GRUB Format:

grub-menulst2cfg /tmp/menu.lst /boot/grub/grub.cfg

Theoretisch ist man jetzt fertig - es kann neu gebootet werden. Praktisch sollte auf jeden Fall aber noch ein Blick auf die neue Konfiguration geworfen werden, um sie ggf. zu ändern:

nano /boot/grub/grub.cfg

Z.B. musste bei mir in der Zeile mit legacy_initrd der Eintrag 'systemd' durch '/bin/systemd' ersetzt werden.

Eine detaillierte Konfiguration von GRUB wird weiter unten beschrieben.

Eine frische Installation von GRUB ohne bereits bestehendem GRUB wird im Teil "Installation" beschrieben.

Installation

Falls man eine gpt Partitionstabelle bevorzugt, so kann man GRUB benutzen. Genaueres hier: gpt
Zuerst wird das GRUB-Paket installiert

pacman -S grub

Wenn weitere Betriebssysteme auf dem PC vorhanden sind, z.B. Windows, empfiehlt es sich, os-prober gleich mitzuinstallieren. Dann werden für die anderen Betriebssysteme die Start-Einträge gleich mitgeneriert.

Dann wird grub in den MBR (Master Boot Record) geschrieben.

grub-install /dev/sda

Konfiguration

Die grub.cfg ist die Konfigurations-Datei, die GRUB beim Starten verwendet.

Wenn man grafische Tools wie

verwenden möchte, muss die automatische Generierung (s.u.) gewählt werden.

Sonst kann die grub.cfg auch Manuell erstellt werden, was zu einer deutlich übersichtlicheren grub.cfg führt.

Automatisch generierte grub.cfg

Man kann die grub.cfg mit folgendem Befehl automatisch generieren lassen.

grub-mkconfig -o /boot/grub/grub.cfg


Wenn dennoch einige Werte angepasst werden sollen, so geht das in der /etc/default/grub

Kernel Parameter können z.B. bei

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

oder

 GRUB_CMDLINE_LINUX="loglevel=3"

angegeben werden. Danach ist grub-mkconfig erneut wie oben angegeben aufzurufen.

Windows

Wenn os-prober installiert ist, sollten Windows Installationen beim automatischen Generieren berücksichtigt werden.


Falls man aber doch manuell erstellte Einträge benötigt, so wird dafür die

/etc/grub.d/40_custom

verwendet.

Manuell erstellte grub.cfg

GRUB nutzt nun die Datei /boot/grub/grub.cfg als Konfigurationsdatei. Dabei ist darauf zu achten, dass GRUB die Festplatten anders als Linux und GRUB-legacy benennt:

Es bezeichnet die Partitionen mit (hdX,Y), dabei ist

  • X die Nummer der Festplatte, beginnend bei 0, und
  • Y die Zählnummer der Partition, beginnend bei 1.

Die erste Partition der ersten Festplatte ist also (hd0,1), die zweite Partition (hd0,2) und die erste Partition auf der zweiten Festplatte (hd1,1) usw..

Allgemeine Konfiguration

set default=<Nummer_des_Eintrags>

Dieser Eintrag wird automatisch geladen. (GRUB beginnt bei 0!)

set timeout=<Zeit_in_Sekunden>

Der für "default" angegebene Eintrag wird nach dieser Zeit gestartet.

menuentry "Titel_des_Eintrags" { <Eintrag> }

Alle Befehle innerhalb der geschweiften Klammer beziehen sich auf diesen Eintrag, der im Menü mit dem hier angegebenen Titel angezeigt wird.

Linux

set root=<Partition>

Bezeichnet die Partition, auf der sich das Kernelimage bzw. die Ramdisk befindet.

linux <Pfad_zum_Kernel_und_Parameter>

Pfadangabe zum Linux-Kernel. Dahinter stehen die Parameter der Kernels. (Wenn eine "boot"-Partition verwendet wird liegt der Kernel in "/"!)

initrd <Pfad>

Pfadangabe zur Ramdisk. (Wenn eine "boot"-Partition verwendet wird liegt die Ramdisk in "/"!)

Hinweis: Der Parameter vga des Linux Kernels wird von GRUB nicht mehr unterstüzt. Statt dessen muss der Befehl gfxpayload verwendet werden.

gfxpayload <resolution>

Angabe der Auflösung des Linux Framebuffers. Beispiel: 1024x768x32.

Damit dieser Befehl funktioniert, muss noch das GRUB-Modul vbe in der allgemeinen Konfiguration geladen werden.

insmod vbe

Windows/Chainloading

GRUB bietet die Möglichkeit, Bootloader anderer Betriebssysteme zu starten (Chainloading). Dies ist bei Windows der Fall, das seinen Bootloader in den Partition Boot Record, den Bootsector einer Partition, im Regelfall (hd0,1) beinhaltet.

set root=<Partition>

GRUB verwendet hier im Gegensatz zu GRUB-legacy den gleichen Befehl zum Festlegen der Partition.

chainloader +1

Damit wird bewirkt, dass der Bootsektor der Partition geladen wird.

Beispieldatei

# Config file for GRUB - The GNU GRand Unified Bootloader
# /boot/grub/grub.cfg

# DEVICE NAME CONVERSIONS
#
#  Linux           Grub
# -------------------------
#  /dev/fd0        (fd0)
#  /dev/sda        (hd0)
#  /dev/sdb2       (hd1,2)
#  /dev/sda3       (hd0,3)
#

insmod vbe

set timeout=5

set default=0

menuentry "Arch Linux" {
set root=(hd0,2)
gfxpayload=1024x768x32
linux /boot/vmlinuz-linux root=/dev/sda2 init=/usr/lib/systemd/systemd rw
initrd /boot/initramfs-linux.img
}

menuentry "Windows" {
set root=(hd0,1)
chainloader +1
}

Grub Bootcd erstellen

Paket libisoburn installieren. (Wird zum Erstellen der isodatei benötigt)

Ein Verzeichnis anlegen z.B. : /home/user/zurgrub2iso/boot/grub/i386-pc

Darin die Datei grub.cfg kopieren.

Es müssen noch einige Module mit in die grub.cfg eingetragen werden je nachdem was für ein Dateisystem und Partitionstabellentyp benutzt wird:

insmod vbe
insmod part_msdos
insmod ext2
insmod reiserfs
insmod ntfs

Iso generieren mit:

grub-mkrescue --output=grub2.iso /home/user/zurgrub2iso

Iso brennen:

cdrskin -v dev=/dev/sr0 speed=16 -eject grub2.iso

Bootcd testen.

Grub auf einer separaten Bootloader Partition installieren

Manchmal ist es sinnvoll den Bootmanager auf einer separaten Bootloader Partition zu installieren. Die Anwendung wäre interessant für Benutzer mit mehreren Betriebssystemen von denen der Bootloader unabhängig sein soll.

Die Partition kann eine Größe von 16MB haben. Als Beispiel wäre die Partition für den Bootloader auf /mnt/Bootpart gemountet.

Installieren des GRUB auf die separate Partition und schreiben des MBR:

grub-install --no-floppy --root-directory=/mnt/Bootpart /dev/sda

grub.cfg wie oben ins Verzeichnis /mnt/Bootpart/boot/grub hinzufügen.

device.map in /mnt/Bootpart/boot/grub/ ändern wenn man statt dev-id sda benutzen will.

#(hd0)	/dev/disk/by-id/ata-ST3250318AS_9VY4G2HA
(hd0)	/dev/sda
reboot

msdos-style Fehlermeldung

Startet die erste Partition direkt hinter dem MBR (Sektor 63), also ohne das notwendige eine MiB Abstand (Sektor 2048) vor der ersten Partition (z.B. durch die Nutzung von cfdisk zum Partitionieren), kann bei der Installation von GRUB in einen VMware-Container folgende Fehlermeldung auftreten:

grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding will not be possible!
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.
            However, blocklists are UNRELIABLE and its use is discouraged.
grub-setup: error: If you really want blocklists, use --force.

Siehe auch diesen Thread

Siehe auch

Weblinks