Come disinstallare GRUB?

18

Un disco rigido che uso solo per l'archiviazione dei dati ha ancora GRUB dalle precedenti installazioni di Ubuntu.

Come posso rimuovere GRUB da esso senza danneggiare il resto dei dati del drive?

Sfondo

Ogni tanto sposto l'unità di dati tra computer con varie configurazioni di ordini di avvio, quindi mi piacerebbe che fosse non avviabile per evitare di doverlo sistemare nelle impostazioni del BIOS di ciascun computer.

Quando accendo un computer mentre è collegata solo l'unità dati, viene visualizzato quanto segue:

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

Posso confermare dai vecchi backup di /etc/fstab che questo era l'UUID di una partizione di root che ho recentemente riformattato e che non esiste più . Ecco la tabella delle partizioni del data drive e raw record di avvio principale .

Tieni presente che non sono interessato a soluzioni alternative che non rispondono alla mia domanda principale. Posso pensare a diversi modi per ovviare a questo problema, ma in linea di principio mi infastidisce il fatto che non so come risolverlo direttamente. Ogni procedura di installazione dovrebbe avere una procedura di disinstallazione controparte.

    
posta ændrük 04.05.2012 - 03:58

6 risposte

24

Puoi rendere il dispositivo non avviabile semplicemente creando i primi pochi byte del disco 0x00.

Tipicamente (e questo è vero sia per grub, grub2 e ntldr iirc) il primo byte del tuo disco sarà un'istruzione j86 x86. Ciò si verifica anche prima di disklabel, perché quando si passa l'esecuzione al dispositivo per eseguirne il bootstrap, imposta semplicemente la CPU per l'aspirazione delle informazioni del dispositivo come codice. Se ha codice non valido, attiva un interrupt e il BIOS gestisce l'eccezione e passa al successivo dispositivo avviabile.

Ad esempio, l'inizio del mio disco inizia con:

00000000  eb 63 90 d0 bc 00 7c fb  50 07 50 1f fc be 1b 7c  |.c....|.P.P....||

La prima parte è eb 63 che è Jump to offset 0x63 dall'IP corrente (quindi a 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'esecuzione continua da qui.

La fine del settore è simile a questa:

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.|

Se il disco è formattato come tabella di partizione MBR, è necessario che siano presenti due elementi, la tabella delle partizioni che è in offset 0x1be e la firma MBR, 55aa che si verifica alla fine del settore a offset 0x1fe . 0x1be è decimale 446.

Quanto segue (ovviamente) rende il dispositivo non avviabile. Ma questo è quello che vuoi. Se non vuoi rendere il tuo dispositivo non in grado di essere avviato, non farlo, mmm-kay? Suppongo che il tuo dispositivo sia /dev/sdz , semplicemente perché non molte persone hanno un /dev/sdz , e questo riduce il rischio che alcuni inesperti novizi copino ciecamente i comandi di incollamento.

Per prima cosa, copia l'MBR in un file per un backup.

sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1

Quindi, crea una copia di quel file:

cp backup.mbr backup.mbr.test

Successivamente, dobbiamo creare un dispositivo di loopback (in modo che i contenuti non vengano troncati). E applicare le modifiche sul nostro settore falso 0 come 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 del file e assicurati che l'intera tabella delle partizioni sia intatta:

sudo hexdump -C backup.mbr.test

Dovresti vedere qualcosa del tipo:

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

Ora, 0x1be è dove vedi 80 sull'output hexdumped, anche questo può essere 00 ed essere ancora valido. (È il flag "avviabile" nella tabella delle partizioni, puoi lasciarlo da solo, perché è completamente ignorato dai più moderni BIOS ...) Il byte in 0x1bf però quasi mai sarà 0x00 (è più comunemente 0x01 ma può assumere altri valori) puoi confrontarlo con backup.mbr per assicurarti che nulla oltre 0x1be sia cambiato.

Una volta che sei soddisfatto di aver applicato correttamente la modifica, puoi copiare direttamente il file sulla prima parte del disco. Il motivo per cui vuoi eseguire di nuovo il file anziché /dev/zero è la sicurezza contro gli errori di battitura. Se accidentalmente ometti count=1 avrai un brutto momento, la copia di un file dall'altra parte non funzionerà mai oltre l'EOF, mai. Quindi è più sicuro.

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

Successivo hexdump del tuo disco per assicurarti che le modifiche siano state effettuate come previsto.

hexdump -C /dev/sdz | head

Confronta fino a 0x200 contro backup.mbr.test per assicurarti che sia quello che desideri.

Infine, se qualcosa si infrange per qualsiasi motivo, puoi semplicemente copiare il backup dell'MBR sul drive tramite:

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

Spero che questo aiuti.

    
risposta data OmnipotentEntity 26.07.2012 - 20:22
2

ATTENZIONE: ESTREMAMENTE PERICOLOSO

Puoi usare il comando dd da Linux stesso (rimuove la tabella delle partizioni):

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

Rimuovi MBR, senza la tabella delle partizioni (vedi commento sotto):

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

