GRUB 2: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
K (YaST: boot loader)
K (Default bei OpenSUSE schon in Release 12.2)
Zeile 4: Zeile 4:
  
 
=Abgrenzung zu 'GRUB Legacy'=
 
=Abgrenzung zu 'GRUB Legacy'=
''GRUB 2'' ist eine vollständige Neuentwicklung des alten [[GRUB Legacy]]. Seit 2009 wird es in größeren Distributionen als Standard eingeführt, [[OpenSUSE]] beispielsweise vollführte diesen Schritt mit Release 12.3 im Frühjar 2013.
+
''GRUB 2'' ist eine vollständige Neuentwicklung des alten [[GRUB Legacy]]. Seit 2009 wird es in größeren Distributionen als Standard eingeführt, [[OpenSUSE]] beispielsweise vollführte diesen Schritt mit Release 12.2 im Herbst 2012.
  
 
Um eine Reihe neuer Funktionalitäten anbieten zu können, haben sich die Entwickler für eine radikale Neu-Implementierung entschieden. Es gibt dementsprechend bis auf den Namen kaum Gemeinsamkeiten und bewusst wurde auf '''Kompatibilität zum Vorgänger verzichtet'''.
 
Um eine Reihe neuer Funktionalitäten anbieten zu können, haben sich die Entwickler für eine radikale Neu-Implementierung entschieden. Es gibt dementsprechend bis auf den Namen kaum Gemeinsamkeiten und bewusst wurde auf '''Kompatibilität zum Vorgänger verzichtet'''.

Version vom 29. November 2013, 15:27 Uhr

Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.

--Gehrke (Diskussion) 22:26, 27. Nov. 2013 (CET)

GNU GRUB (GRand Unified Bootloader)

Abgrenzung zu 'GRUB Legacy'

GRUB 2 ist eine vollständige Neuentwicklung des alten GRUB Legacy. Seit 2009 wird es in größeren Distributionen als Standard eingeführt, OpenSUSE beispielsweise vollführte diesen Schritt mit Release 12.2 im Herbst 2012.

Um eine Reihe neuer Funktionalitäten anbieten zu können, haben sich die Entwickler für eine radikale Neu-Implementierung entschieden. Es gibt dementsprechend bis auf den Namen kaum Gemeinsamkeiten und bewusst wurde auf Kompatibilität zum Vorgänger verzichtet.

Erweiterte Funktionalitäten

  • Unterstützung von mehr Dateisystemen wie beispielsweise ext4, HFS+, NTFS (vollständige Liste)
  • Direkter Zugriff auf LVM und RAID-Devices möglich
  • Steuerung über ein graphisches Terminal und graphisches Menüsystem gegeben
  • Mehrsprachigkeit inklusive der Einträge
  • Zusätzliche Unterstützung für weitere Systemsoftware neben PC BIOS: PC EFI, PC coreboot, PowerPC, SPARC, MIPS Lemote Yeeloong
  • Support für Boot via Netzwerk über tftp (PXE?)
  • <Was ist mit crypted Devices?!?>

<ToDo>

Unterschiede zu 'GRUB Legacy'

