Question Comment désinstaller GRUB?


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

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

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 soit non amorçable afin d'éviter d'avoir à l'adapter dans les paramètres du BIOS de chaque ordinateur.

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

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

Je peux confirmer d'anciennes sauvegardes de /etc/fstab que c'était le UUID d'une partition racine que j'ai récemment reformaté et qui n'existe plus. Voici le lecteur de données table de partition et cru enregistrement de démarrage principal.

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 en principe de ne pas savoir comment le résoudre directement. Chaque procédure d'installation doit avoir une procédure de désinstallation homologue.


18
2018-05-04 01:58


origine


Juste curieux - si vous supprimez les fichiers dans / boot / grub (ce que je suppose que vous avez fait), le code mbr est-il vraiment important? Je ne pense pas que ça va être utilisé par autre chose, n'est-ce pas? Je peux me tromper, mais je ne pense pas que ce serait le cas, et je détesterais avoir quelque chose à un si bas niveau 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 sfdisk -d /dev/sdb > sdb.out. - Breakthrough


Réponses:


Vous pouvez rendre l'appareil non amorçable simplement en faisant les premiers octets du disque 0x00.

Typiquement (et cela est vrai à la fois pour grub, grub2 et ntldr iirc), le tout premier octet de votre disque va être une instruction jmp x86. Cela se produit avant même l'étiquette de disque, car lors de l'exécution d'une exécution sur le périphérique pour l'amorcer, cela définit simplement le processeur à aspirer les informations du périphérique en tant que 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 qui est Jump pour décaler 0x63 de l'adresse IP actuelle (donc à 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 n’a besoin que de deux éléments: la table de partition qui est en décalage. 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 (bien sûr) rendent le périphérique non démarrable. Mais c'est ce que vous voulez. Si vous ne voulez pas que votre appareil soit incapable de démarrer, ne le faites pas, mmm-kay? Je suppose que votre appareil est /dev/sdz, simplement parce que peu de gens ont un /dev/sdz, et cela réduit le risque de certaines commandes imbéciles de copier-coller aveugles.

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 (pour que le contenu ne soit pas tronqué). Et appliquer les modifications sur notre faux secteur 0 en tant que 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

