Wie deinstalliere ich GRUB?

19

Auf einer Festplatte, die ich nur für die Datenspeicherung verwende, befindet sich noch GRUB aus früheren Ubuntu-Installationen.

Wie kann ich GRUB entfernen, ohne die restlichen Daten des Laufwerks zu beschädigen?

Hintergrund

Ich verschiebe das Datenlaufwerk gelegentlich zwischen Computern mit verschiedenen Startreihenfolgekonfigurationen. Daher möchte ich, dass es nicht bootfähig ist , damit es nicht in den BIOS-Einstellungen der einzelnen Computer berücksichtigt werden muss.

Wenn ich einen Computer einschalte, während nur das Datenlaufwerk angeschlossen ist, wird Folgendes angezeigt:

error: no such device: fdf38dd4-9e9d-479d-b830-2a6989958503.
grub rescue> 

Ich kann aus alten Sicherungen bestätigen, /etc/fstabdass dies die UUID einer Root-Partition war, die ich kürzlich neu formatiert habe und die nicht mehr existiert . Hier ist die Partitionstabelle und der Raw- Master-Boot-Datensatz des Datenlaufwerks .

Bitte beachten Sie, dass ich nicht an Problemumgehungen interessiert bin, die meine Hauptfrage nicht beantworten. Ich kann mir verschiedene Möglichkeiten vorstellen, um dieses Problem zu umgehen, aber es stört mich grundsätzlich, dass ich nicht weiß, wie ich es direkt lösen kann. Jede Installationsprozedur sollte eine entsprechende Deinstallationsprozedur haben.

ændrük
quelle
Nur neugierig - wenn Sie die Dateien in / boot / grub löschen (was ich angenommen habe), spielt der mbr-Code dann wirklich eine Rolle? Ich glaube nicht, dass es von irgendetwas anderem benutzt wird, oder? Ich könnte mich irren, aber ich würde nicht denken, dass es verwendet wird, und ich würde es hassen, mit etwas auf einem so niedrigen Niveau herumzuschrauben, wenn ich mich um die Daten kümmern würde.
Marty Fried
Können Sie die MBR-Rohdaten sichern und hier veröffentlichen? Sie sollten in der Lage sein, etwas zu tun sfdisk -d /dev/sdb > sdb.out.
Durchbruch

Antworten:

25

Sie können das Gerät nicht bootfähig machen, indem Sie die ersten Bytes der Festplatte auf 0x00 setzen.

Normalerweise (und dies gilt sowohl für grub, grub2 als auch für ntldr iirc) ist das allererste Byte Ihres Laufwerks eine x86-JMP-Anweisung. Dies geschieht bereits vor dem Disklabel, da die CPU beim Übergeben der Ausführung an das Gerät zum Bootstrap lediglich die Geräteinformationen als Code einsaugt. Wenn der Code ungültig ist, wird ein Interrupt ausgelöst, und das BIOS behandelt die Ausnahme und geht zum nächsten bootfähigen Gerät.

Zum Beispiel beginnt der Anfang meiner Festplatte mit:

00000000  eb 63 90 d0 bc 00 7c fb  50 07 50 1f fc be 1b 7c  |.c....|.P.P....||

Der erste Teil ist eb 63Jump to Offset 0x63 von der aktuellen IP (also zu 0x65).

00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|

Die Ausführung wird von hier aus fortgesetzt.

Das Ende des Sektors sieht folgendermaßen aus:

