Ripristinare un Sistema Dopo un Errore del Kernel al Boot
Hai avuto qualche problema durante l’ultimo aggiornamento del Kernel? Niente paura ecco come rimediare..
A tutti può capitare di vedere qualche brutto errore in accensione del proprio sistema operativo proprio dopo un aggiornamento o il passaggio alla versione successiva della propria distribuzione.
Ecco un tipico esempio di errore:
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…
Se è successo anche a te ci sono due possibili soluzioni:
- Reinstallare da zero il sistema operativo. Se hai dedicato una partizione specifica per i dati e la home non avrai problemi a farlo..
- Provare a risolvere il problema con un po di lavoro e l’uso di chroot
Ecco la guida.. per la soluzione 2 ovviamente
1) Avvia il Sistema con un’altra ISO Live
Di Cosa Hai Bisogno: una distribuzione live su CD o USB, meglio se recente. In questa guida verrà usato Ubuntu 11.04.
Accendi il computer con la distribuzione live inserita al boot. Una volta nel sistema apri un terminale e digita:
sudo bash
Accertati che il sistema sia correttamente collegato ad internet perchè avrai bisogno di utilizzarlo.
2) Monta il tuo FileSystem
Ovviamente devi trovare la partizione corretta da montare soprattutto se utilizzi un sistema multiboot. La partizione che ci interessa è quella di root (/) e nel caso quella di boot (/boot).
Nel terminale da root digita:
fdisk -l
Ora potresti avere un output simile al mio:
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
A giudicare dalle dimensioni dei blocchi è piuttosto evidente che le mie partizioni sono:
/dev/sda5= /boot
/dev/sda6= swap
/dev/sda7= /
Procedo creando la cartella “oldubuntu” sotto /mnt e montando correttamente il file system:
mkdir /mnt/oldubuntu/
mount /dev/sda7 /mnt/oldubuntu/
mount /dev/sda5 /mnt/oldubuntu/boot
3 Fai chroot qui Dentro !
Prima di poter fare il chroot, che ti consente di lavorare nel sistema montato come se fosse quello attivo, procedi montando manualmente i meta file system che servono al sistema. Dal terminale digita:
mount -o bind /proc /mnt/oldubuntu/proc
mount -o bind /dev /mnt/oldubuntu/dev
mount -o bind /sys /mnt/oldubuntu/sys
Perchè si usa l’opzione a “-o bind” ?
Il motivo principale che il comando mount normale ti permette di montare un dispositivo in una posizione una sola volta mentre l’utilizzo dell’opzione bind ti permette di montare nuovamente questo file system anche se già in uso in due posti differenti.
Utilizza il comando chroot che ti permette di entrare nel sistema virtuale creato dal file system montato prima:
chroot /mnt/oldubuntu /bin/bash
Ora sei finalmente all’interno del sistema da controllare. Nel mio caso ho potuto notare che la porzione di boot è piena. Motivo per cui l’aggiornamento del kernel non è avvenuto con successo. La soluzione consiste quindi in:
- cancellare le componenti non necessarie in /boot;
-
avviare
aptitude
(permendo il tasto g puoi visualizzare che ci sono dei processi non terminati tra cui l’installazione del nuovo kernel); - premere nuovamente g per terminare l’esecuzione dei task;
4) Riavvia il Computer
Rimuovi la ISO live che hai utilizzato per la correzione dei problemi e riavvia il computer per far partire il tuo nuovo sistema.