An dieser Stelle werden die Unterschiede zu GRUB Legacy hervorgehoben:

  • In Grub 2 existiert die stufenweise Reihenfolge in den Einzelphasen ('Stage 1', 'Stage 1.5', 'Stage 2') nicht mehr.
  • In der Konfiguration werden Partitionen ebenfalls über Zahlen adressiert, aber die Nummerierung beginnt mit 1 (und nicht 0).
  • Hinweis: Das gilt aber nur für Partitionen, nicht für Festplatten. Festplatten werden mit 'hdX' benannt und X beginnt bei 0!
  • Die Konfiguration wurde komplett umgestellt. Wo früher eine einzelne Datei (menu.lst) zu editieren war, gibt es heute ein komplettes Konfigurationssystem aus vielen Dateien mit eigener Struktur und eigenem Build-System, welches die eigentlichen Konfigurationsdateien generiert (s. #Konfiguration).

<ToDo>

Installation

Analog zum Vorgänger wird zur Installation das Script 'grub-install' verwendet. Als Parameter wird das Ziel-Device angegeben (im Beispiel die erste Festplatte 'sda'):

# grub-install /dev/sda
Installation finished. No error reported.

<ToDo>

Konfiguration

<ToDo>

Boot-Einträge manuell ändern

Manchmal will oder kann man nicht das komplette Setup von GRUB persistent ändern. Wenn das System beispielsweise infolge von Konfigurationsfehlern gar nicht mehr bootet oder der komplette Konfigurationszyklus zu lange dauert oder schlicht etwas ausprobiert werden soll, dann macht es Sinn, die Einträge manuell zu editieren.

Dies kann erreicht werden durch Drücken von 'E' während der Anzeige des Boot-Menüs. Die zu diesem Zeitpunkt selektierte Zeile wird dann in einen kleinen Editor geladen und kann dort überarbeitet werden. Mit der Tastenkombination <Strg>-<X> wird der geänderte Eintrag dann gestartet.

Die auf diesem Wege durchgeführten Änderungen sind nicht persistent.

YaST: boot loader

OpenSUSE-typisch kann man einige Einstellungen auch in der Systemverwaltung YaST unter System / boot loader vornehmen.

Default-Konfiguration: /etc/default/grub

Globale Grundeinstellungen (Timeout, Standard-Eintrag, Layout...) werden hier definiert.

Buildsystem: /etc/grub.d

Das Buildsystem ist eine Sammlung von Scripten. Ein Nummernpräfix sorgt für eine Abfolge in definierter Reihenfolge (bei '00' beginnend):

# ls -l /etc/grub.d
-rwxr-xr-x 1 root root  7649 Jul 31 11:48 00_header
-rwxr-xr-x 1 root root 10535 Jul 31 11:48 10_linux
-rwxr-xr-x 1 root root 11019 Jul 31 11:48 20_linux_xen
-rwxr-xr-x 1 root root  1802 Jul 31 11:49 20_memtest86+
-rwxr-xr-x 1 root root  2596 Jul 31 11:48 20_ppc_terminfo
-rwxr-xr-x 1 root root 10132 Jul 31 11:48 30_os-prober
-rwxr-xr-x 1 root root   489 Jul 11 15:04 40_custom
-rwxr-xr-x 1 root root   216 Jul 31 11:48 41_custom
-rwxr-xr-x 1 root root  1259 Jul 31 11:49 90_persistent
-rw-r--r-- 1 root root   483 Jul 31 11:48 README

Dieses Beispiel stammt aus einer OpenSUSE-Installation (Release 12.3). Andere Distribution liefern geringfügig andere Scripten aus. Es können diesem Schema entsprechend auch eigene Scripte hinzugefügt werden.

Bedeutung der Standard-Scripten:

  • 00_header: Initialisierung des Systems anhand der Einträge in /etc/default/grub (Default-Konfiguration).
  • 10_linux: Hier wird versucht, alle validen Kernel zu finden. Aus diesen wird dann das Bootmenü generiert.
  • 20_linux_xen: <ToDo>
  • 20_memtest86+: Aufnahme von memtest in das Bootmenü.
  • 20_ppc_terminfo: <ToDo>
  • 30_os-prober: Suche nach weiteren Bootladern sowie weiteren installierten Betriebssystemen. In einem Multi-Boot-Kontext werden hier Einträge beispielsweise für Windows oder parallele Linux-Installationen generiert.
  • 40_custom: Eigene Booteinträge können hier manuell hinterlegt werden.
  • 41_custom: Einbindung der Datei /boot/grub/custom.cfg
  • 90_persistent: <ToDo>


<ToDo>

Module laden

GRUB 2 bietet direkten Zugriff auf bestimmte Ressourcen wie beispielsweise LVM, RAID oder diverse Dateisysteme. Dieser Zugriff wird über Module implementiert, welche per 'insmod' bei Bedarf geladen werden können.

Unter OpenSUSE liegen diese Module (architekturabhängig) unter:

# tree -d /usr/lib/grub2/
/usr/lib/grub2/
├── i386-pc
└── x86_64-efi

Verfügbare Module (nur x86_64-efi):

 # ls -r --format=commas *.mod
zfsinfo.mod, zfscrypt.mod, zfs.mod, xzio.mod, xnu_uuid.mod, xnu.mod, xfs.mod, videotest.mod, videoinfo.mod, video_fb.mod, video_cirrus.mod, video_bochs.mod, video.mod,
usbtest.mod, usbserial_pl2303.mod, usbserial_ftdi.mod, usbserial_common.mod, usbms.mod, usb_keyboard.mod, usb.mod, uhci.mod, ufs2.mod, ufs1.mod, udf.mod, true.mod, trig.mod,
time.mod, tga.mod, tftp.mod, testload.mod, test_blockarg.mod, test.mod, terminfo.mod, terminal.mod, tar.mod, squash4.mod, sleep.mod, sfs.mod, setpci.mod, setjmp.mod,
serial.mod, search_label.mod, search_fs_uuid.mod, search_fs_file.mod, search.mod, scsi.mod, romfs.mod, relocator.mod, reiserfs.mod, regexp.mod, reboot.mod, read.mod,
raid6rec.mod, raid5rec.mod, probe.mod, priority_queue.mod, png.mod, play.mod, pbkdf2.mod, pata.mod, password_pbkdf2.mod, password.mod, parttool.mod, part_sunpc.mod,
part_sun.mod, part_plan.mod, part_msdos.mod, part_gpt.mod, part_dvh.mod, part_bsd.mod, part_apple.mod, part_amiga.mod, part_acorn.mod, ohci.mod, odc.mod, ntfscomp.mod,
ntfs.mod, normal.mod, nilfs2.mod, newc.mod, net.mod, multiboot2.mod, multiboot.mod, msdospart.mod, mmap.mod, minix_be.mod, minix3_be.mod, minix3.mod, minix2_be.mod, minix2.mod,
minix.mod, minicmd.mod, memrw.mod, memdisk.mod, mdraid1x.mod, mdraid09_be.mod, mdraid09.mod, lzopio.mod, lvm.mod, luks.mod, lssal.mod, lspci.mod, lsmmap.mod, lsefisystab.mod,
lsefimmap.mod, lsacpi.mod, ls.mod, loopback.mod, loadenv.mod, loadbios.mod, linuxefi.mod, linux.mod, ldm.mod, keystatus.mod, keylayouts.mod, jpeg.mod, jfs.mod, iso9660.mod,
iorw.mod, http.mod, hfsplus.mod, hfs.mod, hexdump.mod, help.mod, hello.mod, hdparm.mod, hashsum.mod, halt.mod, gzio.mod, gptsync.mod, gfxterm.mod, gfxmenu.mod, gettext.mod,
geli.mod, gcry_whirlpool.mod, gcry_twofish.mod, gcry_tiger.mod, gcry_sha512.mod, gcry_sha256.mod, gcry_sha1.mod, gcry_serpent.mod, gcry_seed.mod, gcry_rmd160.mod,
gcry_rijndael.mod, gcry_rfc2268.mod, gcry_md5.mod, gcry_md4.mod, gcry_des.mod, gcry_crc.mod, gcry_cast5.mod, gcry_camellia.mod, gcry_blowfish.mod, gcry_arcfour.mod,
functional_test.mod, fshelp.mod, font.mod, fixvideo.mod, fat.mod, extcmd.mod, ext2.mod, exfctest.mod, exfat.mod, elf.mod, ehci.mod, efinet.mod, efi_uga.mod, efi_gop.mod,
echo.mod, dm_nv.mod, diskfilter.mod, datetime.mod, datehook.mod, date.mod, cs5536.mod, cryptodisk.mod, crypto.mod, crc64.mod, cpuid.mod, cpio_be.mod, cpio.mod, configfile.mod,
cmp.mod, chain.mod, cat.mod, bufio.mod, btrfs.mod, bsd.mod, boot.mod, blocklist.mod, bitmap_scale.mod, bitmap.mod, bfs.mod, backtrace.mod, ata.mod, at_keyboard.mod,
appleldr.mod, aout.mod, all_video.mod, ahci.mod, afs.mod, affs.mod, adler32.mod, acpi.mod

<ToDo>

Konfigurationsdatei: /boot/grub2/grub.cfg

Dies ist die Hauptkonfigurationsdatei, welche wie oben beschrieben aber nicht manuell editiert werden darf, weil sie vom Buildsystem generiert wird!

<ToDo>

Konfiguration neu generieren

Um Konfigurationsänderungen zu aktivieren, muss abschließend das Kommando 'update-grub' aufgerufen werden. Bei erfolgreicher Abarbeitung wird die Hauptkonfigurationsdatei neu generiert.

Unter openSUSE gibt es eine Sonderlösung:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found theme: /boot/grub2/themes/openSUSE/theme.txt
Found linux image: /boot/vmlinuz-3.11.6-4-desktop
Found initrd image: /boot/initrd-3.11.6-4-desktop
Found linux image: /boot/vmlinuz-3.7.10-1.16-desktop
Found initrd image: /boot/initrd-3.7.10-1.16-desktop
Found openSUSE 12.3 (x86_64) on /dev/mapper/system-os2
done

<ToDo>

Anwendungsfälle

An dieser Stelle sollen Anleitungen zu ausgesuchten Anwendungsfällen aufgezeigt werden.

<TODO: später auslagern>

Anwendungsfall: Standardeintrag ändern

Es gibt zwei Möglichkeiten, den Standardeintrag zu verändern, um beim unbeaufsichtigten Starten ein bestimmtes System vorauszuwählen.

Änderung des Indexes 'n' in /boot/grub2/grub.cfg

GRUB_DEFAULT=n

Das hat den Nachteil, dass bei einer geänderten Reihenfolge möglicherweise das falsche System vorbelegt ist.

Im Anschluss muss der Prozess Konfiguration neu generieren durchgeführt werden.

Änderung über den Namen 'menuentry' (GRUB_DEFAULT=saved)

Wenn die Option 'GRUB_DEFAULT=saved' gesetzt ist, dann kann die Vorauswahl über den Namen in einer separaten Konfigurationsdatei getroffen werden.

Beispiel: Änderung auf einen selbst erzeugten Eintrag (CUSTOM).

Vorher:

# grep 'GRUB_DEFAULT=' /etc/default/grub
GRUB_DEFAULT=saved

# cat /boot/grub2/grubenv
# GRUB Environment Block
saved_entry=openSUSE

Welche Einträge sind vorhanden?

# grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2
openSUSE 13.1
openSUSE 12.3 (x86_64) (on /dev/mapper/system-os2)
openSUSE 12.3 CUSTOM (x86_64) (auf /dev/mapper/system-os2)

Hinweis: Der letzte wurde manuell hinzugefügt. Dieser soll als Default ausgewählt werden.

# grub2-set-default "openSUSE 12.3 CUSTOM (x86_64) (auf /dev/mapper/system-os2)"

Überprüfung:

# grub2-editenv list
saved_entry=openSUSE 12.3 CUSTOM (x86_64) (auf /dev/mapper/system-os2)

Vorteil: Eine Änderung der Reihenfolge hat keinen Einfluss auf die Vorbelegung.

In diesem Fall ist es nicht notwendig, den Prozess Konfiguration neu generieren durchzuführen.

Links