000001b0  cd 10 ac 3c 00 75 f4 c3  ed db 96 d6 00 00 80 01  |...<.u..........|
000001c0  01 00 83 fe ff ff 3f 00  00 00 c1 07 a6 0e 00 fe  |......?.........|
000001d0  ff ff 83 fe ff ff 00 60  00 11 00 00 38 29 00 fe  |.......`....8)..|
000001e0  ff ff 82 fe ff ff 00 08  a6 0e 00 58 5a 02 00 00  |...........XZ...|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|

Wenn Ihre Festplatte als MBR-Partitionstabelle formatiert ist, müssen nur zwei Dinge vorhanden sein: die Partitionstabelle mit Offset 0x1beund die MBR-Signatur, 55aadie ganz am Ende des Sektors mit Offset auftritt 0x1fe. 0x1beist dezimal 446.

Das Folgende macht das Gerät (natürlich) nicht mehr bootfähig. Aber das ist was du willst. Wenn Sie nicht möchten, dass Ihr Gerät nicht mehr gebootet werden kann, tun Sie dies nicht, mmm-kay? Ich gehe davon aus, dass es sich bei Ihrem Gerät /dev/sdznur um ein Gerät handelt , weil nicht viele Leute ein Gerät haben /dev/sdz, und dies senkt das Risiko, dass ein Idiot-Neuling blind Befehle zum Einfügen kopiert.

Kopieren Sie zuerst den MBR in eine Datei für eine Sicherung.

sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1

Erstellen Sie als Nächstes eine Kopie dieser Datei:

cp backup.mbr backup.mbr.test

Als nächstes müssen wir ein Loopback-Gerät erstellen (damit der Inhalt nicht abgeschnitten wird) und die Änderungen als Test auf unseren gefälschten Sektor 0 anwenden:

sudo losetup /dev/loop7 backup.mbr.test
sudo dd if=/dev/zero of=/dev/loop7 bs=446 count=1
sudo losetup -d /dev/loop7

hexdump die Datei und stellen Sie sicher, dass die gesamte Partitionstabelle intakt ist:

sudo hexdump -C backup.mbr.test

Sie sollten etwas sehen wie:

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 80 01  |................|
000001c0  01 00 83 fe ff ff 3f 00  00 00 c1 07 a6 0e 00 fe  |......?.........|
000001d0  ff ff 83 fe ff ff 00 60  00 11 00 00 38 29 00 fe  |.......`....8)..|
000001e0  ff ff 82 fe ff ff 00 08  a6 0e 00 58 5a 02 00 00  |...........XZ...|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

Nun 0x1bekönnen Sie sehen 80auf dem hexdumped Ausgang, kann dies auch sein 00und immer noch gültig sein. (Es ist das „bootable“ Flag in der Partitionstabelle, können Sie es in Ruhe lassen, weil es völlig von den meisten modernen BIOS - Versionen ... ignoriert wird ) das Byte an , 0x1bfobwohl fast nie sein 0x00(es ist am häufigsten , 0x01aber es kann auch andere Werte annehmen) Sie Vergleichen Sie dies mit Ihrer backup.mbr, um sicherzustellen, dass sich nichts an der Vergangenheit 0x1beändert.

Wenn Sie zufrieden sind, dass Sie die Änderung korrekt angewendet haben, können Sie die Datei direkt über den ersten Teil der Festplatte kopieren. Der Grund, warum Sie die Datei lieber als /dev/zeroerneut ausführen möchten, dient der Sicherheit vor Tippfehlern. Wenn Sie versehentlich auslassen count=1, wird das Kopieren einer Datei niemals erfolgreich sein. So ist es sicherer.

sudo dd if=backup.mbr.test of=/dev/sdz

hexdumpVergewissern Sie sich als Nächstes , dass die Änderungen wie erwartet durchgeführt wurden.

hexdump -C /dev/sdz | head

Vergleichen Sie bis 0x200gegen backup.mbr.test, um sicherzustellen, dass es ist, was Sie wollen.

Wenn irgendetwas aus irgendeinem Grund schief geht, können Sie die Sicherung des MBR einfach wieder auf das Laufwerk kopieren:

sudo dd if=backup.mbr of=/dev/sdz

Hoffe das hilft.

Allmacht
quelle
1
Ich gebe Ihnen ein Plus für die Antizipation und Verhinderung eines schwerwiegenden Noob-Fehlers.
Lebenslauf
Vielen Dank, ich habe mein Bestes getan, um so viele Noob-Fehler wie möglich zu vermeiden: Erstellen einer Sicherungskopie, nicht direktes Schreiben auf das Block-Gerät, falls countvergessen wird, nicht direkt unter Verwendung eines allgemeinen Block-Gerätenamens, wobei angegeben wird, dass die Sicherungsdatei erstellt werden soll ein Beispiel dafür, wie ein erfolgreiches Löschen aussieht, wie Sie es rückgängig machen können, wenn Sie es vermasseln. Ich denke, wenn Sie sich auskennen, um zu wissen, was ich vorhabe, können Sie die kleinen Schritte durchkreuzen und dies alles in einem einzigen Befehl erledigen. Aber ich werde dir diesen Befehl nicht geben, wenn du noch lernst. ;)
OmnipotentEntity
2

WARNUNG: EXTREM GEFÄHRLICH

Sie können den Befehl dd unter Linux selbst verwenden (er entfernt die Partitionstabelle):

 # dd if=/dev/null of=/dev/sdX bs=512 count=1

Entfernen Sie einfach den MBR ohne die Partitionstabelle (siehe Kommentar unten):

# dd if=/dev/null of=/dev/sdX bs=446 count=1

Ersetzen Sie /dev/hdXdurch Ihren tatsächlichen Gerätenamen, z /dev/hda. Verwenden Sie den fdisk -lBefehl, um den Gerätenamen herauszufinden:

