Chi smanetta continuamente è cosciente del fatto che molto spesso una modifica approssimativa al fs “file system” e/o una modifica errata di un singolo modulo del kernel e/o anche una semplice modifica al gestore di avvio della distribuzione in uso (GRUB o LILO) può impedire il normale avvio e il successivo login di una linux box.
In linea generale i metodi comuni di ripristino del sistema sono due.:
- Inserire il disco di una distribuzione che permette di suo il ripristino partendo dal menù generale del primo avvio: un esempio, può essere mandriva, che inserisce nel boot manager una scelta sotto il nome di RESCUE.
- Utilizzare i metodi classici di gestione e ripristino del sistema. Inserendo un qualsiesi disco di una qualsiesi distribuzione di linux senza preoccuparci troppo di cosa stiamo utilizzando e/o di cosa utilizzavamo precedentemente e utilizzare i comandi che lo stesso linux ci mette a disposizione, tra cui: chroot.
Il primo metodo risulta così ovvio da evitare di parlarne. Il secondo se pur comune ai più, necessita di qualche accortenza.
Supponiamo di aver messo le mani sul kernel ( il come non sarà trattato in questo post ) e di aver accertato che al successivo riavvio il sistema restituisca un bel: Kernel panic …
Senza bestemmiare ( cosa che sarebbe condivisibile alla massa ) inseriamo il disco della prima distribuzione che abbiamo sotto mano e dopo averlo inserito riavviamo manualmente la macchina modificando al successivo riavvio la fase di boot nel bios. Chiaramente modificheremo in base alle esigenze la fase di boot dicendogli di leggere prima il disco cd-rom e poi di avviarel’hard disk.
NB: per effettuare il ripristino dobbiamo chiaramente usare come disco di ripristino quello di una distribuzione che non abbia un installer grafico all’avvio ma piuttosto una shell testuale. Esempio: slackware, gentoo, una distro live con modalità testuale etc…
Avviato ad esempio il disco di slackware (come esempio) ed avviati i servizzi di base precedenti all’installazione della stessa ci ritroveremo al classico
login:
Una volta loggati, basta seguiere pochi semplici passi in ordine:
1) Montare le partizioni su cui è presente il fs da recuperare.
2) Chrootare le partizioni
3) Effettuare le dovute modifiche
4) Riavviare
In specifico alcuni esempi:
- Montare le partizioni -
NB: supponiamo che il nostro sistema da recuperare sia stato installato come / “root” in hda1 , la /home in hda3 , /boot in hda4 .
Quindi per amor di chiarezza l’albero delle partizioni esistenti sarà il seguente:
(_ **_df -h )
/dev/hda1 12G 8,3G 2,8G 76% / /dev/hda3 33G 14G 18G 44% /home /dev/hda4 100m 69m 29m 78% /boot
Creeremo il mount point di / nella directory di sistema /mnt/ e quindi da esempio:
~# mkdir /mnt/linux ~# mount /dev/hda1 /mnt/linux
NB: Volendo effettuare modifiche a Grub e/o Lilo dovremmo montare anche la partizione di boot dedicata e quindi:
~# mkdir /mnt/linux/boot ~# mount /dev/hda4 /mnt/linux/boot
- Chroot -
Montate le partizioni provvederemo al chroot:
~# chroot /mnt/linux /bin/bash
NB: da questo momento ogni modifica sarà effettuata sul sistema come se fossimo effettivamente in esso anzichè da una generica shell di login.
- Modifiche -
Come detto all’inizio avevamo supposto che il problema fosse un kernel panic e quindi provvederemo alle modifiche del kernel:
~# cd /usr/src/linux ~# make menuconfig
etc…
sistemati i moduli necessari e ricompilato il kernel e copiata la nuova immagine e i relativi config del kernel in /boot potremmo aver bisogno di sistemare il boot manager; ( lilo ad esempio ):
~# vi /etc/lilo.conf image = /boot/vmlinuz_rescue root = /dev/hda1 label = Slackware read-only
Effettuate le dovute modifiche non resterà che riavviare il sistema.
- Riavvio -
~# exit ~# umount /mnt/linux/boot ~# umount /mnt/linux ~# reboot
- Conclusioni ovvie -
La natura di questo post è solo un esempio “dovuto” dopo una serie di richieste ricevute via e-mail riguardo l’argomento, che può far capire meglio il funzionamento di chroot e quale è la sua funzione in materia di ripristino. La grandezza di Linux da questo punto di vista sta nel concetto di base: “tutto purchè non largamente danneggiato è recuperabile”.
#