Se installate un altro sistema operativo dopo aver installato Linux (es. Windows) o se fate qualche tipo di disastro con grub che non è sistemabile semplicemente lavorando sulla configurazione è utile poter ripristinare l’installazione di Grub..

Difficoltà della guida: media

Per farlo potete usare un LiveCD, una chiavetta USB su cui è installato Linux o qualunque altro metodo vi permetta di ottenere una console o un terminale GNU/Linux..

Ad esempio per gli utenti Ubuntu il LiveCD va benissimo 🙂

l’installazione di grub non è semplicissima se provate a farla a mano ma usando lo script “grub-install” che è presente, penso, in quasi tutte le distro dovrebbe essere cosa facile.

Questa guida è utile anche per lavorare su un sistema Linux che risiede su un qualche disco, anche remoto

L’elenco di comandi che segue è la guida… se non vi è chiaro qualcosa sotto vado molto nei dettagli e spiego il significato di ognuno.

mkdir disk

mount /dev/sda1 disk # sda1 deve contenere la partizione root e la partizione boot

#mount /dev/sda2 disk/boot # solo se la partizione di boot è separata

mount --bind /dev/ disk/dev/

mount -t proc none disk/proc

chroot disk /bin/bash

grub-install /dev/sda # se il disco su cui installare è sda

# qualunque altro comando sul sistema installato (es. apt-get install ....)

per chi pensa sia arabo o semplicemente vuol capirci un po’ di più può proseguire la lettura della guida..

IMPORTANTE: La distribuzione Live di Linux con cui eseguite il ripristino deve avere un kernel per la stessa architettura del sistema che state per riparare. Ubuntu 32bit e Ubuntu 64bit sono 2 architetture diverse.. se usate un LiveCD Ubuntu 32bit per riparare un installazione di Ubuntu 64bit non riuscirete. Viceversa, con una piccola modifica della guida, è possibile.

Ottenere la console/terminale di root

Avviate la vostra distro Live se non siete già in una console aprite un terminale di root (o un terminale “normale” e poi diventate root)

ecco un esempio di console NON di root:

daniele@Luffy:~$

questo invece è un esempio di console di Root:

Luffy:~#

come lo capite? Dall’ultimo simbolo: $ significa utente SENZA privilegi di root, # significa utente Root…

Quindi se non siete utenti root usate

su

o

sudo su

per ottenerli!

Preparazione dell’ambiente di lavoro

L’unica difficoltà di questo passo è capire quale sia la partizione che contiene la root e quindi come Linux chiama quel device!

In genere il disco è /dev/sda (SCSI) o /dev/hda (EIDE) e la partizione è la prima /dev/sda1 o /dev/hda1, però non è detto.. Se non sapete quale sia la partizione corretta potete aprire un programma di partizionamento (es. gparted) per osservare la dimensione delle partizioni, le etichette e così via.. oppure provate a dare questo comando…

fdisk -l

vi verrà fornita una lista dei dischi sul vostro pc con le loro partizioni… Prendiamo un esempio di questa Lista…

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x12345678
Device Boot Start End Blocks Id System
/dev/sda1 1 2432 19535008+ c W95 FAT32 (LBA)
/dev/sda2 2433 7295 39062047+ 7 HPFS/NTFS
/dev/sda3 7296 19209 95699205 83 Linux
/dev/sda4 19210 19457 1992060 82 Linux swap / Solaris

(il risultato del comando è molto più ordinato e leggibile se lo date dal terminale… wordpress è un po’ rognoso con queste cose…. provatelo)
In questo esempio abbiamo il disco /dev/sda, dimensione 160GB. La prima partizione è una partizione FAT32 (/dev/sda1), la seconda NTFS (/dev/sda2), la terza è una partizione Linux ext3 (/dev/sda3), quindi una partizione di swap Linux (/dev/sda4).

Se non vi basta a capire qual’è la partizione che vi interessa potete cercare di estrarre qualche altra informazione o provare a montare le partizioni Linux (spiego sotto come fare) una ad una e osservarne il contenuto.

decifrare i valori di fdisk (facoltativo)

Nel primo caso: i numeri che vedete indicano la dimensione delle partizioni in un unità di misura che rispecchia com’è fatto il Disco… In Cilindri!