# fdisk -l

Quelle

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/
Tachyonen
quelle
Diese Byteanzahlen sehen unangenehm willkürlich aus. Wissen Sie, ob sie für GRUB2 gleich sind?
ændrük,
1
Die Byteanzahl liegt daran, dass die Partitionstabelle zwischen 446 und 512 liegt. Dies wirft natürlich die Frage auf, warum Sie den Grub-MBR entfernen möchten ... es schadet nichts, wenn Sie nur ungenutzt da sitzen. Wenn Sie stattdessen einen anderen Bootloader möchten, installieren Sie ihn einfach und er ersetzt grub.
Psusi
3
Wow, auf diese Art von Antwort sollte "WARNUNG: EXTREM GEFÄHRLICH" in großen roten Buchstaben geschrieben sein. Ich bin mir sicher, dass das OP dazu in der Lage ist, aber ich würde es hassen, wenn ein neuer Benutzer den ersten Befehl in das Terminal kopiert, ohne zu wissen, was "Partitionstabelle" ist
Sergey
1
Sie nicht tun dies . Der erste Befehl löscht die Partitionstabelle (wie im OP erwähnt), der zweite Befehl führt jedoch zu undefiniertem Verhalten, wenn der MBR nicht ordnungsgemäß konfiguriert ist.
Durchbruch
1
Ähm ... Ich weiß nicht, warum ihr ausflippt, die Befehle, die Tachyonen eingefügt haben, machen überhaupt nichts. Sie können mit testen touch testfile, dd if=/dev/urandom of=testfile bs=512 count=1, sudo losetup /dev/loop7 testfile, sudo dd if=/dev/null of=/dev/loop7 bs=446 count=1, sudo hexdump -Cv /dev/loop7. Wie Sie sehen, /dev/nullhandelt es sich nicht um eine 0-Quelle, sondern um eine EOF-Quelle. ddkann und will nichts von dem kopieren, was /dev/nulldu verwenden musst /dev/zero. Beim zweiten Durchbruch ist kein undefiniertes Verhalten möglich, wenn das erste Byte des Sektors 0 ist 0x00. Ich weiß nicht, warum du das denkst.
OmnipotentEntity
1

Meine Erfahrung mit

sudo install-mbr -i n -p D -t 0 /dev/sda

ist, dass es grub2 erfolgreich deinstalliert hat /dev/sda(wo mein Windows 7 installiert ist), also der erste Teil der Frage "Wie entferne ich grub aus / dev / sda?" wurde beantwortet.

Der zweite Teil der Frage lautet jedoch "Wie stelle ich den MBR von / dev / sda wieder her?" wurde nicht beantwortet, da der install-mbrBefehl den MBR nicht wiederherstellen konnte. Infolgedessen startet Windows nicht mehr und der Windows-Start-Manager meldet einen Fehler bezüglich eines beschädigten MBR und fordert den Benutzer auf, die Reparatur von einer Windows-Reparatur-CD durchzuführen.

Ubuntu-13.10 Benutzer
quelle
1

Nachdem ich den Wikipedia-Artikel zu diesem Thema gelesen habe, möchte ich ein paar zusätzliche Lösungen vorschlagen:

  1. Bootreihenfolge im BIOS ändern :)

  2. Das beste und sicherste: Mit dieser fdiskOption können Sie das "bootfähige" Flag von allen Partitionen auf diesem Laufwerk entfernen. Die meisten MBRs suchen nach einer "bootfähigen" Partition, von der aus eine Kette geladen werden kann. Daher würde ich erwarten, dass GRUB einfach nichts unternimmt, wenn es keine solchen Partitionen gibt. Nicht getestet.

    Wenn dies nicht hilft, installieren Sie einen kostenlosen Klon des Standard-MBR-Codes:

  3. Installiere das mbrPaket und benutze den folgenden install-mbrBefehl:

    sudo apt-get install mbr
    sudo install-mbr -i n -p D -t 0 /dev/sda
    

Credits: SO WIRD'S GEMACHT: Windows MBR mit Ubuntu LIVE-CD wiederherstellen

Beim Lesen des Wikipedia-Artikels habe ich den Eindruck, dass das einzige, was den MBR identifiziert, seine Signatur ist, die sich ganz am Ende des Sektors befindet (Bytes 510 und 511). Die ersten 446 MBR-Bytes sollen Maschinenanweisungen enthalten. Das BIOS soll die Steuerung unabhängig vom tatsächlichen Inhalt der ersten 446 Bytes an den Bootloader übertragen, vorausgesetzt, die MBR-Signatur ist vorhanden:

