Wie kann ich feststellen, ob grub auf einem Gerät installiert ist?

37

Wie kann ich feststellen, ob grub auf einer Festplatte installiert ist und welche Einstellungen es hat (insbesondere welche für den root-Parameter)?

Ich muss viele Festplatten in Software-RAID1-Arrays überprüfen, um sicherzustellen, dass auf beiden Festplatten grub installiert ist, wobei die grub auf jeder Festplatte den entsprechenden Stammwert hat.

DrStalker
quelle
3
Können Sie in Betracht ziehen, die neue Antwort unten zu akzeptieren? da die akzeptierte Antwort inzwischen veraltet ist
rubo77
@ rubo77, meine Antwort war zu der Zeit korrekt, als grub0,9x oder niedriger gebräuchlich war und lange bevor es in umbenannt wurde grub-legacy. Wenn Sie das stört, schlage ich vor, eine neue Frage speziell zu stellen grub2. Führen Sie alternativ eine Kampagne durch, in der alle Fragen und Antworten korrigiert werden, die im Laufe der Zeit veraltet sind.
cas
3
Nichts für Ungut. Ich denke, SO ist eine Wissensbasis und soll sich im Laufe der Zeit ändern. Einmal veraltete Antworten sollten aktualisiert werden.
Rubo77
verwandt: askubuntu.com/questions/444855/… | superuser.com/questions/466086/...
Ciro Santilli新疆改造中心法轮功六四事件

Antworten:

28

AKTUALISIEREN:

Diese Antwort stammt aus dem Jahr 2009 und gilt für Grub-Legacy, nicht für Grub2.

Sie können filedamit GRUB in einem MBR identifizieren. z.B

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3
, stage2 address 0x2000, stage2 segment 0x200; partition 1:
ID=0xfd, starthead 1, startsector 63, 1044162 sectors; partition
2: ID=0x82, starthead 0, startsector 1044225, 1028160 sectors;
partition 3: ID=0xfd, starthead 0, startsector 2072385,
1951447680 sectors, code offset 0x48

Der root=Parameter ist nicht im MBR gespeichert, sondern in der menu.lstDatei von GRUB, die auf einem Dateisystem gespeichert ist (normalerweise im Verzeichnis / boot / grub des Root-Dateisystems fs oder im Verzeichnis grub des Dateisystems / boot) könnte überall sein).

Sie müssen die Ausgabe der obigen Datei analysieren, bestimmen, auf welcher Festplatte / Partition sich die menu.lstDatei befindet, sie mounten, einlesen und analysieren. Sie sollten auch die grub / default-Datei lesen, um herauszufinden, welcher grub-Menüeintrag der Standard ist, da dieser wahrscheinlich den root = -Parameter hat, an dem Sie am meisten interessiert sind.

cas
quelle
In diesem Fall muss sichergestellt werden, dass grub nach menu.lst an der richtigen Stelle sucht. Irgendwo muss dem Bootloader mitgeteilt werden, auf welcher Festplatte und auf welcher Partition er sich befinden muss, damit das Bootmenü aufgerufen werden kann.
DrStalker
Es gibt viele nützliche Informationen über Grub auf der Grub-Homepage gnu.org/software/grub , im Grub-Wiki grub.enbug.org und auf Wikipedia de.wikipedia.org/wiki/GRUB
cas
8
Dies ist mit grub2 nicht mehr korrekt. Siehe stattdessen @ benrifkahs Antwort.
Paul Tomblin
52

Alternative Methode

file -shat in Ubuntu Lucid nicht funktioniert, weil die Magic Files meines Dateibefehls veraltet waren . Eine andere Möglichkeit, dies zu tun, wenn Ihre Magic-Dateien nicht mit GRUB-Änderungen Schritt halten, besteht darin, die ersten 512 Byte des Geräts mit dem folgenden ddBefehl zu untersuchen :

user@host:~$ sudo dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error