La seconda partizione (/dev/sda2 – NTFS) parte dal cilindro 2433 e arriva al cilindro 7295 compresi: occupa quindi 7295-2433+1=4863 cilindri. In alto dove leggete “units” vi informa che un cilindro, per questo particolare disco, equivale a 8225280 bytes e cioè a circa 8 Mega ciascuno (8225280 / (1024*1024) = 7,84 MB). Il che significa che lo spazio occupato dalla partizione è di circa 4863*8=38904 MB cioè circa 39 GB… (la cifra esatta è 38146,530761719 MB = 37,25 GB).

Per passare da Byte a Kbyte dividete per 1024, per passare da Kbyte a MByte dividete per 1024, e così via.. Viceversa moltiplicate per passare da un unità di misura più grande a una più piccola.

Comunque alla fine potete ottenere qual’è la dimensione di ogni singola partizione.. (se usate un tool grafico, es. gparted, questo calcolo verrà fatto dal programma per voi).

montare la partizione

Se sapete qual’è la partizione semplicemente montatela così (supponiamo che sia /dev/sda3 per questo esempio):

mkdir disco

mount /dev/sda3 disco

Se non vi dice nulla il montaggio è avvenuto e potete vedere l’elenco di file nella directory “disco” che avete appena creato…

ls disco

la directory root di linux ha (più o meno) questo contenuto:

bin etc initrd.img.old mnt sbin tmp vmlinuz.old
boot home lib opt selinux usr
cdrom initrd lost+found proc srv var
dev initrd.img media root sys vmlinuz

se invece siete arrivati a questo punto avendo ancora dei dubbi su quale partizione sia quella corretta, o vi rendete conto di aver sbagliato partizione date il comando

umount disco

e riprovate a montare un altra partizione

mount /dev/sdb2 disco

ls disco

il secondo comando vi mostrerà il contenuto della directory disco 🙂

quindi se volete potete trovare il disco corretto procedendo per tentativi, montando e smontando via via le partizioni che pensate essere la partizione di root. Io in genere non mi metto a fare i calcoli che ho spiegato sopra.. Se non ricordo più qual’è la partizione di root provo a montare quelle Linux finché la trovo.

NOTA: se avete creato una partizione apposta per la directory boot ricordatevi di montarla! (Non vado nei dettagli perché se avete fatto questo presuppongo che non ne abbiate bisogno… se serve chiedete nei commenti)

NOTA2: se avete la “home” in una partizione separata non vi servirà montarla.. non è necessaria!

Preparare l’ambiente interno

Beh ora è tutta in discesa…

mount --bind /dev/ disco/dev

mount -t proc none disco/proc

con questi 2 comandi abbiamo fatto in modo di replicare tutti i dispositivi (/dev) nel sistema su cui vogliamo lavorare e abbiamo anche montato il filesystem virtuale “proc” nel sistema.

Ora non ci resta che “entrare” nel sistema che abbiamo preparato…

chroot disco/ /bin/bash

dopo questo comando vi ritroverete nel sistema appena creato… È a tutti gli effetti come se aveste appena fatto il boot su quella partizione, manca solo l’interfaccia grafica! Di conseguenza potete fare un po’ quel che volete.. installare/disinstallare programmi con il vostro sistema di pacchetti (es. apt-get install blabla, per sistemi debian-based) e ovviamente anche installare grub.

NOTA: se state usando un liveCD per AMD64 e state sistemando un sistema a 32bit usate il comando chroot32.

installare grub

domanda: qual’è il disco da cui il sistema fa il boot?

se ne avete uno solo (di disco) allora è quello che avete usato prima per montare la partizione. Semplicemente usatelo SENZA IL NUMERINO FINALE (questo è importante)! — /dev/sda3 NO!!, /dev/sda SI!!

Altrimenti cercate di capire qual’è il disco che si avvia… “il primario”. In genere è quello che finisce con la lettera “a” (es. /dev/sda o /dev/hda).

grub-install /dev/sda

questo comando dovrebbe riuscire automaticamente a installare grub…

fine

ora potete riavviare la live ed estrarre il CD… se volete invece lavorare ancora potete uscire dall’ambiente di chroot

exit

e smontare il disco/partizione procedendo a ritroso…

umount disco/proc

umount disco/dev

umount disco

articoli correlati

comprendere il filesystem GNU/Linux (e Unix)

abbellire grub: colori e immagini