Ubuntu 16.04 Xenial Xerus
Ubuntu 12.04 Precise Pangolin
Dieser Anleitung fehlen noch einige Informationen. Wenn Du etwas verbessern kannst, dann editiere den Beitrag, um die Qualität des Wikis noch weiter zu verbessern.
Anmerkung: Die Analyse bei der Nutzung einer GUID Partition-Table (kurz GPT) kann noch weiter erklärt werden. Die Angaben im Abschnitt GRUB-Version in MBR oder Partitions-Bootsektor ermitteln müssen evtl. angepasst werden.
.
Dieser Artikel beschreibt, wie man aus einem laufenden Ubuntu, einer Desktop-CD oder aber der GRUB 2 Kommandozeile heraus Informationen ermittelt, die für die Behebung oder Beschreibung von Problemen rund um GRUB 2 wichtig sind. Außerdem sind einige der Ausgaben hilfreich, sofern man GRUB 2 richtig manuell konfigurieren will.
Wem das manuelle Zusammentragen der Informationen zu mühselig erscheint, kann dies auch bequem und umfassend von einem Script erledigen lassen.
Die Vorgaben /dev/sdX bzw. /dev/sdXY[4] müssen im Folgenden immer durch die tatsächlichen Bezeichnung der Partitionen ersetzt werden!
Die Befehle zur Versions-Ermittlung müssen im laufenden System ausgeführt werden, um die richtigen Ergebnisse zu liefern. Kann das System nicht mehr gestartet werden, so muss man von einer Desktop-CD aus mittels chroot in das laufende System wechseln [1] und dort den betreffenden Befehl ausführen. Alternativ kann man auch versuchen, das System mit der Super-GRUB2-Disk zu starten.
Mit dem folgenden Befehl im Terminal [2] lässt sich feststellen, ob GRUB Legacy oder GRUB 2 im laufenden System installiert ist:
dpkg --list | grep grub
Befehlsausgabe | Installierte GRUB-Version |
GRand Unified Bootloader | GRUB Legacy (Version 1) |
GRand Unified Bootloader, version 2 | GRUB 2 |
Neben dieser groben Unterscheidung zwischen GRUB Legacy und GRUB 2 wird außerdem auch noch die genaue Paketversion aufgelistet. Beispiel:
1 2 | ii grub-common 1.98+20100804-5ubuntu3 GRand Unified Bootloader, version 2 (common files) ii grub-pc 1.98+20100804-5ubuntu3 GRand Unified Bootloader, version 2 (PC/BIOS version) |
Bevor man sich an die Problemlösung rund um GRUB 2 macht, sollte man sich daher vergewissern, dass man die für das Ubuntu Release neueste Paket-Version von GRUB 2 verwendet. Auch ein Update auf eine Paket-Version eines neueren Ubuntu-Releases ist grundsätzlich möglich.
Andere auf dem System installierte Betriebssysteme werden von GRUB 2 mittels des Paketes os-prober ermittelt. Die aktuell installierte Version erhält man mittels:
dpkg --list | grep os-prober
Die aktuelle GRUB-Konfiguration ist in der Datei /boot/grub/grub.cfg gespeichert und kann mit folgendem Befehl angezeigt werden:
cat /boot/grub/grub.cfg
Um die Konfiguration der GRUB-Menü-Einträge überprüfen zu können, muss man die Bezeichnung und Aufteilung der Festplatten im System kennen. Diese Informationen sind darüber hinaus wichtig, um bei der Installation entscheiden zu können, wohin GRUB 2 installiert werden soll. Damit man die Ausgaben der folgende Befehle richtig interpretieren kann, muss man außerdem verstanden haben, wie Datenträger und Partitionen unter Linux bezeichnet werden[4].
sudo fdisk -lu
Der Befehl zeigt neben der Liste der Partitionen die Start- und Endsektoren der Partitionen an. Das ist hilfreich, wenn man wissen will, wie groß der sog. verborgene Bereich hinter dem MBR und vor der ersten Partition ist. Sehr häufig beginnt die erste Partition bei Sektor Nummer 63, seit Windows-Vista aber auch häufig erst bei Sektor Nummer 2048 (von der Sektorgröße der Festplatte abhängig).
Alternative:
Anstatt mit fdisk kann man sich die Partitionierung der Festplatten im System auch mit parted ausgeben lassen. Das ist insbesondere dann vorzuziehen, wenn eine der Platten im System eine GPT enthält, funktioniert aber natürlich auch bei Platten mit MBR-Partitionstabelle:
sudo parted -l
Die Ausgabe von fdisk -l
bzw. parted -l
gibt keine verlässliche Auskunft über die Reihenfolge der Datenträger im System! Die Position der Datenträger ist bei heutiger Verwendung von externen Speichermedien – wie USB-Sticks und -Festplatten usw. – keinesfalls stets gleichbleibend.
Insbesondere vor der Verwendung der Befehle grub-install und grub-setup sollte man anhand der Auflistung der UUIDs vergleichen, dass der gewählte Datenträger auch tatsächlich die angenommenen Partitionen enthält.
Außerdem ist es zweckmäßig, bei Verwendung mehrerer Datenträger beim Anlegen der Partitionen (genauer: beim Anlegen der Dateisysteme), unterschiedliche Bezeichnungen zu vergeben, die dann das spätere Identifizieren der Datenträger und Partitionen erleichtern.
Der folgende Befehl listet die vorhandenen Partitionen, deren Dateisystem, die Bezeichnung (engl. "label"), den Einhängepunkt (engl. "mount point") sowie die UUID auf:
sudo blkid -o list -w /dev/null
Mehr Informationen finden sich in den Artikeln UUID und blkid. Alternativ kann man auch den Befehl lsblk nutzen, dessen Ausgabe u.U. übersichtlicher wirkt:
sudo lsblk -o name,uuid,fstype,mountpoint,label,size
GRUB 2 installiert, je nach Partitions-Tabellentyp, wesentliche Teile in verschiedene Bereiche. Bei Problemen kann es notwendig sein, diese Bereiche näher zu untersuchen.
Generelle Informationen zum Datenträger und GRUB:
sudo file -s -N -F';' /dev/sd*|egrep 'GR|ID=0xee|data$'| tr -s ';' '\n'
Da weder beim MBR (bzw. der Bereich dahinter) noch bei einer GPT ohne (U)EFI ein Dateisystem vorhanden ist, können die dortigen Informationen nur mittels hexdump
ausgelesen werden.
Man sollte sich von der Verwendung des hexdump
-Befehls und den damit teilweise einhergehenden Ausgaben von Byte-Werten nicht abschrecken lassen. Im wesentlichen geht es nur darum, den Wert eines bestimmten Byte oder einer Folge von Bytes anzeigen zu lassen und diese dann anhand von Tabellen auszuwerten.
Der Wert 512 muss bei allen 3 Befehlen gegebenenfalls dem eigenen System entsprechend angepasst werden (siehe Festplatten-Analyse/Sektoren).
Bei der Nutzung einer GPT ohne (U)EFI wird eine eigene Boot-Partition genutzt. Diese Partition muss die 1. Partition auf dem Datenträger sein, ihre Kennung ist ef02.
Der Wert 512 muss gegebenenfalls dem eigenen System entsprechend angepasst werden (siehe Festplatten-Analyse/Sektoren).
Bei der Nutzung einer GPT mit (U)EFI wird eine eigene Boot-Partition genutzt. Diese Partition kann die 1. Partition auf dem Datenträger sein, ihre Kennung ist ef00.
Die Informationen über die installierte GRUB-Version sind im MBR bzw. Partitions-Bootsektor in den zwei Byte ab Adresse 0x80
abgelegt.
Der folgende Befehl gibt den Wert der beiden Bytes ab Adresse 0x80 aus:
sudo hexdump -v -s 0x80 -n 2 -e '2/1 "%x" "\n"' /dev/sdXY
Dem ausgegeben Wert kann über die folgende Tabelle die entsprechende Boote-Code-Version zugeordnet werden. Die Tabelle stammt aus dem Boot Info Script:
Byte-Wert | MBR bzw. Partitions-Bootsektor deutet auf folgenden Bootcode hin |
GRUB-Byte-Kennungen | |
5272 | GRUB (Legacy) |
aa75 | GRUB (Legacy) |
48b4 | GRUB 2 (Version 1.96) |
7c3c | GRUB 2 (Version 1.97 oder 1.98) |
020 | GRUB 2 (Version 1.99) |
488 | Grub 2 core.img |
31d2 | Grub 2 core.img |
Byte-Kennungen anderer Systeme | |
069 | ISOhybrid (Syslinux 3.72-3.73) |
10f | HP Recovery |
19d | BSD4.4: Fat32 |
211 | Dell Utility: Fat16 |
689 | Syslinux 3.00-3.52 |
734 | Dos_1.0 |
745 | Vista: Fat 32 |
89e | MSDOS5.0: Fat 16 |
8cd | Windows XP |
b60 | Dell Utility: Fat16 |
bd0 | MSWIN4.1: Fat 32 |
e00 | Dell Utility: Fat16 |
fb6 | ISOhybrid mit unterstützter Partitionierung (Syslinux 3.82-3.86) |
2a00 | ReactOS |
2d5e | Dos_1.1 |
31c0 | Syslinux 4.03 oder höher |
3a5e | Recovery:Fat 32 |
407c | ISOhybrid (Syslinux 3.82-4.04) |
4216 | Grub4Dos: NTFS |
4445 | DEll Restore: Fat32 |
55aa | Windows Vista/7 |
55cd | Fat32 |
5626 | Grub4Dos: EXT2/3/4 |
638b | Freedos: FAT32 |
6616 | Fat16 |
696e | Fat16 |
6974 | BootIt: Fat16 |
6f65 | BootIt: Fat16 |
6f6e | MSWIN4.1: Fat 32 |
6f74 | Fat32 |
6f6e | MSWIN4.1: Fat 32 |
74ef | IBM ThinkPad von ca. 2006: bootet versteckte (Typ 0x12) FAT32-Recovery |
7815 | Syslinux 3.53-3.86 oder Fat32 |
7cc6 | MSWIN4.1: Fat 32, Win_98 |
7e1e | Grub4Dos: FAT12/16 |
8a56 | Acronis SZ: Fat32 |
83e1 | ISOhybrid mit unterstützter Partitionierung (Syslinux 4.00-4.04) |
8ec0 | Windows XP |
8ed0 | DEll Recovery: Fat32 |
b106 | Syslinux 4.00-4.02 |
b600 | Dell Utility: FAT16 |
b6c6 | ISOhybrid mit unterstützter Partitionierung (Syslinux 3.81) |
b6d1 | Windows XP: FAT32 |
e2f7 | FAT32, nicht bootbar |
e879 | ISOhybrid (Syslinux 3.74-3.80) |
e9d8 | Windows Vista/7 |
f6f6 | durch fdisk entferntes Betriebssystem |
fa33 | Windows XP |
fbc0 | ISOhybrid (Syslinux 3.81) |
8053 | LILO |
Die ganze Prozedur kann auch mit einem der folgenden Befehle automatisiert werden. Diesen bitte bei Bedarf in das Terminal kopieren:
Die eingehängten Partitionen werden aus der /proc/partitions ausgelesen und in einer for
-Schleife an hexdump
übergeben und der Byte-Wert gelistet:
for d in $(sed -ne 's/^.*\(sd.*\)/\1/p' /proc/partitions);do echo -e "$d\t ID: $(sudo hexdump -v -s 0x80 -n 2 -e '2/1 "%x" "\n"' /dev/$d)";done;echo -e "\t(G1) 5272/aa75 (G2) 48b4/7c3c/020 (Core) 488/31d2"
Beim nächsten Befehl handelt es sich um eine simple Erweiterung des Einzeilers aus dem Skript GRUB finden. Im wesentlichen setzt sich der Befehl aus den Kommandos fdisk
und hexdump
zusammen. Die abschließende case
Anweisung, wertet die hexdump
Ausgabe dann aus, das Ergebnis wird dann mittels echo
im Terminal ausgegeben. xargs
erlaubt es dabei, die zuvor ermittelte Zeichenkette per Variable an den hinter -c
in " "
angegebenen Befehl zu übergeben. Die dazwischen eingebetteten Kommandos egrep
, sed
und awk
dienen dazu, die fdisk
-Ausgabe alleine auf die Zeichenkette der Form /dev/sdXY
zurecht zu schneiden:
sudo fdisk -l 2>/dev/null | egrep "Disk /|/dev/" | sed "s#^/dev/#Part /dev/#" | awk '{print $2}' | sed 's/://' | xargs -n1 -IX sudo sh -c "hexdump -v -s 0x80 -n 2 -e '2/1 \"%x\" \"\\n\"' X | xargs -n1 -IY sh -c \"case \"Y\" in '48b4') echo X: GRUB 2 v1.96 ;; 'aa75' | '5272') echo X: GRUB Legacy ;; '7c3c') echo X: GRUB 2 v1.97 oder v1.98 ;; '020') echo X: GRUB 2 v1.99 ;; *) echo X: Kein GRUB Y ;; esac\""
Mit den Kommandozeilenbefehlen der GRUB-2-Shell lassen sich die für einen erfolgreichen Systemstart erforderlichen Informationen und Einstellungen leicht zusammentragen.
Die in diesem Abschnitt aufgeführten Befehle funktionieren in dieser Form nur in der GRUB 2 Kommandozeile und nicht etwa im Terminal von Ubuntu.
Um ein System erfolgreich von der Kommandozeile starten zu können, ist es sinnvoll, sich zunächst einen Überblick über die von GRUB 2 erkannten Datenträger zu verschaffen. Der dafür wesentliche Befehl ist ls
. Verwendet man ihn zusammen mit der Tabulatortaste
Tab ⇆ , so erlangt man mit wenigen Befehlseingaben eine Liste der zugreifbaren Datenträger und Partitionen:
Datenträger auflisten:
ls
Partitionen auf einer Festplatte auflisten:
ls (hdX,
und Drücken der Tabulatortaste
Tab ⇆ . X
muss dabei durch eine Nummer eines Datenträgers ersetzt werden, die zuvor mit ls
ermittelt wurde.
Grundvoraussetzung für das Starten des Systems ist, dass man den Datenträger kennt, auf dem sich die Startdateien des jeweiligen Betriebssystems befinden. Diese lassen sich mit dem Befehl search -f
auffinden. search
liefert dabei jeweils die GRUB-Bezeichnung des betreffenden Datenträgers als Ergebnis:
Datenträger mit Linux-Startdateien ermitteln:
search -f /vmlinuz
Datenträger mit der Datei grub.cfg finden:
search -f /boot/grub/grub.cfg
Datenträger mit Windows-XP-Startdateien ermitteln:
search -f /ntldr
Datenträger mit Windows-Vista- oder Windows-7-Startdateien ermitteln:
search -f /bootmgr
Um die Startdateien auf einer Windows-Partition suchen zu können, muss das Modul ntfs
installiert sein, welches mit dem Befehl insmod ntfs
eingerichtet werden kann.
Wird eine Datei auf dem Datenträger nicht gefunden, so wird eine Fehlermeldung der Form error: no such device: ...
ausgegeben.
Der Befehl search -f
findet keine Namensteile und unterstützt keine Wildcards. Bei verschlüsselten Systemen müsste man beispielsweise nach
search -f /vmlinuz-4.4.0-45-generic
suchen, da der Link vmlinuz sich nicht auf der unverschlüsselten Boot-Partition befindet.
Man kann aber mit Hilfe des Befehls ls
und Drücken der Tabulatortaste
Tab ⇆ sich den jeweiligen Verzeichnisinhalt anzeigen lassen. Ein
ls (hd0,1)/
gefolgt von 2 x Tab ⇆ zeigt alle vorhandenen Dateien und Verzeichnisse auf /dev/sda1. So kann man auch den kompletten Namen der vmlinuz-Datei ermitteln.
Die den Variablen in der GRUB-2-Umgebung derzeit zugewiesenen Werte können mit Ausführen von
set
überprüft werden. Für den Systemstart sind dabei in erster Linie die Werte von root
und prefix
von Bedeutung. Mit dem Befehl
help
kann man sich eine Liste aller Befehle in der Grub-Shell anzeigen lassen. Mit dem Befehl
pager=1
sorgt man dafür, dass jeweils am Ende einer Bildschirmseite die Ausgabe angehalten wird, so dass die ersten Zeile nicht ungelesen aus dem Bild rollen.
Alle möglichen Informationen rund um das Booten können auch bequem automatisch mittels des Boot Info Scripts zusammengetragen werden.
Das Skript kann aus den universe-Quellen installiert werden: [3]
boot-info-script (universe)
cl-awk (universe, für komplexere Verarbeitungsfähigkeiten)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install boot-info-script cl-awk
sudo aptitude install boot-info-script cl-awk
Gestartet wird die Analyse mit folgendem Befehl: [2]
sudo boot_info_script # Ubuntu 12.04
oder
sudo bootinfoscript # ab Ubuntu 12.10 oder manuelle Installation
Dabei wird im aktuellen Verzeichnis das Ergebnis in einer Datei RESULTS.txt gespeichert. Diese Datei ist gemeint, wenn im Forum
"die Ausgabe des Boot-Info-Scripts im Codeblock posten"
gewünscht wird. Mit Rücksicht auf die smartphone-Nutzer sollte man die Datei besser als Anhang hochladen
wget -P ~/boot-info-script http://sourceforge.net/projects/bootinfoscript/files/bootinfoscript/0.61/bootinfoscript-061.tar.gz tar xzC ~/boot-info-script/ -f ~/boot-info-script/bootinfoscript-061.tar.gz sudo bash ~/boot-info-script/bootinfoscript
Dabei wird das Installationsarchiv heruntergeladen, entpackt und anschließend das Skript ausgeführt. Das Ergebnis der Analyse wird in der Datei ~/boot-info-script/RESULTS.txt gespeichert, Verwendung wie zuvor im Hinweis beschrieben.
Diese Revision wurde am 31. Oktober 2016 23:11 von lionlizard erstellt.