Apr 292011
 

sadO forse dovrei chiamarlo”Vi ricordate che stavo aggiornando a ubuntu 11.04 ?”.

Beh, qualcosa è andato male e quando ho riavviato per iniziare la mia nuova Xubuntu 11,04 ho ricevuto:

error: cannot read the Linux header.
error: you need to load the kernel first.

  Failed to boot both default and fallback entries.

Press any key to continue...

Durante l’aggiornamento di Ubuntu ha rimosso tutti i vecchi kernel, ma uno, e così .. mi ritrovo senza un modo per avviare la mia macchina.

Fortunatamente ho fatto molta esperienza in passato con Gentoo, che in questa occasione mi è tornata molto utile per ripristinare il sistema.


Quando avete un errore come questo si possono fare 2 cose:

1) reinstallare da zero, ma io non ho una partizione /home dedicata quindi questo avrebbe cancellato tutti i miei documenti e le configurazioni, se per voi è una nuova installazione, forse si può semplicemente ripetere l’installazione da zero.
2) Tentare di risolvere il problema, questo richiede un po di lavoro e l’uso di chroot

Questo è come realizzare la soluzione numero 2:

1 Fate boot con un altro Linux

Di cosa avete bisogno: Un Cd Live /Chiavetta USB, è meglio utilizzare una distribuzione abbastanza recente, io ho utilizzato Ubuntu 11.04 su chiavetta USB (1 GB).

Una volta che la distribuzione live si è avviata, aprite un terminale e diventate root (di solito un sudo -i è sufficiente).
Controllate anche la connessione internet, potremmo avere bisogno di scaricare qualcosa più tardi.

2 Mount del vostro filesystem

Ora dovete individuare la vostra partizione dove risiede la / e se la utilizzate la /boot.
Per vedere la situazione delle partizioni utilizzate:

fdisk -l

Nel mio computer ho il seguente output:

 Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        2292    18408568+   7  HPFS/NTFS
/dev/sda2            2292        2658     2940840    c  W95 FAT32 (LBA)
/dev/sda3            2658        4864    17720609    f  W95 Ext'd (LBA)
/dev/sda5            2658        2667       68008+  83  Linux
/dev/sda6            2667        2730      506488+  82  Linux swap / Solaris
/dev/sda7            2731        4864    17141323+  83  Linux

Guardando le dimensioni (numero di blocchi) mi sono reso conto che le mie partizioni sono:

/dev/sda5= /boot
/dev/sda6= swap
/dev/sda7= /

Sono entrambe ext3 e io non uso LVM, quindi è abbastanza facile montarle:

mkdir /mnt/oldubuntu/
mount /dev/sda7 /mnt/oldubuntu/
mount /dev/sda5  /mnt/oldubuntu/boot

Si sono montate senza problemi (quindi ho escluso problemi sui filesystem) e spostandosi in queste directory non ho trovato nessun problema visibile.

3 chroot dentro !

Ora stiamo per usare chroot , chiunque utilizzi gentoo dovrebbe avere familiarità con questo concetto, perché uno stage di installazione consiste nell’avvio da un CD live per poi passare nel filesystem e noi faremo esattamente lo stesso, montiamo i meta filesystem:

mount -o bind /proc /mnt/oldubuntu/proc
mount -o bind /dev /mnt/oldubuntu/dev
mount -o bind /sys /mnt/oldubuntu/sys

Perché un “mount -o bind”?
La differenza è che un mount ordinario consente di montare solo un dispositivo a blocchi in un unico punto, ma mount -o bind permette di montare un qualcosa che avete già montato altrove in un secondo posto, così si finisce con la stessa roba montata in due posti differenti.

Ora che abbiamo tutti i filesystem pronti possiamo usare chroot, questo comando crea una copia “imprigionata” dell’ambiente operativo corrente all’interno dell’ambiente operativo corrente, quindi è possibile eseguire comandi senza compromettere l’ambiente principale:

chroot /mnt/oldubuntu /bin/bash

Dopo questo comando, vi troverete come root sul vostro sistema principale, ora è tempo di riparare il sistema.
Nel mio caso ho notato che /boot era piena, quindi probabilmente qualcosa è andato storto nella creazione della initrd durante l’installazione del nuovo kernel 2.6.38, quello che ho fatto per risolvere il problema è stato:

1) Eliminare un po di roba vecchia in /boot
2) Eseguire aptitude e premendo il tasto g ho notato che c’erano alcuni compiti non finiti, tra cui la configurazione finale del kernel 2.6.38.
3) Quindi ho semplicemente premuto nuovamente g ed aptitude ha terminato correttamente l’installazione del nuovo kernel.

4 Riavviate e godetevi il vostro sistema

Ora rimuovere la vostro distro live e riavviare il sistema recuperato !

Questo è solo un esempio, ma è possibile utilizzare questo metodo per recuperare un sistema Linux da diversi problemi.

Popular Posts:

flattr this!

  One Response to “Come recuperare un Kernel che non parte”

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>