Wie kann man überprüfen, auf welchen Laufwerken grub2 tatsächlich einen MBR installiert hat?

17

Ich arbeite auf einem Debian / Squeeze-System (mit einer Vorgeschichte, die mindestens auf Woody zurückgeht), das im Rahmen des Squeeze-Upgrades auf grub2 aktualisiert wurde. Alles funktioniert gut, aber ich werde gleich mit der Festplattenkonfiguration herumspielen.

Derzeit werden auf dem Computer 2 80-GB-Laufwerke mit RAID1 /, / home- und / boot-Partitionen ausgeführt (es gibt ein weiteres Laufwerkspaar mit RAID1 / data und ein paar Auslagerungen, falls sich jemand fragt, wo die Auslagerungen sind , aber ich rühre die nicht an).

Ich habe 2 SSDs mit 130 GB hinzugefügt, sie so partitioniert, dass sie mindestens so groß sind wie die Partitionen auf den 80-GB-Laufwerken, und beabsichtige, auf die neuen SSD-Laufwerke umzuschalten, indem ich die RAID1-Laufwerke so anbaue, dass sie auf die Synchronisierung warten und dann die alten entfernen Laufwerke von den Arrays, so dass nur die SSDs übrig bleiben (und dann die Dateisysteme wachsen). Aber um mdadm / ext3-Wrangling geht es in dieser Frage nicht ...

Damit habe ich 2 veraltete 80-GB-Laufwerke (IDE), die ich vom Computer entfernen möchte. Ich mache mir Sorgen, dass das Entfernen einige wichtige MBR mit sich bringt. Wie stelle ich sicher, dass der Computer bootfähig bleibt?

Genauer:

  • Als ich das Squeeze-Upgrade durchgeführt habe, wurde eine Auswahl der Laufwerke vorgestellt, auf denen grub2 installiert werden soll (ich habe die Standardeinstellung verwendet, bei der es sich um alle Laufwerke handelte). Die SSDs befanden sich zu diesem Zeitpunkt jedoch nicht im Computer. Wie kann ich dies erneut ausführen, damit Grub auf den SSD-MBRs installiert wird? (Ich vermute, es ist eine dpkg-Rekonfiguration eines Pakets).

  • Wie kann ich herausfinden, auf welchen Laufwerken grub2 installiert ist? Meine Güte, es gibt heutzutage fast 200 Dateien unter / boot / grub /! Wo soll man suchen? Es scheint auch etwas seltsam, dass /boot/grub/device.map.auto derzeit nur 3 Laufwerke auflistet (2 der 80 GB, aber nur eines des anderen Laufwerkpaars und keine der SSDs). Wie aktualisiere ich das? ( Update: das war ein roter Hering; device.map.auto scheint ein Relikt von vor Jahren zu sein; device.map sah bei einem Update von grub-mkdevicemap vernünftig aus. Denke, meine Paranoia in diesem Bereich stammt aus dem BIOS eines alten Mobos, das dies tun würde die von GRUB aus einer Laune heraus gesehene Gerätereihenfolge neu anordnen).

Ergebnis: Alles ist gut gelaufen, und ich habe jetzt die beiden alten 80-GB-IDE-Laufwerke im Auslieferungszustand sowie ein flottes und schnelles Boot-System, auf dem SSDs mit RAID1-Ed ausgeführt werden, wobei alle Dateisysteme auf die neuen Partitionsgrößen angepasst werden. Das andere "fehlende Teil des Grub-Puzzles", nach dem ich gesucht habe, war dpkg-reconfigure grub-pcdie Frage, auf welchen Datenträgern ein MBR gespeichert werden soll. Aarons Antwort hat mich tatsächlich am meisten beruhigt, dass dies wie erwartet funktionierte und daher diese Antwort akzeptierte.

timday
quelle

Antworten:

17

Der MBR hat 512 Bytes, so dass Sie schnell feststellen können, ob GRUB vorhanden ist ...

dd if=/dev/sda bs=512 count=1 | xxd

Das gibt den MBR aus, ich sehe "GRUB" in meinem bei Byte 0x17F = 383.

dd if=/dev/sda bs=1 count=4 skip=383

