Come disinstallare GRUB?


19

Un disco rigido che utilizzo 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 dell'unità?

sfondo

Di tanto in tanto sposto l'unità dati tra computer con varie configurazioni dell'ordine di avvio, quindi vorrei che non fosse avviabile per evitare di doverlo inserire 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 /etc/fstabche questo era l'UUID di una partizione di root che ho recentemente riformattato e che non esiste più . Ecco la tabella delle partizioni dell'unità dati e il record di avvio principale non elaborato .

Si noti che non sono interessato a soluzioni alternative che non rispondono alla mia domanda principale. Posso pensare a diversi modi per aggirare questo problema, ma mi dà fastidio per principio che non so come risolverlo direttamente. Ogni procedura di installazione dovrebbe avere una procedura di disinstallazione della controparte.


Solo curioso: se elimini i file in / boot / grub (cosa che supponevo avessi fatto), il codice mbr ha davvero importanza? Non penso che verrà utilizzato da nient'altro, vero? Potrei sbagliarmi, ma non penserei che sarebbe stato usato, e oderei andare in giro con qualcosa di così basso livello se mi preoccupassi dei dati.
Marty Fried,

Puoi scaricare i dati grezzi MBR e pubblicarli qui? Dovresti essere in grado di fare qualcosa del genere sfdisk -d /dev/sdb > sdb.out.
Breakthrough

Risposte:


25

È possibile rendere il dispositivo non avviabile semplicemente rendendo i primi pochi byte del disco 0x00.

In genere (e questo vale sia per grub, che per grub2 e ntldr iirc) il primo byte del tuo disco sarà un'istruzione x86 jmp. Ciò si verifica anche prima dell'etichetta del disco, poiché quando si passa l'esecuzione al dispositivo per l'avvio, imposta semplicemente la CPU in modo che assorba le informazioni del dispositivo come codice. Se ha un codice non valido, attiva un interrupt e il BIOS gestisce l'eccezione e passa al successivo dispositivo di avvio.

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 63Jump per compensare 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 si presenta così:

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 delle partizioni MBR, devono essere presenti solo due elementi: la tabella delle partizioni che è in offset 0x1bee la firma MBR, 55aache si verifica alla fine del settore in offset 0x1fe. 0x1beè 446 decimale.

Ciò che segue (ovviamente) renderà il dispositivo non avviabile. Ma questo è quello che vuoi. Se non vuoi rendere impossibile l'avvio del tuo dispositivo, 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 di alcuni principianti idioti che copiano ciecamente i comandi di incollaggio.

Innanzitutto, 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 0 falso 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 il file e assicurarsi 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 80l'output in dumping, questo può anche essere 00ed essere ancora valido. (E 'il flag "bootable" nella tabella delle partizioni, si può lasciare da solo, perché è del tutto ignorato dalla maggior parte dei BIOS moderni ...) Il byte a 0x1bfse sarà quasi mai essere 0x00(è più comunemente 0x01, ma può prendere altri valori) si puoi confrontare questo con il tuo backup.mbrper assicurarti che nulla di passato 0x1besia cambiato.

Una volta verificato che hai applicato correttamente la modifica, puoi copiare direttamente il file sulla prima parte del disco. Il motivo per cui si desidera eseguire il file piuttosto che di /dev/zeronuovo è per sicurezza contro errori di battitura. Se ometti per sbaglio count=1di avere un brutto momento, la copia di un file d'altro canto non passerà mai oltre l'EOF, mai. Quindi è più sicuro.

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

Successivamente, hexdumpil disco deve assicurarsi che le modifiche abbiano preso come previsto.

hexdump -C /dev/sdz | head

Confronta fino a 0x200contro backup.mbr.testper assicurarti che sia quello che vuoi.

Infine, se qualcosa non funziona per qualsiasi motivo, puoi semplicemente copiare il backup dell'MBR nell'unità tramite:

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

Spero che sia di aiuto.


1
Ti sto dando un vantaggio per anticipare e prevenire un grave errore noob.
psitae

Grazie mille, ho fatto del mio meglio per prevenire il maggior numero possibile di errori Noob: fare un backup, non scrivere direttamente sul dispositivo a blocchi nel caso countvenga dimenticato, non usare direttamente un nome di dispositivo a blocchi comune, specificando che il file di backup dovrebbe essere fatto al di fuori del dispositivo che viene modificato, un esempio di come appare una cancellazione riuscita, come annullare se si rovina. Immagino che se sei abbastanza esperto da sapere cosa sto ottenendo, puoi tagliare i piccoli passi e fare tutto questo in un solo comando. Ma non ti darò quel comando se stai ancora imparando. ;)
OmnipotentEntity

2

ATTENZIONE: ESTREMAMENTE PERICOLOSO

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

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

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

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

Sostituisci /dev/hdXcon il nome del tuo dispositivo come /dev/hda. Utilizzare il fdisk -lcomando per scoprire il nome del dispositivo:

# fdisk -l

fonte

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

Quei conteggi di byte sembrano arbitrariamente scomodi. Sai se sono gli stessi per GRUB2?
ændrük,

1
Il conteggio dei byte è dovuto al fatto che la tabella delle partizioni è compresa tra 446 e 512. Ovviamente, questo pone la domanda sul perché si desidera rimuovere l'MBR di grub ... non fa male a nulla rimanendo semplicemente inutilizzati. Se invece vuoi un altro boot loader, installalo e sostituirà grub.
psusi

