Ieri ho dovuto recuperare una macchina che non voleva partire dopo un brusco black-out.
Prima lezione: non fidatevi degli elettricisti che vengono a rifare gli impianti e che dicono che tutto resterà in piedi. Sono stati in grado di far saltare il circuito di un intero armadio, compresi gruppi di continuità (!?!).
Quando, dopo la caduta della corrente, sono andato a vedere lo stato delle macchine ho trovato una macchina importante che offre il suo servizio a migliaia di utenti che non funzionava. Ho trovato la macchina in kernel panic poco dopo il boot: non riusciva a montare il filesystem di root.
Sulla macchina era stata installata la Fedora 5 e l'intero disk array (in RAID 5) di 220GB era stato assemblato in un volume logico (utilizzando LVM), anche la partizione di root!
Seconda lezione: attenzione a come si installa Fedora 5. Non mi ricordo chi ha installato quella macchina, ma probabilmente l'ha fatto in maniera "bovina", cliccando next, next, next, senza starci a pensare su. Il risultato è che tutto i disco (sia esso singolo o un array) era stato sì formattato con ext3, partizionato come /boot, swap e /root, ma il tutto assemblato in un volume logico.
Devo confessare che era la prima volta che affrontavo il discorso di LVM, avevo visto che era una opzione di Fedora quando l'ho provata una volta, ma non l'avevo mai utilizzata. Non sapevo cosa fare: rapida ricerca su Google e trovo un articolo Recovery of RAID e LVM2 Volumes che spiega come fare il recover di volumi LVM2 su RAID. Perfetto!
Provo a seguire i passi descritti: il RAID era perfetto per cui salto tutta la prima parte e vado a leggere i comandi per il volume:
- avvio la macchina con il primo CD di Fedora per andare in modalità rescue
- dalla shell di console eseguo i comandi per analizzare e riattivare il volume, solo che l'articolo indica i comandi come se fossero comandi della shell invece bisogna prima entrare nella shell di lvm!
lvm
vgchange VolGroup00 -a y
Il primo comando richiama la shell di lvm e il secondo (all'interno di lvm) riattiva il gruppo (VolGroup00 nel mio caso), dopo di che l'articolo dice che a questo punto posso montare il volume con
mount /dev/VolGroup01/LogVol00 /mnt
Col cavolo! Il volume non si monta dando un errore del tipo "filesystem type unknown" o qualcosa del genere.
Altra cors su Google e dopo tanto cercare invano riesco a trovare in fondo ad un forum la risposta: si deve eseguire fsck sul volume. Non ci avevo pensato!
fsck -y /dev/VolGroup01/LogVol00
Immaginate quanto ci vuole per effettuare il check di 220 GB ...
A un certo punto, mentre fissava l'ennesimo blocco, fsck va in segmentation fault!
Riprovo. Non si sa mai. E poi è la prima regola dell'Informatica, no?
Dopo un sacco di tempo, arrivato allo allo stesso inode (di cui fortunatamente mi ero segnato il numero), fsck riceve di nuovo il segnale 11. Che fare?
Provo ad usare debugfs per cercare una via per correggere l'inode o cancellarlo, ma inutilmente: debugfs non riesce a trovarlo quel benedetto inode.
Ne mentre il tempo era volato via, i clienti incalzavano chiedendo quando avremmo rimesso in piedi il servizio.
Purtroppo non era pensabile rimettere in piedi il servizio su un'altra macchina, anche avendo il backup della configurazione, su quel disco c'erano dati vivi che andavano recuperati.
Altro fsck, senza -y questa volta, altro tempo aspettato affinchè arrivasse l'inode maledetto: questa volta dico di non fissare l'errore, vado avanti, un altro inode, non lo faccio fissare, ho paura, un altro inode ancora ...
Dopo una decina di inode non corretti, decido di buttarmi senza paracadute e dico yes !!! Signal 11! Segmentation fault!
Panico! Come recupero 'sto disco?
A questo punto tolgo il CD di avvio della Fedora e vedo se la macchina parte: si, supera il punto in cui non riusciva a montare il volume, ma ... cerca di fare il check del filesystem! Come arriva all'inode maledetto, buuum!
Allora, ormai è sera, decido di copiare il contenuto dell'array da qualche parte e rifare la macchina.
Riesco a tirare su lo stack TCP, dando init 3 e inizio a copiare il contenuto dell'array su un'altra macchina.
Per farla breve ho fatto le 3 di notte a copiare, reinstallare Linux (questa volta una Mandriva 2007 utilizzando solo ext3), riformattare l'array (220GB!), ricopiare indietro quello che serviva e rimettere in piedi il servizio.
Forse ho percorso la strada più lunga. Chi sa un modo più veloce?
