Come verificare su quali unità grub2 ha effettivamente installato un MBR?


17

Sono su un sistema Debian / Squeeze (con una storia che risale almeno a Woody) che è stato aggiornato a grub2 come parte dell'aggiornamento di Squeeze. Funziona tutto bene, ma sto per sbagliare con la configurazione del disco.

Attualmente la macchina esegue 2 unità da 80 GB con partizioni RAID1-ed /, / home e / boot (c'è un'altra coppia di unità con un "/ data" ed una coppia di swap, nel caso qualcuno si chiedesse dove si trova lo swap , ma non li sto toccando).

Ho aggiunto 2 SSD da 130 GB, li ho partizionati per essere grandi almeno quanto le partizioni sulle unità da 80 GB e intendo passare ai nuovi dischi SSD aumentando i RAID1 per includerli, in attesa di sincronizzazione, quindi rimuovendo il vecchio unità dagli array in modo da lasciare solo gli SSD (e quindi aumentare i filesystem). Ma mdadm / ext3 wrangling non è di cosa tratta questa domanda ...

Questo mi lascerà con 2 unità obsolete da 80 GB (IDE) che desidero rimuovere dalla macchina. La mia preoccupazione è che rimuoverli porterà con sé alcuni MBR cruciali. Come posso garantire che la macchina rimanga avviabile?

Più specificamente:

  • Quando ho fatto l'aggiornamento a Squeeze, ricordo che c'era una scelta su quali dischi installare grub2 (sono andato con il default, che era tutti i dischi). Gli SSD al momento non erano nella macchina; come posso rieseguirlo per ottenere grub da installare sugli MBR SSD? (Immagino sia una riconfigurazione di dpkg di alcuni pacchetti).

  • Come posso trovare su quali unità grub2 pensa che sia installato? Buon dolore ci sono quasi 200 file in / boot / grub / in questi giorni! Dove cercare? Inoltre, sembra leggermente strano che /boot/grub/device.map.auto elenca attualmente solo 3 unità (2 degli 80 GB ma solo una delle altre coppie di unità e nessuno degli SSD). Come posso aggiornarlo? ( Aggiornamento: era un'aringa rossa; device.map.auto sembra essere una reliquia di anni fa; device.map sembrava ragionevole su un aggiornamento di grub-mkdevicemap. Penso che la mia paranoia in quest'area provenga da un vecchio BIOS di mobo che avrebbe riordinare l'ordine del dispositivo visto da GRUB per un capriccio).

Risultato: tutto è andato bene e ora ho le due vecchie unità IDE da 80 GB pronte per l'uso e un sistema di avvio rapido e scattante che funziona su SSD RAID1-ed con tutti i filesystem ridimensionati fino alle nuove dimensioni della partizione. L'altro "pezzo mancante del puzzle di Grub" che stavo cercando era quello dpkg-reconfigure grub-pcche richiede su quali dischi mantenere un MBR. La risposta di Aaron in realtà ha fatto di più per rassicurarmi che funzionava come previsto, accettando quindi quella risposta.

Risposte:


17

L'MBR è di 512 byte, quindi un modo rapido per vedere se c'è GRUB ...

dd if=/dev/sda bs=512 count=1 | xxd

Che scarica l'MBR, vedo "GRUB" nel mio al byte 0x17F = 383.

dd if=/dev/sda bs=1 count=4 skip=383

Quando lo faccio, stampa ' GRUB' seguito dddall'output.

Puoi avvolgerlo in un forloop bash o qualcosa per attraversare più unità. se non vuoi farlo manualmente.


4
Solo un'aggiunta minore: poiché è probabile che la posizione di GRUB cambi da versione a versione, è possibile utilizzarla dd if=/dev/sda bs=1 count=512 | grep -aob GRUB. Ciò restituirà la posizione del marker all'interno del settore di avvio.
Alessandro Santini,

16

Ci sono diversi passaggi nel processo di avvio (sto descrivendo un BIOS del PC tradizionale):

  1. Il BIOS legge il primo settore (512 byte) del disco di avvio.
  2. Il codice in questo primo settore legge ulteriori dati e codice in una posizione fissa attraverso l'interfaccia BIOS. Questa interfaccia BIOS espone solo due dischi rigidi: il disco 0 è ovunque sia stato letto il primo settore e il disco 1 è un altro disco che non è facilmente prevedibile se ne hai più di due. Il settore di avvio contiene un byte che indica su quale disco rigido si trovano gli ulteriori dati; questo è il disco che contiene /boot/grub.
  3. Il codice caricato nella fase precedente comprende partizioni, filesystem e altre nozioni di alto livello. I dati includono una posizione del filesystem (cioè una stringa simile (hd0)/boot/grub) che determina dove trovare grub.cfge ulteriori moduli Grub.
  4. grub.cfg viene eseguito, in genere per mostrare un menu e avviare un sistema operativo.

Il settore di avvio è generato da grub-setup, normalmente invocato attraverso grub-install. Il settore di avvio finisce su qualsiasi disco specificato (nella sintassi Linux) sulla riga di comando grub-installo grub-setup. Puoi verificare di avere un settore di avvio su un disco eseguendo file -s /dev/sda. Dal momento che stai aggiungendo un nuovo disco e vuoi avviarlo, devi eseguirlo grub-installsul nuovo disco. L'esecuzione grub-installpiù volte sullo stesso disco è innocua.

La parte difficile è nel passaggio 2 sopra. Se possibile, metti Grub (cioè la /boot/grubdirectory) sul disco di avvio del BIOS (o, avvicinandoti a questa dall'altra direzione, di 'al tuo BIOS di avviarsi dal disco dove si /boot/grubtrova). È qui che device.mapentra in gioco. Assicurarsi che (hd0)sia mappato sul disco che contiene /boot/grub, quindi eseguire grub-installsu quel disco.

Se i tuoi due dischi si trovano in una configurazione RAID-1 del software, avrai settori di avvio identici. Questo è il comportamento desiderabile: se un disco che è il disco di avvio del BIOS fallisce, l'avvio dall'altro funzionerà (poiché contengono gli stessi byte nelle stesse posizioni rilevanti). Se hai eseguito il mirroring solo di determinate partizioni, l'installazione di un settore di avvio influisce solo su uno dei dischi. È necessario eseguire grub-installnuovamente sul secondo disco, dopo aver cambiato device.mapper associarsi (hd0)al disco contenente la seconda copia speculare di /boot/grub.

Il passaggio 3 è piuttosto complesso, ma di solito funziona immediatamente. Al passaggio 4, Grub individua i filesystem tramite UUID o cerca i file con nome, quindi non è più necessario preoccuparsi dei vari modi per designare i dischi.

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.