3
Caspita, questo tipo di risposta dovrebbe avere "ATTENZIONE: ESTREMAMENTE PERICOLOSO" scritto con grandi lettere rosse su di esso. Sono sicuro che l'OP è in grado di fare questo, ma odio vedere qualche utente inesperto copiare e incollare il primo comando nel terminale senza nemmeno sapere cosa sia la "tabella delle partizioni"
Sergey,

1
Do Non fare questo . Il primo comando cancellerà la tabella delle partizioni (come menzionato dall'OP), ma il secondo comando causerà un comportamento indefinito se l'MBR non è configurato correttamente.
Breakthrough

1
Umm .. Non so perché voi ragazzi stiate andando fuori di testa, i comandi che i tachioni hanno incollato non fanno niente. È possibile verificare con 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. Come puoi vedere /dev/nullnon è una fonte 0, è una fonte EOF. ddnon è possibile e non copiare nulla da /dev/nullutilizzare /dev/zero. Secondo @Breakthrough, nessun comportamento indefinito è possibile se il primo byte del settore 0 è 0x00. Non so perché lo pensi.
OmnipotentEntity il

1

La mia esperienza con

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

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

Tuttavia, la seconda parte della domanda, che è "Come posso ripristinare l'MBR di / dev / sda?" non ha ricevuto risposta poiché il install-mbrcomando non è riuscito a ripristinare l'MBR. Di conseguenza, Windows non si avvia più e il boot manager di Windows segnala un errore su un MBR danneggiato e chiede all'utente di riparare da un CD di ripristino di Windows.


1

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

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

  2. Il migliore e il più sicuro: usare fdiskper rimuovere il flag "avviabile" da qualsiasi partizione su quell'unità. La maggior parte degli MBR cerca una partizione "avviabile" da cui caricare la catena, quindi mi aspetterei che GRUB non faccia nulla se non ci sono tali partizioni. Non ho testato però.

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

  3. Installa il mbrpacchetto e usa il install-mbrcomando in questo modo:

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

Crediti: COME: Recupera l'MBR di Windows usando 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 sulla 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:

Sui computer compatibili con PC IBM, il firmware di bootstrap contenuto nel BIOS ROM si carica ed esegue il record di avvio principale. [14] ... Pertanto, l'inizio dell'MBR dovrebbe contenere istruzioni sul linguaggio macchina in modalità reale. [14] Il BIOS legge l'MBR dal dispositivo di archiviazione nella memoria fisica, quindi indirizza il microprocessore all'inizio del codice di avvio.

A causa delle dimensioni limitate della sezione del codice dell'MBR, in genere contiene solo un piccolo programma che copia il codice aggiuntivo (come un caricatore di avvio) dal dispositivo di archiviazione in memoria. Il controllo viene quindi passato a questo codice, che è responsabile del caricamento del sistema operativo effettivo.

...

La sequenza bootstrap nel BIOS caricherà il primo MBR valido che trova nella memoria fisica del computer all'indirizzo 0x7C00. L'ultima istruzione eseguita nel codice BIOS sarà un "salto" a quell'indirizzo, per indirizzare l'esecuzione all'inizio della copia dell'MBR. La convalida principale per la maggior parte dei BIOS è la firma 0xAA55 alla fine, sebbene un implementatore del BIOS possa scegliere di includere altri controlli, ad esempio verificando che l'MBR contenga una tabella delle partizioni valida senza voci che si riferiscono a settori oltre la capacità dichiarata del disco.

Quindi la mia comprensione è che MBR dovrebbe sempre contenere un bootloader e l'azzeramento dei primi 446 byte non impedirebbe al BIOS di tentare l'avvio dal disco, ma è probabile che il computer si blocchi durante il tentativo di eseguire codice non valido.

AGGIORNAMENTO: Inoltre, questo articolo suggerisce che per rendere il disco apparente "non avviabile" per il BIOS, è necessario modificare effettivamente la firma MBR sul e del settore (utilizzando qualsiasi editor di dischi). Non sono sicuro che influenzerà il sistema operativo vedendo la tabella delle partizioni sul disco però ... ma almeno puoi sempre modificare quei byte indietro ...


0

Un'altra soluzione più semplice.

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

Spegni il tuo PC, quindi rimuovi il disco che si avvia che non vuoi avviare (che ha grub)

Basta inserire un usb avviabile fatto dall'iso mandriva o altra variante che ti piace installare ci sono strumenti per creare chiavette usb avviabili da file iso usando google (o potresti un installatore masterizzato da cd rom)

Ora la maggior parte dei programmi di installazione di Linux ti offre 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 l'alto in modo che lo schermo attenda ma non premere Invio o fare clic con il mouse).

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

Continua il processo di configurazione poiché la maggior parte dei programmi di installazione contiene strumenti per le partizioni che puoi fare come vuoi. bene è una soluzione semplice, mi sono sbarazzato di una vecchia installazione di Linux semplicemente come un principiante


0

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

~ $ sudo update-grub

Fatto ciò, ho spento il computer, ricollegato il disco rigido e la mia vecchia partizione di Windows 7, che non esiste più da 2 anni fa, non si è presentata, finalmente.

Capisco che questa è una soluzione realistica, ma funziona. Un giorno pulirò completamente quel disco rigido e ogni traccia rimanente di GRUB scomparirà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.