Sostituisci /dev/hdX con il tuo nome dispositivo effettivo come /dev/hda . Utilizza il comando fdisk -l per scoprire il nome del dispositivo:

# fdisk -l

Sorgente

  1. link
risposta data Tachyons 04.05.2012 - 04:05
1

La mia esperienza con

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

, ha disinstallato correttamente grub2 da /dev/sda (dove è installato il mio Windows 7), quindi la prima parte della domanda "Come rimuovere grub da / dev / sda?" è stata data una risposta.

Tuttavia, la seconda parte della domanda, che è "Come ripristinare l'MBR di / dev / sda?" non è stata data una risposta poiché il comando install-mbr non è riuscito a ripristinare l'MBR. Di conseguenza, Windows non si avvia più e il gestore di avvio di Windows segnala un errore relativo a un MBR danneggiato e chiede all'utente di riparare da un CD di ripristino di Windows.

    
risposta data ubuntu-13.10 user 12.12.2013 - 08:14
1

Dopo aver letto l'articolo Wikipedia sull'argomento, vorrei proporre alcune soluzioni aggiuntive:

  1. Cambia l'ordine di avvio nel BIOS:)

  2. Il migliore e il più sicuro: usa fdisk per rimuovere il flag "avviabile" da qualsiasi partizione su quella unità. La maggior parte degli MBR cerca una partizione "avviabile" da caricare a catena, quindi mi aspetto che GRUB non faccia nulla se non ci sono tali partizioni. Non ho provato però.

    Se quanto sopra non aiuta, prova a installare un clone gratuito di codice MBR standard:

  3. Installa il pacchetto mbr e usa il comando install-mbr in questo modo:

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

Crediti: COME: Ripristinare l'MBR di Windows utilizzando il CD di Ubuntu LIVE

Dalla lettura dell'articolo di Wikipedia, ho l'impressione che l'unica cosa che identifica l'MBR sia la sua firma che si trova alla fine del settore (byte 510 e 511). I primi 446 byte di MBR dovrebbero contenere istruzioni della macchina. Il BIOS dovrebbe trasferire il controllo al bootloader indipendentemente dal contenuto effettivo dei primi 446 byte, a condizione che sia presente la firma MBR:

% Bl0ck_qu0te%

Quindi la mia comprensione è che MBR è sempre che dovrebbe contenere un bootloader, e azzerare i primi 446 byte non impedirebbe al BIOS di provare ad avviarsi dal disco - ma è probabile che faccia il computer si blocca durante il tentativo di eseguire codice non valido.

UPDATE: Inoltre, questo articolo suggerisce che per fare in modo che il disco appaia "un -avviabile "per BIOS si dovrebbe effettivamente modificare la firma MBR al e del settore (utilizzando qualsiasi editor del disco). Non sono sicuro che interesserà il SO vedendo la tabella delle partizioni sul disco ... ma almeno puoi sempre modificare quei byte ...

    
risposta data Sergey 04.05.2012 - 06:51
0

Un'altra soluzione più semplice.

Nel mio caso ho avuto Debian Linux ma volevo usare Mandriva, funzionerà anche per altri

Spegni il pc, quindi rimuovi il disco che si avvia che non vuoi avviare (che contiene grub)

Inserisci semplicemente una chiavetta USB avviabile da mandriva iso o un'altra variante che ti piace installare ci sono strumenti per rendere le chiavette usb avviabili dai file iso usare google (oppure potresti usare un programma di installazione masterizzato da cd rom)

Ora la maggior parte degli installatori di Linux ti danno la possibilità di scegliere cosa fare, provare e giocare / utilizzare per la valutazione o Linux portatile o eseguire l'installazione per installarlo. A questo punto non ci resta che attendere (spostare il cursore verso il basso in modo che lo schermo attenda ma non premere enter o fare clic con il mouse).

Basta ricordare a questo punto che il tuo USB / o / CDRom è stato avviato ed è in esecuzione. ora è il momento di ricollegare il disco rigido che temporaneamente abbiamo rimosso aspetta un minuto (alcuni bios richiedono una piccola attesa al minuto è più che sufficiente)

Continua il processo di installazione poiché molti programmi di installazione contengono strumenti per le partizioni che puoi fare tutto ciò che vuoi. beh è una soluzione semplice, mi sono liberato di una vecchia configurazione Linux semplicemente come principiante

    
risposta data peter 12.10.2012 - 00:11
0

Vecchia domanda, ma come è successo a me ieri, l'ho risolto in questo modo: ho spento il computer, disconnesso fisicamente il disco rigido incriminato, riavviato il computer, quindi

~ $ sudo update-grub

Fatto questo, spengo il computer, ricollego il disco rigido e la mia vecchia partizione di Windows 7, che non esiste più da 2 anni, non si presentava, finalmente.

Capisco che questa sia una soluzione semplice, ma funziona. Un giorno pulirò completamente quel disco rigido e qualsiasi traccia residua di GRUB sparirà.

    
risposta data ElStellino 18.06.2016 - 17:31

Leggi altre domande sui tag