Dies sendet die Ausgabe des ddBefehls über den stringsBefehl, wodurch nicht druckbare Zeichen entfernt werden (Übertragungsstatistiken werden verworfen /dev/null).

Wenn Sie Meldungen sehen, die GRUB bei einem Fehler anzeigen würde, ist GRUB installiert.

Hat Tipp an Louib auf ubuntuforums.org für die Beantwortung in diesem kennwortgeschützten Beitrag: http://ubuntuforums.org/showthread.php?t=363372

Für die Neugierigen ist das, was ich von file -s:

user@host:~$ sudo file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 20
48, 337211392 sectors; partition 2: ID=0x5, starthead 254, startsector 337215486, 1434214
6 sectors, code offset 0x63

Es gibt nichts spezielles über GRUB.

benrifkah
quelle
5
Spot on. Die akzeptierte Antwort hat bei mir auf mehreren Rechnern nicht funktioniert, aber bei Ihnen.
Cerin
13
Die akzeptierte Antwort wurde 2009 geschrieben und war (wie aus der Erwähnung von menu.lst und nicht von grub.cfg ersichtlich sein sollte) für grub1, auch bekannt als "grub-legacy". Offensichtlich haben sich die Dinge seitdem geändert, und grub2 fügt dem MBR keinen Bezeichner hinzu. Wenn es auf einigen Computern für Sie funktioniert hat, auf anderen jedoch nicht, bedeutet dies, dass Sie auf einigen Computern grub1 und auf anderen grub2 haben.
cas
1
Danke für die Klarstellungen Craig. Das System, auf dem ich den file -sBefehl ursprünglich ausprobiert habe, verwendet grub-pc, anscheinend GRUB2, also klingt es, als ob Sie teilweise richtig sind. Ich habe jedoch file -sauf einigen anderen Systemen mit GRUB 0.97 gearbeitet und auf einigen hat es funktioniert, auf anderen nicht. Der Unterschied zwischen diesen Systemen lag in den Zahlen in den Magic-Dateien, die mit dem Befehl file geliefert wurden. Durch das Austauschen von Magic Number-Dateien wurde bestätigt, dass die Definitionen des nicht funktionierenden Systems zum Fehlschlagen des funktionierenden Systems geführt haben.
Benrifkah
7

Mit können grub-emuSie das Menü anzeigen, das Grub beim nächsten Neustart des Computers anzeigt.

$ sudo apt-get install grub-emu
$ sudo grub-emu

Auf meinem Desktop-Computer wurde das Menü wie erwartet angezeigt. Wenn ich jedoch vorgab, einen Kernel zu booten, wurde der Fehler "no such device" angezeigt. Ich denke, das ist erwartetes Verhalten.

Auf meinem DigitalOcean VPS wurden keine Einträge im Grub-Menü angezeigt, obwohl der Server tatsächlich gut neu gestartet wurde. (Dies ist ein 2013 VPS, daher kann Ihr Kilometerstand variieren.)

Einige Notizen beim Laufen grub-emu:

  • In X-Fenster, wenn Sie mit gräbt interagieren mögen, müssen Sie Ihren Tastaturfokus sein auf dem Terminal , von dem Sie gräbt-emu lief, und nicht auf dem Fenster , das nach oben geknallt.
  • Sie können den Emulator beenden, indem Sie drücken und cdann eingeben exit.
  • Nach dem Beenden befindet sich Ihr Terminal-Emulator möglicherweise in einem schlechten Zustand (z. B. wird die Eingabetaste nicht in einer neuen Zeile angezeigt). Beheben Sie das durch Tippen reset. (Keine Sorge, der Computer wird nicht neu gestartet. Das Terminal wird nur bereinigt.)
joeytwiddle
quelle
Das Tippen, cgefolgt von, exithat bei mir nicht funktioniert.
Faheem Mitha
1
Stellen Sie sicher, dass Sie den Fokus auf das ursprüngliche Terminal haben, aus dem das Grub-Fenster hervorgegangen ist, und nicht auf das Grub-Fenster selbst (ich habe eine Sekunde
gebraucht