Un disque dur que j'utilise uniquement pour le stockage de données contient toujours GRUB d'anciennes installations Ubuntu.
Comment puis-je supprimer GRUB sans endommager le reste des données du lecteur?
Je déplace de temps en temps le disque de données entre des ordinateurs avec différentes configurations d'ordre de démarrage, je voudrais donc qu'il soit non amorçable afin d'éviter de devoir le prendre en charge dans les paramètres BIOS de chaque ordinateur.
Lorsque j'allume un ordinateur alors que seul le lecteur de données est connecté, les éléments suivants apparaissent:
error: no such device: fdf38dd4-9e9d-479d-b830-2a6989958503.
grub rescue>
Je peux confirmer à partir d'anciennes sauvegardes de /etc/fstab
qu'il s'agissait de l'UUID d'une partition racine que j'ai récemment reformatée et que n'existe plus . Voici le lecteur de données table de partition et raw enregistrement de démarrage principal .
Veuillez noter que les solutions de rechange qui ne répondent pas à ma question principale ne m'intéressent pas. Je peux penser à plusieurs façons de contourner ce problème, mais cela me dérange en principe de ne pas savoir comment le résoudre directement. Chaque procédure d'installation doit avoir une procédure de désinstallation équivalente.
Vous pouvez rendre le périphérique non amorçable en rendant simplement les premiers octets du disque 0x00.
Typiquement (et ceci est vrai pour grub, grub2 et ntldr iirc), le tout premier octet de votre lecteur sera une instruction x86 jmp. Cela se produit avant même l'étiquette du disque, car lors du transfert de l'exécution du périphérique à bootstrap it, il configure simplement le processeur pour qu'il englobe les informations du périphérique sous forme de code. S'il contient un code non valide, il déclenche une interruption. Le BIOS traite l'exception et passe au périphérique amorçable 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
, qui correspond au décalage de l'adresse IP actuelle par 0x63 (donc de 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 continue à 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 ne manque plus que deux éléments: la table de partition qui se trouve à offset 0x1be
et la signature MBR, 55aa
qui apparaît à la toute fin du secteur à offset 0x1fe
. 0x1be
est 446 décimal.
Ce qui suit va (bien sûr) rendre le périphérique non amorçable. Mais c'est ce que tu veux. Si vous ne voulez pas que votre périphérique ne puisse plus être démarré, ne le faites pas, mmm-kay? Je suppose que votre appareil est /dev/sdz
, tout simplement parce que peu de gens ont un /dev/sdz
et que cela réduit le risque qu'un débutant idiot copie les commandes en aveugle en les collant.
Commencez par copier 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 à titre de 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
est l'endroit où vous voyez 80
sur la sortie hexdumpée. Cela peut également être 00
et être toujours valide. (C'est le drapeau "bootable" 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
va presque jamais être 0x00
(c'est le plus généralement 0x01
mais cela peut prendre d’autres valeurs), vous pouvez comparer cela à votre backup.mbr
pour vous assurer que rien n’a été modifié après 0x1be
.
Une fois que vous êtes satisfait d'avoir appliqué correctement la modification, vous pouvez directement copier le fichier sur la première partie du disque. La raison pour laquelle vous souhaitez créer le fichier plutôt que /dev/zero
est pour des raisons de sécurité contre les fautes de frappe. Si vous omettez accidentellement count=1
, vous passerez un mauvais moment. Par contre, copier un fichier ne passera jamais au-delà de l'EOF. Donc c'est plus sûr.
Sudo dd if=backup.mbr.test of=/dev/sdz
Suivant hexdump
votre disque pour vous assurer que les modifications ont été prises comme prévu.
hexdump -C /dev/sdz | head
Comparez jusqu'à 0x200
avec backup.mbr.test
pour vous assurer que c'est ce que vous voulez.
Enfin, si quelque chose se passe mal 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.
Vous pouvez utiliser la commande dd sous Linux même (cela supprime la table de partition):
# dd if=/dev/null of=/dev/sdX bs=512 count=1
Supprimez simplement le MBR, sans la table de partition (voir le commentaire ci-dessous):
# dd if=/dev/null of=/dev/sdX bs=446 count=1
Remplacez /dev/hdX
par votre nom de périphérique actuel, par exemple /dev/hda
. Utilisez la commande fdisk -l
pour trouver le nom du périphérique:
# fdisk -l
Source
Après avoir lu le article Wikipedia sur le sujet, j'aimerais proposer quelques solutions supplémentaires:
Changer l'ordre de démarrage dans le BIOS :)
Le meilleur et le plus sûr: utilisez fdisk
pour supprimer l’indicateur "bootable" de toutes les partitions de ce lecteur. La plupart des MBR recherchent une partition "amorçable" à partir de laquelle charger en chaîne. Je m'attendrais donc à ce que GRUB ne fasse rien s'il n'y a pas de telles partitions. Je n'ai pas testé cependant.
Si cela ne résout pas le problème, essayez d'installer un clone gratuit de code MBR standard:
Installez le package mbr
et utilisez la commande install-mbr
comme ceci:
Sudo apt-get install mbr
Sudo install-mbr -i n -p D -t 0 /dev/sda
Crédits: COMMENT FAIRE: Récupérer Windows MBR à l'aide du CD Ubuntu LIVE
En lisant l'article de Wikipedia, j'ai l'impression que la seule chose qui identifie le MBR est sa signature qui se trouve à la toute fin du secteur (octets 510 et 511). Les 446 premiers octets de MBR sont supposés contenir des instructions machine. Le BIOS est supposé transférer le contrôle au chargeur de démarrage quel que soit le contenu réel des 446 premiers octets, à condition que la signature MBR soit présente:
Sur les ordinateurs compatibles IBM PC, le micrologiciel d'amorçage contenu dans le ROM BIOS charge et exécute l'enregistrement de démarrage principal. [14] ... Ainsi, le début du MBR devrait contenir le langage machine en mode réel. instructions. [14] Le BIOS lit le MBR du périphérique de stockage dans la mémoire physique, puis dirige le microprocesseur au début du code de démarrage.
En raison de la taille limitée de la section de code du MBR, celui-ci ne contient généralement qu'un petit programme qui copie du code supplémentaire (tel qu'un chargeur de démarrage) du périphérique de stockage dans la mémoire. Le contrôle est ensuite passé à ce code, qui est responsable du chargement du système d'exploitation réel.
...
La séquence bootstrap du BIOS charge le premier MBR valide trouvé dans la mémoire physique de l'ordinateur à l'adresse 0x7C00. La dernière instruction exécutée dans le code du BIOS sera un "saut" vers cette adresse, pour diriger l'exécution au début de la copie du MBR. La validation principale pour la plupart des BIOS est la signature 0xAA55 à la fin, bien qu'un implémenteur de BIOS puisse choisir d'inclure d'autres vérifications, par exemple en vérifiant que le MBR contient une table de partition valide sans entrées faisant référence à des secteurs dépassant la capacité indiquée du disque.
Donc, si j'ai bien compris, le MBR est toujours supposé contenir un chargeur de démarrage, et la remise à zéro de ses 446 premiers octets n'empêcherait pas le BIOS d'essayer de démarrer à partir du disque - mais il est probable que l'ordinateur se bloque lors de l'exécution d'un code non valide.
UPDATE: En outre, cet article suggère que, pour que le disque ait l’air "non amorçable", vous devriez réellement éditer la signature MBR sur le et du secteur (en utilisant n'importe quel éditeur de disque). Je ne sais pas si cela affectera le système d'exploitation quand il verra la table de partition sur le disque ... mais au moins, vous pourrez toujours modifier ces octets en arrière ...
Mon expérience avec
Sudo install-mbr -i n -p D -t 0 /dev/sda
c’est-à-dire qu’il a correctement désinstallé grub2 de /dev/sda
(où est installé Windows 7), de sorte que la première partie de la question "Comment supprimer grub de/dev/sda?" a été répondu.
Cependant, la deuxième partie de la question, qui est "Comment restaurer le MBR de/dev/sda?" n'a pas reçu de réponse depuis que la commande install-mbr
n'a pas pu restaurer le MBR. En conséquence, Windows ne démarre plus et le gestionnaire de démarrage Windows signale une erreur concernant un MBR endommagé et demande à l'utilisateur de réparer à partir d'un CD de réparation Windows.
Vieille question, mais comme cela m’est arrivé hier, j’ai résolu le problème de la manière suivante: j’ai éteint l’ordinateur, déconnecté physiquement le disque dur incriminé, remis en marche l’ordinateur, puis
~ $ Sudo update-grub
Cela fait, j’ai éteint l’ordinateur, reconnecté le disque dur et mon ancienne partition Windows 7, qui n’existait plus il ya 2 ans, ne s’est pas affichée - enfin.
Je comprends que cette solution est réaliste, mais que cela fonctionne. Un jour, je vais effacer totalement le disque dur et toute trace de GRUB disparaîtra.
Une autre solution plus simple.
Dans mon cas, j’avais Debian Linux mais je voulais utiliser Mandriva, cela fonctionnera aussi pour d’autres
Eteignez votre ordinateur, puis retirez le disque qui démarre que vous ne voulez pas démarrer (qui a grub)
Il suffit de placer un usb amorçable à partir de la mandriva iso ou d’une autre variante que vous souhaitez installer; il existe des outils permettant de créer des clés USB amorçables à partir de fichiers iso, utilisez Google (ou vous pouvez utiliser un programme d’installation gravé à partir d’un CD-ROM).
Maintenant, la plupart des installateurs Linux vous donnent le choix de ce qu’il faut faire, essayer de jouer/utiliser pour l’évaluation ou Linux portable ou exécuter le programme d’installation pour l’installer. À ce stade, nous attendons simplement (déplacez le curseur vers le bas pour que l'écran attende, mais n'appuyez pas sur Entrée ni cliquez avec la souris).
Rappelez-vous qu’à ce stade, votre lecteur USB/ou/CDRom a démarré et est en cours d’exécution. il est maintenant temps de brancher le disque dur que nous avons temporairement enlevé, attendez une minute (certains bios nécessitent une petite attente, une minute suffit)
Continuez le processus d’installation car la plupart des programmes d’installation contiennent des outils de partitionnement, vous pouvez faire ce que vous voulez. Eh bien, c'est une solution simple, je me suis débarrassé d'une ancienne configuration de Linux simplement en tant que débutant