Partition-Rescue HOWTO Jean-Daniel Dodin 09-25-2001 v3.2 2001-09-25 jdd Aggiornamento importante. Uah! Il mio disco è vuoto! Linux è sparito! Se hai o temi un giorno o l'altro di avere un problema del genere, leggi qui... Inizio Cosa c'è qui dentro Questo mini-HOWTO riguarda solo il problema della “tabella delle partizioni perduta”. Questo può accadere quando: non puoi più accedere al tuo computer, e ti dà solo il messaggio “no operating system” (“nessun sistema operativo”); hai installato un nuovo sistema operativo (ad es. Windows) e non vedi più Linux, e Windows si è preso tutta la capienza del disco; hai appena partizionato il drive sbagliato con fdisk (per esempio tentando di cambiare il tuo disco fisso). Qui imparerai che se sai la cosa giusta da fare e la fai, di solito Linux esce incolume da questi incidenti. Anche Windows può, ma è più questione di fortuna. Vedremo per prima cosa che puoi fare prima del verificarsi del problema per facilitare il recupero futuro e poi cosa devi fare dopo per recuperare. C'è poco da fare per prevenire la cancellazione di un disco; di solito è causata da cattivi programmi di installazione di Windows o Linux o da errori degli utenti - non si può fare nulla per evitarli, tranne fare attenzione, ma fai già attenzione, no? Può anche essere dovuta all'uso dell'fdisk di MSDOS/Windows. Evitalo più che puoi, ma probabilmente non puoi. Io ho seguito queste indicazioni più volte, sul mio computer e su quelli di altre persone; ho recuperato Linux nella maggior parte dei casi, e qualche volta Windows. In bocca al lupo! Cosa fare ora? Se non hai ancora alcun problema, se stai leggendo questo documento per curiosità o solo per informazione, e sei in un sistema Linux funzionante, fai immediatamente quanto segue: apri un terminale di root o un xterm; digita “/sbin/fdisk -l” (l'ultimo carattere è la l di Livorno). Poi digita fdisk -u -l; sarai ricompensato con una lista di tutte le partizioni correnti su tutti i dischi presenti nel tuo computer. Il secondo comando dà la lista in unità di settore (sector) al posto che in cilindri e ogni tanto si rende necessario; scriviti da qualche parte questi listati (o dai “/sbin/fdisk -l | lpr” e “/sbin/fdisk -u -l | lpr” per stamparli) e riponili in un luogo sicuro per futuri usi. Se non sei l'amministratore del sistema, il problema non dovrebbe riguardarti, e puoi pure smettere di leggere. Legalese Ndt: la traduzione dei paragrafi seguenti è da ritenersi non ufficiale, e come tale non ha valore legale. This HOWTO is Copyright (c) 2000-2001 by Jean-Daniel Dodin. All rights reserved. You may do (almost) whatever you want with it. I don't care. Just be sure to keep my name intact. I just hope it becomes useful for any person in the Linux community. In fact I would like to use a more standard LGPL or like licence, but I'm bound by the initial author license and I can't join him. If you know him or any way to contact him, let me know. I am not responsible of any damage on any computer as a result of anyone reading this HOWTO. If you do any damage, _it is YOUR fault, NOT MINE_! Be careful when partitioning disks, and don't make any mistakes, because it can be fatal! Backup all your important data and check that everything you do is correct! What is described here worked on my computer, but it may or may not work on your computer. Although it should work for everyone, I can't guarantee anything. This is the last warning you get: BACKUP IMPORTANT DATA! Or, to put it short: Use at your own risk! Questo HOWTO è Copyright (c) 2000-2001 di Jean-Daniel Dodin. Tutti i diritti sono riservati. Puoi farne (quasi) tutto ciò che vuoi, non mi interessa. Assicurati solo di mantenere intatto il mio nome. Spero solo sia utile a qualcuno nella comunità Linux. In pratica vorrei usare una licenza più standard di tipo LGPL o simili, ma sono legato dalla licenza dell'autore originale e non riesco a mettermi in contatto con lui. Se lo conosci o sai un modo per contattarlo, fammi sapere. Non sono responsabile di qualsiasi danno su qualunque computer che possa risultare dalla lettura di questo HOWTO. Se fai un qualunque danno, _è colpa TUA, NON MIA!_ Stai attento quando partizioni dischi, e non commettere errori, perché possono essere fatali! Fai un backup di tutti i dati importanti e controlla che ogni cosa che fai sia corretta! Ciò che è qui descritto ha funzionato sul mio computer, ma può lavorare come no sul tuo. Sebbene dovrebbe funzionare per tutti, non posso garantire nulla. Questo è l'ultimo avvertimento che riceverai: FAI UN BACKUP DEI DATI IMPORTANTI! O, per farla breve: Usa a tuo rischio! Cosa devo sapere fin da ora? Devi sapere che in caso di un problema grave col tuo hard disk, devi smettere di usarlo del tutto in modalità di scrittura, almeno per il tempo necessario a capire cosa è successo. Le informazioni sono molto volatili... Se mai, un bel mattino, svegliandoti, il tuo computer ti dice “can't load, no system installed” (“non posso caricare, nessun sistema operativo installato”), non devi iniziare a reinstallare tutta la roba. Se hai Windows installato, non posso prometterti che recupererai i tuoi dati, ma è probabile che recupererai tutta la roba di Linux, sempre che non sia posta troppo in basso nella struttura dell'hard disk. Questo perché alcuni virus di Windows cancellano proprio il primo cilindro del disco rigido, qualunque cosa ci sia. Comunque, non ho mai sperimentato un tale virus, e non posso dire nulla di sicuro. Prova a recuperare comunque. Sappi anche che ti dò tutte queste informazioni solo per questo - per informazione. Né io né nessun altro che tu possiamo essere ritenuti responsabili per qualsiasi problema che i tuoi dati possano subire dall'uso di queste informazioni. Ci son troppi sistemi differenti nel mondo perché chiunque sia capace di promettere qualunque cosa. Posso solo augurarti in bocca al lupo e sperare che anche tu, come me, riesca a recuperare felicemente i tuoi dati. Informazioni tecniche Dischi Un hard disk è costituito di settori, numerati da 0 al massimo. dmesg dice, ad esempio: CHS significa Cilindri, Testine, Settori (Cylinders, Heads, Sectors). 523*255*63=8401995 settori di 512 byte, da cui i 4103 Mbyte. Questa è solo una mappatura logica, non coincide necessariamente con quanto riportato sulla copertura del disco (tranne che per la dimensione totale). La vera dimensione dei settori non ci interessa, dato che non vogliamo modificare nulla ma ripristinare uno stato passato. Per noi la dimensione predefinita data da fdisk andrà benissimo. La dimensione vista dal sistema è direttamente dipendente dal BIOS (Basic Input/Output System - la ROM dei PC). Il modo (mode) dell'hard disk indicato nel BIOS è essenziale. Su un disco nuovo, è meglio usare il riconoscimento automatico e scegliere “yes”. Comunque, qualsiasi modifica a questo livello può distruggere tutti i dati del disco, quindi non giocherellare con queste impostazioni senza alcuna ragione grave. Comunque, questa impostazione è probabilmente quella che utilizza il tuo disco, quindi non preoccuparti. Partizioni I dischi oggigiorno sono grandissimi, non è raro che arrivino a 40 Gb, perciò non è molto comodo avere tutta questa roba impacchettata da una sola parte. Solo Windows lo fa, e se usi Linux probabilmente è perché sei conscio di quanto inefficiente sia l'altro. Un hard disk è perciò di solito diviso in alcuni pezzi chiamati “partizioni” (per maggiori dettagli vedi il “partition HOWTO”, e leggi anche /usr/share/doc/package/util/README.fdisk) Diamo un'occhiata a(una parte de)l mio listato di fdisk -l: Questo è il mio secondo hard disk, e riflette tutte le prove che ho fatto (il primo è troppo semplice per essere interessante). /dev/hdb è il mio secondo disco IDE (slave sull'interfaccia primary, primaria), /dev/hdb1 è la prima partizione primaria (primary), che va dal primo (1) blocco al blocco 153. Ci possono essere quattro di queste partizioni primarie. Se uno ne vuole più di 4, una di esse dev'essere una “estesa” (extended) (non necessariamente la quarta); tutte le successive partizioni sono chiamate “logiche” (logical), e sono poste dentro quella estesa. Nota che la partizione numero 5 e la numero 4 hanno lo stesso inizio. La numero cinque è logica, la numero 4 estesa. Le partizioni logiche cominciano sempre da 5, anche se non ce ne sono 4 primarie. Questo è il listato di fdisk -u -l per un altro disco: Non preoccuparti per le parti in francese, sono francese... guarda il tuo listato. Naturalmente i numeri sono più grandi. Perché ci sono problemi? Il problema è che tutti i sistemi operativi installati devono condividere i dischi, e poiché all'avvio il BIOS può analizzare solo il primo, ci dev'essere una cosiddetta “tabella delle partizioni” (partition table) proprio all'inizio di tale disco. Questa tabella delle partizioni è posta nel Master Boot Record (MBR) proprio a fianco del boot loader. Ogni utilizzo sbagliato dell'MBR da parte di uno degli OS porta a un problema. Quando si prova ad installare un qualche sistema operativo, è probabile che rispondere sì a domande tipo “automatic partitioning?” dia problemi... Questo è particolarmente vero per Windows, specialmente con installazioni personalizzate allegate a PC su misura (quando non è incluso un vero CD di Windows, ad esempio in molti portatili). Ma è anche il caso di alcuni nuovi programmi di installazione “intelligenti” (che intelligenti non sono) di Linux, forniti con alcune distribuzioni recenti. Risolvere il problema 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... Il caso più semplice 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. Un caso non tanto semplice By hand 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. Le informazioni di Linux e altri trucchi Il kernel 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 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. So l'inizio della partizione, ma non la fine. 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: Puoi quindi montare la partizione e controllare la grandezza: 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!!! Altri posti in cui sono registrate le informazioni sulle partizioni 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: (se ne conosci altre, per favore manda un'email al gestore di questo documento) gpart 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: gpart /dev/hdb ]]> 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. Recuperare le partizioni dentro una partizione estesa 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 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; XXXX è il settore iniziale e YYY quello finale (può essere arguito). Monta il file come un file system loop. Un caso da ricconi 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. Riferimenti Autori L'autore di questo HOWTO è Jean-Daniel Dodin. Posso essere contattato a jdanield@dodin.net o a jdanield@linux-france.org. Il mio sito web è a http://www.dodin.net. Le pagine su Linux, quelle che vi interessano di più, sono a www.linux-france.org/article/jdanield. Vorrei ringraziare Rolf Klausen (- non risponde - E-mail: rolfk@romsdal.vgs.no http://www2.romsdal.vgs.no/˜rolfk/) che ha scitto il precedente partition-rescue mini HOWTO; anche se l'ho riscritto quasi del tutto, ha avuto lui per primo la buona idea. Nel 2000 non risponde più alla sua email. Se qualcuno sa come contattarlo, per favore mi faccia sapere. Tutti gli altri membri della comunità Linux e tutti coloro che supportano Linux e scrivono documentazione e programmi per Linux e tutti gli autori dell'LDP e virtualmente ogni persona coinvolta in qualunque cosa che ha a che fare con Linux. In particolare Linus B. Torvalds - è _Il Re_!!! Vorrei anche ringraziare Michail Brzitwa <mb@ichabod.han.de> per aver scritto gpart! Bryce Nesbitt <bryce at obviously dot com> ha fatto un ottimo lavoro, la sezione “Le informazioni di Linux” è sua, come molti miglioramenti minori. La traduzione italiana è di Germano Rizzo <mano78@users.sourceforge.net>, nel Novembre 2001. Versioni aggiornate La versione più recente di questo mini-HOWTO dovrebbe essere reperibile nel mio sito web su Linux, a www.linux-france.org/article/jdanield/. Per la versione italiana, si veda l'ILDP a www.pluto.linux.it/ildp/.