À présent, 0x1be est où tu vois 80 sur la sortie hexdumped, cela peut aussi être 00et toujours être valide. (Il s'agit de l'indicateur "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 mais sera presque jamais être 0x00 (c'est le plus souvent 0x01 mais il peut prendre d'autres valeurs), vous pouvez comparer cela contre votre backup.mbr pour s'assurer que rien ne passe 0x1be est changé.

Une fois que vous êtes satisfait d'avoir appliqué la modification correctement, vous pouvez directement copier le fichier sur la première partie du disque. La raison pour laquelle vous voulez faire le fichier plutôt que /dev/zero encore une fois pour la sécurité contre les fautes de frappe. Si vous omettez accidentellement count=1 vous allez passer un mauvais moment, copier un fichier d'autre part ne dépassera jamais l'EOF, jamais. C'est donc plus sûr.

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

Prochain hexdump votre disque pour vous assurer que les modifications ont été prises comme prévu.

hexdump -C /dev/sdz | head

Comparez jusqu'à 0x200 contre backup.mbr.test pour vous assurer que c'est ce que vous voulez.

Enfin, si quelque chose se referme pour quelque raison que ce soit, vous pouvez simplement copier la sauvegarde du MBR sur le disque via:

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

J'espère que cela t'aides.


24
2017-07-26 18:22



Je vous donne un plus pour anticiper et prévenir une grave erreur de noob. - psitae
Merci beaucoup, j'ai fait de mon mieux pour éviter autant d'erreurs que possible: faire une sauvegarde, ne pas écrire directement sur le périphérique de bloc au cas où count est oublié, ne pas utiliser directement un nom de périphérique de bloc commun, spécifiant que le fichier de sauvegarde doit être fait de l'appareil en cours de modification, un exemple de ce à quoi ressemble une suppression réussie, comment annuler si vous foirez. Je pense que si vous êtes suffisamment informé pour savoir à quoi je veux en venir, vous pouvez franchir les étapes du bébé et faire tout cela en une seule commande. Mais je ne vais pas vous donner cette commande si vous continuez à apprendre. ;) - OmnipotentEntity


AVERTISSEMENT: EXTRÊMEMENT DANGEREUX

Vous pouvez utiliser la commande dd de Linux lui-même (cela 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 commentaire ci-dessous):

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

Remplacer /dev/hdX avec votre nom d'appareil tel que /dev/hda. Utilisation fdisk -l commande pour trouver le nom du périphérique:

# fdisk -l

La source

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/

2
2018-05-04 02:05



Ces comptages d'octets semblent inconfortablement arbitraires. Savez-vous si elles sont identiques pour GRUB2? - ændrük
Le nombre d'octets est dû au fait que la table de partition se situe entre 446 et 512. Bien sûr, cela soulève la question de savoir pourquoi vous souhaitez supprimer le MBR grub ... il ne blesse rien juste assis inutilisé. Si vous voulez un autre chargeur de démarrage, installez-le et il remplacera grub. - psusi
Waouh, ce type de réponse devrait avoir "AVERTISSEMENT: EXTREMEMENT DANGEREUX" écrit en grandes lettres rouges partout. Je suis sûr que l'OP est capable de faire cela, mais je détesterais voir un nouvel utilisateur copier-coller la première commande dans le terminal sans même savoir ce qu'est la "table de partition". - Sergey
Faire ne pas fais ça. La première commande va effacer la table de partition (comme indiqué par l'OP), mais la seconde commande provoquera un comportement indéfini si le MBR n'est pas configuré correctement. - Breakthrough
Euh ... je ne sais pas pourquoi vous les pestes, 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 /dev/null n'est pas une source 0, c'est une source EOF. dd ne peut et ne veut rien copier de /dev/null vous 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


Mon expérience avec

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

est, que 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 deuxième partie de la question, qui est "Comment restaurer le MBR de / dev / sda?" n'a pas été répondu depuis le install-mbr commande n'a pas réussi à 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.


1
2017-12-12 07:14





Après avoir lu le Article de Wikipedia sur le sujet, j'aimerais proposer quelques solutions supplémentaires:

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

  2. Le meilleur et le plus sûr: utiliser fdisk pour supprimer l'indicateur "bootable" de toutes les partitions de ce lecteur. La plupart des MBR recherchent une partition "bootable" à partir de laquelle la chaîne sera chargée, donc je m'attendrais à ce que GRUB ne fasse rien si de telles partitions n'existent pas. Je n'ai pas testé cependant.

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

  3. Installer mbr paquet et utilisation install-mbr commande 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 Wikipedia, j'ai l'impression que la seule chose qui identifie le MBR est sa signature qui se trouve tout au bout du secteur (octets 510 et 511). Les 446 premiers octets du MBR sont 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 micrologiciel d'amorçage contenait   dans le BIOS ROM charge et exécute l'enregistrement de démarrage principal. [14] ...   Ainsi, le début du MBR devrait contenir le mode réel   instructions en langage machine [14] Le BIOS lit le MBR à partir 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, elle est généralement   contient uniquement un petit programme qui copie un code supplémentaire (comme un   boot loader) du périphérique de stockage en mémoire. Le contrôle est alors   passé à ce code, qui est chargé de charger le réel   système opérateur.

...

La séquence de démarrage du BIOS chargera le premier MBR valide   il trouve dans la mémoire physique de l'ordinateur à l'adresse 0x7C00. le   la dernière instruction exécutée dans le code du BIOS sera un "saut" à cette   adresse, pour diriger l'exécution au début de la copie MBR. le   la validation primaire pour la plupart des BIOS est la signature 0xAA55 à la fin,   bien qu'un réalisateur de BIOS puisse choisir d'inclure d'autres contrôles, tels que   vérifier que le MBR contient une table de partition valide sans   les entrées faisant référence à des secteurs au-delà de la capacité rapportée du disque.

Donc, ma compréhension est que MBR est toujours supposé contenir un chargeur de démarrage, et mettre à zéro les 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 en essayant d'exécuter du code non valide.

METTRE À JOUR: Aussi, Cet article suggère que pour que le disque paraisse "non-bootable" pour le BIOS, vous devez en fait éditer la signature MBR au niveau du secteur et du secteur (en utilisant n'importe quel éditeur de disque). Je ne sais pas si cela va affecter le système d'exploitation voyant la table de partition sur le disque si ... mais au moins vous pouvez toujours modifier ces octets ...


1
2018-05-04 04:51





Une autre solution plus simple.

Dans mon cas, j'ai eu Debian Linux mais je voulais utiliser Mandriva, ça marcherait aussi pour les autres

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

Il suffit de mettre dans un usb bootable à partir de l'iso mandriva ou une autre variante que vous souhaitez installer, il existe des outils pour faire des clés USB bootables à partir de fichiers iso google (ou vous pourriez nous un installateur gravé de 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 ou cliquez avec la souris).

Il suffit de rappeler à ce stade que 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 supprimé attendez une minute (certains bios nécessitent une petite attente une minute plus que suffisante)

Continuez à configurer le processus car la plupart des installateurs contiennent des outils de partition que vous pouvez faire comme vous le souhaitez. bien c'est une solution simple, je me suis débarrassé d'une ancienne installation linux simplement en tant que débutant


0
2017-10-11 22:11





Ancienne question, mais comme cela m'est arrivé hier, je l'ai résolu comme suit: j'ai éteint l'ordinateur, déconnecté physiquement le disque dur incriminé, redémarré l'ordinateur, puis

~ $ sudo update-grub

Fait cela, j'ai éteint l'ordinateur, reconnecté le disque dur et mon ancienne partition Windows 7, qui n'existe plus depuis 2 ans, ne s'est pas présentée - enfin.

Je comprends que c'est une solution réaliste, mais ça marche. Un jour, je vais effacer complètement ce disque dur et toute trace de GRUB disparaîtra.


0
2018-06-18 15:31