Comment désinstaller GRUB?

19

Un disque dur que j'utilise uniquement pour le stockage de données a toujours GRUB des anciennes installations Ubuntu.

Comment puis-je en supprimer GRUB sans nuire au reste des données du disque?

Contexte

Je déplace occasionnellement le lecteur de données entre des ordinateurs avec différentes configurations d'ordre de démarrage, donc je voudrais qu'il ne soit pas amorçable afin d'éviter d'avoir à l'adapter dans les paramètres BIOS de chaque ordinateur.

Lorsque j'allume un ordinateur alors que seul le lecteur de données est connecté, le message suivant s'affiche:

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

Je peux confirmer à partir d'anciennes sauvegardes /etc/fstabque c'était l'UUID d'une partition racine que j'ai récemment reformaté et qui n'existe plus . Voici la table de partition du lecteur de données et l' enregistrement de démarrage principal brut .

Veuillez noter que je ne suis pas intéressé par les solutions de contournement qui ne répondent pas à ma question principale. Je peux penser à plusieurs façons de contourner ce problème, mais cela me dérange par principe de ne pas savoir comment le résoudre directement. Chaque procédure d'installation doit avoir une procédure de désinstallation homologue.

ændrük
la source
Juste curieux - si vous supprimez les fichiers dans / boot / grub (ce que j'ai supposé que vous avez fait), le code mbr importe-t-il vraiment? Je ne pense pas qu'il sera utilisé par autre chose, n'est-ce pas? Je pourrais me tromper, mais je ne pense pas que ce serait utilisé, et je détesterais me débrouiller avec quelque chose à un niveau si bas si je me souciais des données.
Marty Fried
Pouvez-vous vider les données brutes du MBR et les publier ici? Vous devriez pouvoir faire quelque chose comme ça sfdisk -d /dev/sdb > sdb.out.
Percée

Réponses:

25

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 63celle 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 0x1beet la signature MBR, 55aaqui se produit à la toute fin du secteur à l'offset 0x1fe. 0x1beest 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, 0x1bec'est là que vous voyez 80sur la sortie hexadumped, cela peut également être 00et ê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 à 0x1bfbien sera presque jamais être 0x00(ce qui est le plus souvent , 0x01mais cela peut prendre d' autres valeurs) vous pouvez comparer cela à votre backup.mbrpour vous assurer que rien du passé 0x1ben'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/zeronouveau est pour la sécurité contre les fautes de frappe. Si vous omettez accidentellement count=1que 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 hexdumpvotre disque, assurez-vous que les modifications ont pris comme prévu.

hexdump -C /dev/sdz | head

Comparez 0x200contre backup.mbr.testpour 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.

OmnipotentEntity
la source
1
Je vous donne un plus pour anticiper et prévenir une grave erreur noob.
psitae
Merci beaucoup, j'ai fait de mon mieux pour éviter autant d'erreurs noob que possible: faire une sauvegarde, ne pas écrire directement sur le périphérique de bloc en cas d' countoubli, ne pas utiliser directement un nom de périphérique de bloc commun, en spécifiant que le fichier de sauvegarde doit être créé hors de l'appareil en cours de changement, un exemple de ce à quoi ressemble une compensation réussie, comment annuler si vous visser. Je suppose que si vous êtes assez bien informé pour savoir ce que je veux dire, vous pouvez passer à travers les étapes de bébé et faire tout cela en une seule commande. Mais je ne vais pas vous donner cette commande si vous apprenez encore. ;)
OmnipotentEntity
2

AVERTISSEMENT: EXTRÊMEMENT DANGEREUX

Vous pouvez utiliser la commande dd de Linux lui-même (il supprime la table de partition):

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

Supprimez simplement MBR, sans la table de partition (voir le commentaire ci-dessous):

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

Remplacez /dev/hdXpar le nom réel de votre appareil tel que /dev/hda. Utilisez la fdisk -lcommande pour connaître le nom du périphérique:

# fdisk -l

La source

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/
Tachyons
la source
Ces nombres d'octets semblent inconfortablement arbitraires. Savez-vous si ce sont les mêmes pour GRUB2?
ændrük
1
Le nombre d'octets est dû au fait que la table de partition se situe entre 446 et 512. Bien sûr, cela pose la question de savoir pourquoi vous souhaitez supprimer le grub MBR ... cela ne fait de mal à rien de rester assis là inutilisé. Si vous voulez un autre chargeur de démarrage à la place, installez-le simplement et il remplacera grub.
psusi
3
Wow, ce type de réponse devrait avoir "AVERTISSEMENT: EXTRÊMEMENT DANGEREUX" écrit en grosses lettres rouges partout. Je suis sûr que l'OP est capable de faire cela, mais je détesterais voir un utilisateur débutant copier-coller la première commande dans le terminal sans même savoir ce qu'est la "table de partition"
Sergey
1
Ne fais pas ça . La première commande effacera la table de partition (comme l'OP l'a mentionné), mais la deuxième commande provoquera un comportement indéfini si le MBR n'est pas configuré correctement.
Percée
1
Umm .. Je ne sais pas pourquoi vous flippez, les commandes que les tachyons ont collées ne font rien du tout. Vous pouvez tester avec 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. Comme vous pouvez le voir, ce /dev/nulln'est pas une source 0, c'est une source EOF. ddne peut pas et ne copiera rien de ce que /dev/nullvous devez utiliser /dev/zero. Deuxième @Breakthrough, aucun comportement indéfini n'est possible si le premier octet du secteur 0 est 0x00. Je ne sais pas pourquoi tu penses ça.
OmnipotentEntity
1

Mon expérience avec

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

est qu'il a réussi à désinstaller grub2 de /dev/sda(où mon Windows 7 est installé), donc la première partie de la question "Comment supprimer grub de / dev / sda?" a été répondu.

Cependant, la 2ème partie de la question, qui est "Comment restaurer le MBR de / dev / sda?" n'a pas reçu de réponse car la install-mbrcommande n'a pas pu restaurer le MBR. Par conséquent, 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.

utilisateur ubuntu-13.10
la source
1

Après avoir lu l'article Wikipédia sur le sujet, je voudrais proposer quelques solutions supplémentaires:

  1. Changer l'ordre de démarrage dans le BIOS :)

  2. Le meilleur et le plus sûr: utilisez fdiskpour supprimer l'indicateur "bootable" de toutes les partitions sur ce disque. La plupart des MBR recherchent une partition "bootable" à partir de laquelle charger en chaîne, donc je m'attends à ce que GRUB ne fasse rien s'il n'y a pas de telles partitions. N'ont cependant pas été testés.

    Si ce qui précède ne vous aide pas, essayez d'installer un clone gratuit de code MBR standard:

  3. Installez le mbrpackage et utilisez la install-mbrcommande 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 en utilisant Ubuntu LIVE CD

En lisant l'article de Wikipédia, j'ai l'impression que la seule chose qui identifie le MBR est sa signature qui est à la toute fin du secteur (octets 510 et 511). Les 446 premiers octets de MBR censés contenir des instructions machine. Le BIOS est censé 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 microprogramme d'amorçage contenu dans le BIOS ROM se charge et exécute l'enregistrement de démarrage principal. [14] ... Ainsi, le début du MBR devrait contenir des instructions en langage machine en mode réel. [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 restreinte de la section de code du MBR, il 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 transmis à ce code, qui est responsable du chargement du système d'exploitation réel.

...

La séquence d'amorçage dans le BIOS chargera le premier MBR valide qu'il trouve dans la mémoire physique de l'ordinateur à l'adresse 0x7C00. La dernière instruction exécutée dans le code BIOS sera un "saut" à cette adresse, pour diriger l'exécution au début de la copie MBR. La validation principale pour la plupart des BIOS est la signature 0xAA55 à la fin, bien qu'un implémenteur du BIOS puisse choisir d'inclure d'autres vérifications, telles que la vérification que le MBR contient une table de partition valide sans entrées faisant référence aux secteurs au-delà de la capacité déclarée du disque.

Donc, je crois comprendre que MBR est toujours censé contenir un chargeur de démarrage, et la remise à zéro des 446 premiers octets de celui-ci n'empêcherait pas le BIOS d'essayer de démarrer à partir du disque - mais il est probable que l'ordinateur se bloque tout en essayant d'exécuter du code non valide.

MISE À JOUR: En outre, cet article suggère que pour que le disque semble "non amorçable" pour le BIOS, vous devez réellement modifier la signature MBR au niveau du secteur (en utilisant n'importe quel éditeur de disque). Je ne sais pas si cela va affecter le système d'exploitation en voyant la table de partition sur le disque ... mais au moins, vous pouvez toujours modifier ces octets en arrière ...

Sergey
la source
0

Une autre solution plus simple.

Dans mon cas, j'avais Debian Linux mais je voulais utiliser Mandriva, cela fonctionnera aussi pour les autres

Éteignez votre PC, puis retirez le disque qui démarre que vous ne voulez pas démarrer (qui a grub)

Mettez simplement une clé USB amorçable à partir de l'iso Mandriva ou d'une autre variante que vous souhaitez installer.Il existe des outils pour créer des clés USB amorçables à partir de fichiers ISO, utilisez Google (ou vous pouvez nous utiliser un programme d'installation gravé à partir du CD-ROM)

Maintenant, la plupart des installateurs Linux vous donnent le choix de quoi faire, essayez de jouer / utiliser pour l'évaluation ou Linux portable ou exécutez 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 ou cliquez avec la souris).

Rappelez-vous simplement qu'à ce stade, votre USB / ou / CDRom a démarré et est en cours d'exécution. maintenant il est temps de rebrancher le disque dur que nous avons temporairement retiré attendez une minute (certains bios nécessitent une petite attente une minute est plus que suffisant)

Continuez le processus de configuration car la plupart des installateurs contiennent des outils de partition, vous pouvez faire ce que vous voulez. Eh bien, c'est une solution simple, je me suis débarrassé d'une ancienne configuration Linux simplement en tant que débutant

peter
la source
0

Vieille question, mais comme cela m'est arrivé hier, je l'ai résolu comme ceci: j'ai éteint l'ordinateur, déconnecté physiquement le disque dur incriminé, redémarré 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 depuis il y a 2 ans, ne s'est pas présentée - enfin.

Je comprends que c'est une solution terre à terre, mais cela fonctionne. Un jour, j'effacerai complètement ce disque dur et toute trace restante de GRUB disparaîtra.

ElStellino
la source