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 63
Jump 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 0x1be
und die MBR-Signatur, 55aa
die ganz am Ende des Sektors mit Offset auftritt 0x1fe
. 0x1be
ist 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/sdz
nur 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 0x1be
können Sie sehen 80
auf dem hexdumped Ausgang, kann dies auch sein 00
und 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 , 0x1bf
obwohl fast nie sein 0x00
(es ist am häufigsten , 0x01
aber 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/zero
erneut 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
hexdump
Vergewissern Sie sich als Nächstes , dass die Änderungen wie erwartet durchgeführt wurden.
hexdump -C /dev/sdz | head
Vergleichen Sie bis 0x200
gegen 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.