Per piacere, fai attenzione! Seguire le spiegazioni date qui ti riporterà a un sistema precedente, e perderai tutto quello che hai installato più di recente, se ce n'è! Devi scegliere...
E' tutto facile se hai a portata di mano:
un disco (floppy o CD) capace di avviare Linux da solo, con un fdisk disponibile - la maggior parte dei dischi di ripristino di qualsiasi distribuzione ce l'hanno,
un foglio con scritti i listati di fdisk -l e fdisk -u -l.
E' sufficiente
avviare Linux;
avviare fdisk /dev/hda (o qualunque sia il disco da ripristinare);
usare fdisk per cancellare (opzione d) tutte le partizioni esistenti sul disco danneggiato;
usare fdisk per creare tutte le partizioni primarie (1-4) riportate nei listati;
dar loro l'etichetta appropriata (o tag, opzione t): 82 è per lo swap di Linux, 83 per una partizione di Linux (L dà la lista completa), 5 è per una partizione estesa e deve essere fatto prima di creare le partizioni logiche, c è Windows FAT 32 e f è Windows estesa, mentre 6 è Windows FAT 16;
creare le partizioni logiche.
Sulla mia installazione di SuSE e ogni volta che ho dovuto farlo per altri, questo procedimento ha dato buoni risultati.
Comunque mi è stato riferito che alcuni fdisk segnerebbero le partizioni basandosi sui settori, non sui cilindri. Per questo motivo avete annotato la versione fdisk -u -l del listato.
Per usare il listato di fdisk -u -l bisogna avviare fdisk -u :-). Secondo me, usare i settori è un'idea molto brutta, ma potrebbe avere un uso pratico di cui non sono a conoscenza. Il problema è che col limite ai cilindri è facile capire lo schema anche se non si hanno i listati. Con quello ai settori, ci sono molte più possibilità...
Fdisk è un programma piccolo e molto intelligente. Ce ne sono molte altre versioni, ma io preferisco sempre quella nuda e cruda (parlo di quelle per Linux, naturalmente, non delle altre...).
Sappi che fdisk non scrive nulla sul disco se non digiti w e Invio. Se temi di aver commesso un errore, digita q (quit) o Ctrl C (^C) per abbandonare in tutta sicurezza.
Quando la tua nuova tabella delle partizioni è stata scritta, avvia Linux. C'è la possibilità che tu non possa farlo come al solito: può essere che anche lilo sia stato danneggiato, e ti servirà un floppy di boot o fare il boot da un CD (scegli l'opzione “booting the installed partition”).
Se sei solito fare il boot con lilo, non appena accedi come root digita “lilo” e premi Invio per reinstallare il tuo boot loader preferito.
Il tuo Linux dovrebbe essere tutto lì, provalo. Prova anche ad avviare Windows, se è il caso. Se non puoi, c'è una (molto scarsa) possibilità che tu possa leggere i dati da Linux, magari con una lettura settore per settore. Se puoi identificare i settori del disco su cui risiedono i tuoi dati, puoi copiarli su un file usando dd. Questo è saggio solo per il testo. Questo tipo di ripristino NON è lo scopo di questo mini-HOWTO.
Questo riguarda i casi in cui il sistema precedente non può essere usato, per mancanza del listato di fdisk o se non funziona perché ne stai usando uno vecchio.
Primo, sappi che finché non scrivi nulla sul disco (se non con fdisk), non puoi cancellare i dati, perciò puoi provare blocco per blocco. Ti serve perciò sapere l'inizio della partizione, tanto per cominciare. Se, diciamo, 153 non funziona, prova 154, e così via.
Questo può essere stancante, ma se ricordi approssimativamente la dimensione della partizione Linux, ci può essere una possibilità di riuscire.
Se hai appena distrutto la partition table, ma non hai ancora riavviato Linux: Non riavviare! Puoi ancora recuperare le informazioni sulla partizione immagazzinate nel kernel:
cat /proc/partitions restituisce:
major minor #blocks name
3 0 19535040 hda
3 1 2096451 hda1
3 2 4980150 hda2
3 3 1 hda3 <----- questo indica una partizione estesa
3 5 4980118 hda5
3 6 4972086 hda6
hdparm -g /dev/hda1
/dev/hda1: geometry = 2432/255/63, sectors = 4192902, start = 63
Dovrai operare un po' di conversioni. I "#block" sono di solito lunghi 1K. I "Sectors" sono i settori del disco, spesso di 512 byte. Di solito però gli strumenti di partizionamento lavorano su unità di cilindri (qui 255*63=16065 settori). Usando queste informazioni puoi costruire una nuova tabella delle partizioni.
Se conosci l'inizio di una partizione Linux, ma non la sua fine, puoi ancora montarla, e ricavarne la struttura. Imposta correttamente l'inizio della partizione, e la fine a un valore molto grande. Controlla se hai avuto successo dando:
e2fsck -n /dev/hd?? |
Puoi quindi montare la partizione e controllare la grandezza:
mount -r /dev/hd?? /mnt df -T |
Questo non ti dirà direttamente dove comincia la partizione successiva, per questioni di arrotondamento. Ti può però aiutare ad andarci vicino. Assicurati di usare le opzioni "-n" e "-r" per montare la partizione in sola lettura!!!
Alcune distribuzioni registrano le informazioni sulle partizioni in un file. Naturalmente probabilmente non sarai in grado di recuperare tale file quando ne avrai bisogno. Giusto in caso:
SuSE: /var/lib/YaST/install.inf |
(se ne conosci altre, per favore manda un'email al gestore di questo documento)
C'è però una strada migliore se puoi ancora accedere alla rete o hai a portata di mano “gpart”. gpart è disponibile nella maggior parte delle distribuzioni, su freshmeat.net o direttamente a http://www.stud.uni-hannover.de/user/76201/gpart.
“Gpart - guess PC-type hard disk partitions” (indovina le partizioni del disco fisso di tipo PC). Questa è la prima riga (tradotta) della pagina man di gpart (man gpart).
“Gpart prova a capire quali partizioni sono su un hard disk. Se la tabella delle partizioni primaria è andata perduta, sovrascritta o distrutta, le partizioni esistono ancora sul disco ma il sistema operativo non può accedervi.” Questo è esattamente quello che ci serve.
Gpart è uno strumento molto buono.
Il problema è il seguente: il primo blocco di ogni partizione è contrassegnato. Però non viene mai “de-contrassegnato” se non quando viene sovrascritto. Perciò su un disco vecchio esistono molti “primi blocchi di partizione”, e gpart prova a fare il meglio che può per indovinare qual'è quello giusto. In effetti non è troppo difficile provare, perché gpart non scrive nulla sul disco.
Qui c'è il risultato di gpart sul disco hdb che abbiamo visto prima:
root@charles:/home/jdd > gpart /dev/hdb Begin scan... Possible partition(Linux ext2), size(1200Mb), offset(0Mb) Possible partition(Windows NTFS), size(1200Mb), offset(1200Mb) Possible partition(Linux ext2), size(1004Mb), offset(2402Mb) Possible partition(Windows NTFS), size(1600Mb), offset(4102Mb) End scan. Checking partitions... * Warning: partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX) ends beyond disk end . Partition(Linux ext2 filesystem): primary Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): primary Partition(Linux ext2 filesystem): primary Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): invalid primary Ok. Guessed primary partition table: Primary partition(1) type: 131(0x83)(Linux ext2 filesystem) size: 1200mb #s(2457880) s(63-2457942) chs: (0/1/1)-(152/254/61)d (0/1/1)-(152/254/61)r Primary partition(2) type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX) size: 1200mb #s(2457880) s(2457944-4915823) chs: (152/254/63)-(305/253/60)d (152/254/63)-(305/253/60)r Primary partition(3) type: 131(0x83)(Linux ext2 filesystem) size: 1004mb #s(2056256) s(4919781-6976036) chs: (306/61/49)-(434/60/47)d (306/61/49)-(434/60/47)r Primary partition(4) type: 000(0x00)(unused) size: 0mb #s(0) s(0-0) chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r |
Come vedi, la partizione primaria può essere ripristinata, ma per quelle estese c'è ancora del lavoro da fare.
Le partizioni Dos sono marcate “windows NTFS” perché sono state create quando ho provato ad installare Windows 2000 (un'esperienza davvero terribile!). Quella “invalid” è, nei fatti, la partizione estesa.
Con questo, si può usare fdisk e provare a ri-creare la tabella delle partizioni (ricorda, questo non comporta rischi perché tanto quella originale è già andata perduta).
Gpart è aggiornato settimanalmente :-) e perciò le nuove versioni possono essere più potenti di quanto io sappia.
Le informazioni sulla partizione estesa sono disseminate per il disco, non immagazzinate con la partizione primaria. Per recuperarle spesso serve un lavoro maggiore. Il procedimento è:
Cerca l'inizio della prima partizione (con l'opzione -k di gpart);
Crea una partizione primaria temporanea con la vera posizione iniziale e una finta finale (questo potrebbe portarti a cancellare una partizione primaria reale se non ce ne sono disponibili - non comporta alcun rischio, finché non riutilizzi i settori della partizione cancellata);
Usa “e2fsk -n”, “mount -r”, e “df” per determinare il vero punto di termine. Annotati questo valore (attenzione: leggi la pagina man di ognuno di questi programmi, e usa l'opzione read-only (sola lettura), non devi scrivere nulla sul tuo disco finché tutte le partizioni sono al posto giusto);
Ripeti questo processo per ogni partizione da recuperare;
Costruisci una nuova tabella delle partizioni completa.
Se il tuo disco fisso contiene errori, potresti avere seri problemi a montare, controllare o usare i dati (si metteranno in mezzo gli errori di lettura del drive). Gpart potrebbe addirittura non trovarli. Se però conosci l'inizio della partizione, puoi copiare facilmente i dati su di un file temporaneo immagazzinato in un altro drive. I settori con gli errori di lettura sono di solito posti a zero con questo processo:
Copia i dati della partizione su un file. Devi conoscere il blocco d'inizio della partizione;
dd if=/dev/hd?? of=/tmp/recover_hd?? bs=512 skip=XXXX count=YYY |
XXXX è il settore iniziale e YYY quello finale (può essere arguito).
Monta il file come un file system loop.
mount -r -t ext2 -o loop /tmp/recover_hd?? /mnt/recover |
Partition Magic è un prodotto commerciale, e neppure così economico (circa un centinaio di euro) visto anche il poco uso che uno ne deve fare, ma con una grossa reputazione qui in giro. Comunque non l'ho mai usato, perciò non darò giudizi. Si dice che può far di tutto con le partizioni, compreso riprstinarle.
Il partition-rescue mini HOWTO originale di Ralf era basato essenzialmente sull'uso di Partition Magic, perciò suppongo che sia un'ottima soluzione se hai dati preziosi sulla tua partizione Linux e scarse capacità in Linux. Comunque ci sono ora versioni molto più recenti di Partition magic, e penso sia meglio che tu ne legga il manuale.