Vous pouvez rendre le périphérique non amorçable simplement en faisant les premiers octets du disque 0x00.
En règle générale (et cela est vrai pour grub, grub2 et ntldr iirc), le tout premier octet de votre lecteur sera une instruction jmp x86. Cela se produit avant même le disklabel, car lors du passage de l'exécution au périphérique pour l'amorcer, il définit simplement le CPU pour aspirer les informations du périphérique sous forme de code. S'il a un code non valide, il déclenche une interruption et le BIOS gère l'exception et passe au périphérique de démarrage suivant.
Par exemple, le début de mon disque commence par:
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
La première partie est eb 63
celle de Jump to offset 0x63 from the current IP (so to 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......|
L'exécution se poursuit à partir d'ici.
La fin du secteur ressemble à ceci:
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.|
Si votre disque est formaté en tant que table de partition MBR, il n'a besoin que de deux éléments pour être présent, la table de partition qui est à l'offset 0x1be
et la signature MBR, 55aa
qui se produit à la toute fin du secteur à l'offset 0x1fe
. 0x1be
est décimal 446.
Les éléments suivants rendront (bien sûr) le périphérique non amorçable. Mais c'est ce que tu veux. Si vous ne voulez pas rendre votre appareil impossible à démarrer, ne le faites pas, mmm-kay? Je suppose que votre appareil l'est /dev/sdz
, tout simplement parce que peu de gens en ont un /dev/sdz
, et cela réduit le risque qu'un idiot novice copie aveuglément les commandes de collage.
Tout d'abord, copiez le MBR dans un fichier pour une sauvegarde.
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
Ensuite, faites une copie de ce fichier:
cp backup.mbr backup.mbr.test
Ensuite, nous devons créer un périphérique de bouclage (afin que le contenu ne soit pas tronqué.) Et appliquer les modifications sur notre faux secteur 0 comme test:
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
le fichier et assurez-vous que la table de partition entière est intacte:
sudo hexdump -C backup.mbr.test
Vous devriez voir quelque chose comme:
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
Maintenant, 0x1be
c'est là que vous voyez 80
sur la sortie hexadumped, cela peut également être 00
et être toujours valide. (Il est le drapeau « de démarrage » dans la table de partition, vous pouvez le laisser seul, car il est complètement ignoré par la plupart des BIOS modernes ...) L'octet à 0x1bf
bien sera presque jamais être 0x00
(ce qui est le plus souvent , 0x01
mais cela peut prendre d' autres valeurs) vous pouvez comparer cela à votre backup.mbr
pour vous assurer que rien du passé 0x1be
n'est changé.
Une fois que vous êtes convaincu que vous avez correctement appliqué la modification, vous pouvez copier directement le fichier sur la première partie du disque. La raison pour laquelle vous voulez faire le fichier plutôt que de /dev/zero
nouveau est pour la sécurité contre les fautes de frappe. Si vous omettez accidentellement count=1
que vous allez avoir un mauvais moment, la copie d'un fichier ne se déroulera jamais au-delà de l'EOF. C'est donc plus sûr.
sudo dd if=backup.mbr.test of=/dev/sdz
À côté de hexdump
votre disque, assurez-vous que les modifications ont pris comme prévu.
hexdump -C /dev/sdz | head
Comparez 0x200
contre backup.mbr.test
pour vous assurer que c'est ce que vous voulez.
Enfin, si quelque chose se déroule pour une raison quelconque, vous pouvez simplement copier la sauvegarde du MBR sur le lecteur via:
sudo dd if=backup.mbr of=/dev/sdz
J'espère que cela t'aides.