Wenn ich das mache, wird " GRUB" gedruckt , gefolgt von der ddAusgabe.

Sie können das in eine Bash- forSchleife oder etwas einwickeln, das über mehr Laufwerke geht. wenn Sie es nicht manuell tun möchten.

Aaron D. Marasco
quelle
4
Nur ein kleiner Zusatz - da sich die Position des GRUB wahrscheinlich von Version zu Version ändert, kann man verwenden dd if=/dev/sda bs=1 count=512 | grep -aob GRUB. Dadurch wird die Position des Markers im Bootsektor zurückgegeben.
Alessandro Santini
16

Der Startvorgang umfasst mehrere Schritte (ich beschreibe ein herkömmliches PC-BIOS):

  1. Das BIOS liest den ersten Sektor (512 Bytes) der Bootdiskette.
  2. Der Code in diesem ersten Sektor liest weitere Daten und Code an einem festen Ort über die BIOS-Schnittstelle. Diese BIOS-Schnittstelle stellt nur zwei Festplatten zur Verfügung: Festplatte 0 ist immer dort, wo der erste Sektor gelesen wurde, und Festplatte 1 ist eine andere Festplatte, die bei mehr als zwei nicht leicht vorhersehbar ist. Der Bootsektor enthält ein Byte, das angibt, auf welcher Festplatte sich die weiteren Daten befinden. Dies ist die Platte, die enthält /boot/grub.
  3. Der in der vorherigen Phase geladene Code versteht Partitionen, Dateisysteme und andere allgemeine Begriffe. Die Daten enthalten einen Dateisystemspeicherort (z. B. eine Zeichenfolge (hd0)/boot/grub), der bestimmt, wo sich die grub.cfgGrub-Module befinden, und weitere.
  4. grub.cfg wird ausgeführt, um normalerweise ein Menü anzuzeigen und ein Betriebssystem zu starten.

Der Bootsektor wird von generiert grub-setup, normalerweise aufgerufen durch grub-install. Der Bootsektor endet auf der Festplatte, die Sie (in Linux-Syntax) in der Befehlszeile grub-installoder angegeben haben grub-setup. Sie können überprüfen, ob Sie einen Bootsektor auf einer Festplatte haben, indem Sie ausführen file -s /dev/sda. Da Sie eine neue Festplatte hinzufügen und von dieser booten möchten, müssen Sie sie grub-installauf der neuen Festplatte ausführen . Das grub-installmehrfache Ausführen auf derselben Festplatte ist harmlos.

Der schwierige Teil ist in Schritt 2 oben. Wenn möglich, legen Sie Grub (dh das /boot/grubVerzeichnis) auf die BIOS-Bootdiskette (oder teilen Sie Ihrem BIOS mit, dass es von der Diskette booten soll, auf der sich diese /boot/grubbefindet). Hier device.mapkommt es ins Spiel. Stellen Sie sicher, dass (hd0)der Datenträger zugeordnet ist, der enthält /boot/grub, und führen Sie ihn dann grub-installauf diesem Datenträger aus.

Wenn sich Ihre beiden Festplatten in einer Software-RAID-1-Konfiguration befinden, haben Sie identische Startsektoren. Dies ist das erwünschte Verhalten: Wenn die eine Festplatte, die die BIOS-Bootdiskette ist, ausfällt, funktioniert das Booten nur von der anderen (da sie dieselben Bytes an denselben relevanten Stellen enthalten). Wenn Sie nur bestimmte Partitionen gespiegelt haben, wirkt sich die Installation eines Bootsektors nur auf eine der Festplatten aus. Sie sollten grub-installerneut auf dem zweiten Datenträger ausgeführt werden, nachdem Sie device.mapdie Zuordnung (hd0)zu dem Datenträger geändert haben, der die zweite gespiegelte Kopie von enthält /boot/grub.

Schritt 3 ist ziemlich komplex, funktioniert aber normalerweise sofort. In Schritt 4 sucht Grub nach UUID-Dateisystemen oder nach benannten Dateien, sodass Sie sich nicht mehr um die verschiedenen Methoden zum Festlegen von Datenträgern kümmern müssen.

Gilles 'SO - hör auf böse zu sein'
quelle