Auf IBM PC-kompatiblen Computern lädt die im ROM-BIOS enthaltene Bootstrapping-Firmware den Master-Boot-Datensatz und führt ihn aus. Das BIOS liest den MBR vom Speichergerät in den physischen Speicher und leitet den Mikroprozessor zum Start des Startcodes.

Aufgrund der eingeschränkten Größe des Codeabschnitts des MBR enthält dieser normalerweise nur ein kleines Programm, das zusätzlichen Code (z. B. einen Bootloader) vom Speichergerät in den Speicher kopiert. Die Steuerung wird dann an diesen Code übergeben, der für das Laden des tatsächlichen Betriebssystems verantwortlich ist.

...

Die Bootstrap-Sequenz im BIOS lädt den ersten gültigen MBR, den es findet, in den physischen Speicher des Computers unter der Adresse 0x7C00. Der letzte Befehl, der im BIOS-Code ausgeführt wird, ist ein "Sprung" zu dieser Adresse, um die Ausführung an den Anfang der MBR-Kopie zu leiten. Die primäre Validierung für die meisten BIOS ist die 0xAA55-Signatur am Ende, obwohl ein BIOS-Implementierer möglicherweise andere Überprüfungen auswählt, um zu überprüfen, ob der MBR eine gültige Partitionstabelle enthält, ohne Einträge, die sich auf Sektoren beziehen, die über die angegebene Kapazität des Datenträgers hinausgehen.

Ich verstehe also, dass MBR immer einen Bootloader enthalten soll, und das Nullsetzen der ersten 446 Bytes würde das BIOS nicht davon abhalten, von der Festplatte zu booten - aber es ist wahrscheinlich, dass der Computer beim Versuch, ungültigen Code auszuführen, hängen bleibt.

UPDATE: In diesem Artikel wird außerdem empfohlen, die MBR-Signatur im und des Sektors (mit einem beliebigen Festplatten-Editor) zu bearbeiten, damit die Festplatte für das BIOS als "nicht bootfähig" angezeigt wird. Ich bin mir nicht sicher, ob es das Betriebssystem beeinflussen wird, wenn man die Partitionstabelle auf der Festplatte sieht ... aber zumindest kann man diese Bytes immer wieder ändern ...

Sergey
quelle
0

Noch eine einfachere Lösung.

In meinem Fall hatte ich Debian Linux, wollte aber Mandriva verwenden, wird auch für andere funktionieren

Schalten Sie Ihren PC aus, und entfernen Sie die Festplatte, die bootet, die Sie nicht booten möchten (die Grub hat).

Geben Sie einfach einen bootfähigen USB-Stick ein, der aus der Mandriva-ISO-Datei oder einer anderen zu installierenden Variante erstellt wurde. Es gibt Tools, mit denen Sie bootfähige USB-Sticks aus ISO-Dateien mithilfe von Google erstellen können.

Jetzt können Sie bei den meisten Linux-Installationsprogrammen auswählen, was Sie tun möchten, was Sie zur Evaluierung oder für portables Linux verwenden möchten, oder das Setup ausführen, um es zu installieren. An diesem Punkt warten wir nur (bewegen Sie den Cursor nach oben und unten, damit der Bildschirm wartet, drücken Sie jedoch nicht die Eingabetaste oder klicken Sie mit der Maus).

Denken Sie an dieser Stelle daran, dass Ihre USB- / oder / CD-ROM gestartet wurde und ausgeführt wird. Jetzt ist es an der Zeit, die Festplatte, die wir vorübergehend entfernt haben, wieder einzustecken. Warte eine Minute.

Fahren Sie mit dem Installationsprozess fort, da die meisten Installationsprogramme Partitionstools enthalten, mit denen Sie nach Belieben arbeiten können. Nun, es ist eine einfache Lösung, ich habe ein altes Linux-Setup einfach als Anfänger losgeworden

Peter
quelle
0

Alte Frage, aber als es mir gestern passiert ist, habe ich es so gelöst: Ich habe den Computer ausgeschaltet, die belastete Festplatte physisch abgeklemmt, den Computer dann neu gestartet

~ $ sudo update-grub

Nachdem ich dies getan hatte, schaltete ich den Computer aus, steckte die Festplatte wieder ein und meine alte Windows 7-Partition, die seit 2 Jahren nicht mehr vorhanden war, tauchte nicht mehr auf - endlich.

Ich verstehe, dass dies eine bodenständige Lösung ist, aber es funktioniert. Eines Tages werde ich die Festplatte komplett löschen, und alle verbleibenden Spuren von GRUB werden verschwinden.

ElStellino
quelle