Home Page

Tips page
c
cellulari
debian
egittologia
emacs
emacs-latex
hardware
html
inglese
java
latex
linux

*Alcuni comandi utili utilizzando find
*ARP e MAC address
*Ascoltare un CD audio
*Attivare il NumLock (BlocNum)
*Attivare i tasti i tasti Magic SysRq
*AWK, use an environment variable inside a script
*Bash e Argument list too long
*BogoMIPS
*Cancellare file e non recuperare spazio
*Capacita` dell'hard disk
*Come cambiare i font delle applicazioni con librerie GTK
*Come cambiare l'hostname
*Come tentare di recuperare file, filesystem e partizioni
*Compilare in parallelo
*Condividere una partizione
*Configure proxy for shells
*Continuous disk access
*Controllare la salute di hard disk e filesystem
*Convertire ext2 in ext3 (e viceversa)
*Convertire un file di testo dalla codifica DOS a quella UNIX
*Cosa fare quando si perde la password di root
*Cosa significa l'errore ``TCP
*Creare un boot floppy
*Creare un file temporaneo
*Deframmentazione di un filesystem
*Delete last chars from a string
*Determinare lo spazio libero sul disco
*Eliminare il beep
*Emettere un beep da script
*Enable PPP connection on boot
*Exclude a directory with rsync
*Execute telnet from a script
*Gestione dei file di log
*Gestione dei file .iso
*Gestione della data/ora
*Gestione di utenti e gruppi
*Hash md5 di una stringa
*Identificare la distribuzione installata
*I file ps e pdf
*Il file /etc/fstab
*Il file /etc/issue[.net] e /etc/motd
*Il filesystem SysFs
*I link soft ed hard
*Il path delle applicazioni
*Il sistema tutto in maiuscolo
*I moduli del kernel
*Impostare piu` IP per una scheda di rete
*Introduzione a LVM
*Inviare messaggi agli altri utenti
*I permessi della directory root, /
*La gerarchia del filesystem di Linux
*La memoria Ram sotto Linux
*La memoria swap
*Limitare la possibilita` di diventare root
*Limitazioni alla dimensione del file
*Log dei login utente
*Modificare il comportamento di ctrl+alt+canc
*Modificare le variabili della parent shell
*Montare o rimontare un filesystem come read-only
*More columns in a shell output
*Negare il login durante la manutenzione del sistema
*NoHUP
*Obtain the exact process start time
*Ottenere uno snapshot dello schermo
*Partizionamento di un sistema Linux
*Perche' si usa ./ per avviare alcuni eseguibili
*Permanent PPP connection
*PID of a process
*Programmare l'esecuzione dei programmi
*Quale processo utilizza un certo file o porta
*Quali vantaggi si hanno dalla ricompilazione
*Remove from find results
*Ricreare velocemente /tmp al boot
*Ridirezione dell'output
*Rimappare la tastiera
*Ripristinare i caratteri sballati in console
*Riscrivere l'MBR
*Salvarsi da un ``rm'' di troppo...
*Save MBR
*Scrivere in modo sincrono su filesystem
*Scrivere nel log di sistema di Linux
*Separazione dei comandi nella shell
*Separazione delle parole nella shell
*Share the internet connection
*Shell configuration files
*Single quote character escape with sed
*Spostare una directory in un'altra partizione
*Stimare il carico di lavoro della macchina
*Undelete di un file
*Usare le pendrive USB sotto Linux
*Usare partizioni primarie o estese
*Use md5sum to verify saved files
*Use ssh and scp without password
*Utilizzare hdparm per controllare gli hard disk
*Verificare un file video
*What is a zombie process
*What is the file System.map?
*What is the shebang? (Shell scripts)
*What shared libraries a program uses
*Yesterday date

matlab
misc
mysql
network
octave
programming
python
security
sed
tech
webapps
windows

University Page

Programming

Debian & Linux

Some works

About me

Del.icio.us Bookmarks

BOINC Combined Statistics

Site Statistics

Contact me sending an e-mail (antispam defense activated)

debian

hacker emblem

blogger

GeoURL

View Sandro Tosi's profile on LinkedIn

This is my Google PageRank

Title: Come tentare di recuperare file, filesystem e partizioni
Author: Sandro Tosi
Last modified: 2004-11-14 (2004-11-09) (2004-11-07) (2004-11-03)

I momenti  in cui  si ha necessita`  di un recupero  ``disperato'' del
sistema, sono svariati: cancellazione di una partizione, errori fisici
di  un   disco  da  cui   si  devono  salvare  dei   dati  importanti,
cancellazione involontaria di file.

Naturalmente, a margine di quanto  scritto qui, una politica di backup
seria ed  oculata e` insostituibile  per porsi al riparo  da eventuali
danneggiamenti fisici ed errori manuali.

Inoltre, e`  fondamentale, per avere qualche speranza  di recuperare i
propri  dati, smettere  *subito* di  scrivere sulla  partizione  o sul
disco danneggiati:  altrimenti i dati da  recuperare potrebbero essere
sovrascritti e dunque perduti per sempre.


Undelete
========

Puo` succedere di effettuare un  ``rm'' di troppo, e solitamente ci se
ne accorge subito dopo aver premuto Enter...

L'eliminazione in  Linux e` definitiva: non esiste  un'area tampone in
cui vengono parcheggiati i dati ``cancellati'' (il Cestino di Windows,
per  intendersi), ma vengono  effettivamente rimossi,  deallocando gli
inode.

Per aver  anche la minima  possibilita` di recuperare qualche  file, e
necessario  smontare  _quanto prima_  la  partizione  dove sono  stati
cancellati   i  file:   i   filesystem  Linux,   infatti,  tendono   a
auto-deframmentarsi e  quindi potrebbero utilizzare  parte dei blocchi
di un file cancellato per scriverne uno nuovo.

Il  principio  su  cui si  basano  le  tecniche  di recupero  di  file
erroneamente  cancellati e`  il seguente:  un filesystem  non cancella
fisicamente i  dati (sia quelli di  gestione, come inode  e tabelle di
allocazione, che  quelli effettivamente contenuti nel  file) quando un
file viene cancellato,  ma *marca* i blocchi e  le strutture dati come
liberi.

Si  tratta   di  avere  alcune   zone  del  filesystem   marcate  come
utilizzabili, in quanto libere, ma  che in realta` contengono ancora i
precedenti dati.

La rapida  interruzione dell'utilizzo  del filesystem consente  di non
sovrascrivere quelle  aree di  memorizzazione che prima  contenevano i
nostri dati.


Per ext2 esiste l'Ext2fs-Undeletion HOWTO, che indica le operazioni da
svolgere  per  cercare  di  recuperare file  erroneamente  cancellati;
inoltre e`  stato creato un  programma, ``recover'' (di cui  esiste la
versione  con  interfaccia  grafica,  ``gtkrecover''),  che  cerca  di
automatizzare alcuni dei passi  indicati nell'HOWTO. Si parta comunque
con lo spirito d'animo che quel che e` stato e` stato...

Il noto Midnight Commander,  ``mc'', supporta l'undelete per ext2. Nel
caso  si usi  questo filesystem,  si ha  cosi` un  metodo  pratico per
recuperare i file cancellati.


Dal momento che ext3 e` un filesystem journaling (sebbene molto simile
ad ext2),  e dunque per come  vengono gestite le  operazioni su disco,
non e` possibile utilizzare ``recover'' su partizioni di quel tipo.


Con ReiserFS si puo` utilizzare il comando

# fsck.reiserfs --rebuild-tree

per cercare di recuperare i file cancellati.


Per gli  altri filesystem  non sono a  conoscenza di alcun  metodo per
cercare il  recupero di  file cancellati. E`  bene pensarci  due volte
prima di eseguire un ``rm''...


Un trucchetto  per evitare  di effettuare un  ``rm'' in  una directory
sbagliata  e` quello  di creare  un file  ``-i'' nelle  directory piu`
importanti.


/etc/fstab sbagliato
====================

Puo` capitare di commettere degli errori modificando /etc/fstab (...),
magari proprio sul filesystem / (!!); questo comporta l'impossibilita`
di effettuare il boot al successivo riavvio.

Basta  non  farsi prendere  dal  panico,  in  quanto la  soluzione  e`
semplice:  si  prenda  una  distribuzione  live,  o  anche  un  cd  di
installazione  di Woody,  e si  esegua il  boot della  macchina. Fatto
cio`, si  apra una console (nel  caso di Woody  si utilizzi l'immagine
``bf24'' e poi la console in Alt+F2) e si digiti:

# mount <device_di_/> /mnt
# $EDITOR /mnt/etc/fstab
- correzione di fstab
# umount /mnt
# reboot

Sara` ora possibile riutilizzare il  proprio sistema come prima (il cd
deve essere tolto prima del reboot).


Filesystem di / non ext2/3
==========================

Utilizzare il proprio filesystem  preferito (non ext2/3) anche sulla /
non e` un grosso problema. Potrebbe esserlo quando si ha necessita` di
interventi  straordinari, in quanto  il filesystem  di /  potrebbe non
essere supportato dal disco di recupero utilizzato.

E` dunque consigliabile  creare un rescue disk che  contenga tutti gli
strumenti a supporto del proprio filesystem, oppure sincerarsi che sia
gia` presente nella propria distribuzione live di recupero.

Un  buon   punto  di   partenza  e`  http://lbt.linuxcare.com   ,  una
distribuzione minimale  con gli  strumenti necessari alla  gestione di
XFS.


Recupero di partizioni
======================

Nel caso si sia cancellata la partition table, e` possibile recuperare
la  situazione  ricreando  *esattamente*  le stesse  partizioni  senza
formattare. In ogni  caso, conviene crearsi una copia  di backup della
partition table con

# sfdisk -d [device] > [partition_table_backup]

per essere restorata con

# sfdisk [device] < [partition_table_backup]


Se il disco presenta degli errori fisici nei primi settori, lo si puo`
considerare  come   completamente  inutilizzabile  ed  irrecuperabile:
conviene allora effettuare una copia  con ``dd'' su un altro disco per
poi utilizzare ``testdisk'' e recuperare le partizioni.


Un altro utile strumento per recuperare la tabella delle partizioni e`
``gpart'': e` in  grado di scandire l'hard disk  e di identificare, se
le partizioni sono formattate, dove  iniziano i vari filesystem. Se il
partizionamento  e` stato  effettuato con  strumenti  ``seri'' (*fdisk
Unix) il recupero e` quasi garantito. Si esegua:

# gpart -l <log_file> <device>

e con fdisk di riscrivano esattamente nello stesso ordine e dimensioni
di come viene indicato.


Esiste anche una distribuzione live  apposta per il recupero dei danni
gravi    ai    filesystem:     SysRescCd,    disponibile    al    sito
http://www.sysresccd.org    .   Contiene    ``gpart'',   ``dd_rescue''
(un'interfaccia ad esso e`  ``dd_rhelp'', che ne facilita l'utilizzo),
``testdisk'' e molti altri tool utili


Alcuni software di recupero, noti su Windows, sono stati portati anche
su Linux: OnTrack,  per esempio, dispone del pieno  supporto a tutti i
filesystem piu` noti disponibili  su Linux. Ovviamente, questo tipo di
programmi si pagano.


Un filesystem contiene al suo interno alcuni blocchi riservati, ed uno
di  questi  e`  il  superblock,  il primo  settore  della  partizione,
fondamentale per  l'utilizzo del sistema.  Nel caso si  rovini proprio
quel  blocco, non sara`  nemmeno possibile  effettuare il  mount della
partizione.

Sarebbe buona prassi segnarsi i numeri dei superblock di backup quando
si crea  un filesystem; (praticamente)  nessuno lo fa. Per  ext2/3 dal
man di  e2fsck (alla  descrizione del flag  ``-b'') si  leggono queste
indicazioni:

| The  location   of  the  backup  superblock  is   dependent  on  the
| filesystem's  blocksize.   For  filesystems  with 1k  blocksizes,  a
| backup superblock can  be found at block 8193;  for filesystems with
| 2k  blocksizes, at  block 16384;  and  for 4k  blocksizes, at  block
| 32768.
| 
| Additional backup superblocks can  be determined by using the mke2fs
| program using the -n option  to print out where the superblocks were
| created.  The -b option to  mke2fs, which specifies blocksize of the
| filesystem must  be specified in order for  the superblock locations
| that are printed out to be accurate.

che mostra  anche un  metodo (utilizzare mke2fs  -n) per  recuperare i
superblock di backup.  Una volta ottenuto un superblock  di backup, si
puo` cercare di recuperare la partizione con

# e2fsck -b <superblock_number>

Nel caso in cui tutti i superblock (anche di backup) siano corrotti si
puo` tentare un ultimo, disperato, tentativo:

# mke2fs -S <device>
# e2fsck <device>

che *potrebbe* consentire di salvare qualche file prezioso.


Un  altro strumento molto  interessante in  casi veramente  estremi e`
``debugfs''.  Si tratta di  un vero  e proprio  debugger per  ext2/3 e
consente di  esaminare e cambiare lo  stato del filesystem.  Non e` un
programma che tutti  sono in grado di usare, ed  anche le modalita` di
utilizzo  non sono  delle piu`  semplici. Vista  la potenza  di questo
strumento, si sconsiglia  anche solo di pensare ad  utilizzarlo se non
si sa *esattamente* quello che si andra` a fare.


fsck
====

fsck.<fs>  consente di  controllare  lo stato  di  un filesystem.  Con
l'opzione  ``-cc'' viene  effettuato  anche il  controllo dei  blocchi
tramite ``badblocks''.


A volte succede che dopo  un riavvio forzato venga chiesto di inserire
la password  di root  ed eseguire fsck  a mano: quando  questo accade,
conviene  seguire cio`  che  viene  scritto a  video  ed, ogni  tanto,
incrociare le dita... ;-)


Quando  fsck  non riesce  a  ricostruire  esattamente  l'albero di  un
filesystem,    sposta   i    rami    ``staccati''   nella    directory
/<mount_point>/lost+found   utilizzando   per   nome  l'inode   number
preceduto dal carattere ``#''.

Non sempre  e` facile capire cosa  contengono i file  creati in questa
directory,  ma  l'utilizzo  di  ``strings''  potrebbe  aiutare  questo
processo.

Inoltre,  per  i  filesystem  ``caldi'',  e`  buona  pratica  eseguire
periodicamente un

# find <mount_point> -ls

il primo numero e` l'inode  number (non e` proprio comodissimo, ma chi
non vorrebbe averlo in caso di eventi come quello descritto prima?).


In caso  si utilizzino filesystem journaled si  tenga presente questo:
un filesystem  journaled assicura la  consistenza dei dati non  il non
perdere  file se  il filesystem  si danneggia;  per questo  esistono i
backup.

E`  quindi buona  norma mantenere  il  check periodico  dei dischi  al
riavvio (su base temporale o per numero di mount), ed anche in caso di
riavvio forzato del sistema.

Su ext3,  per esempio, e2fsck  riesegue automaticamente il  journal, e
solo  se  il filesystem  non  risulta  coerente,  esegue un  controllo
sull'intera partizione. Inoltre, se  il filesystem non risulta pulito,
perche`  il kernel  aveva notato  alcune inconsistenze,  e2fsck esegue
automaticamente un controllo completo, se necessario.

Inoltre, in  presenza di piu`  dischi, il controllo viene  eseguito in
parallelo, velocizzando  la sequenza di boot, invece  che lasciare che
il  kernel  riesegua il  journal  per  ogni  filesystem che  tenta  di
montare, in quanto in questo modo il replay del journal viene eseguito
in maniera sequenziale, anziche` in parallelo.


RAID software o hardware
========================

L'utilizzo del RAID consente di mettersi al riparo da molte situazioni
critiche, ma quando si rovina l'array, i risvolti possono anche essere
catastrofici.

Gli eventi di  crisi sono molto vari: RAID-0 in cui  uno dei dischi si
rompe; RAID-5 dove si corrompono in rapida successione 2 dei 3 dischi,
etc.  Inoltre, la situazione  si complica  a seconda  che il  RAID sia
software o hardware.

Se il RAID e` implementato  via software, il recovery e` relativamente
semplice: e`  noto l'algoritmo  con cui i  dati sono memorizzati  e si
puo` tentare un recupero,  con opportuni strumenti, anche con relativi
margini di successo (le probabilita` sono grosso modo le stesse che si
avrebbero in assenza di RAID).

Se  invece  il  RAID  e`  hardware i  problemi  possono  essere  anche
insormontabili:  ogni firmware  di  ogni marca  puo` implementare  gli
algoritmi di  replicazione dei dati  sull'array come vuole,  e nessuno
(tranne   il  produttore,   ovviamente)  e`   in  grado   di  indicare
_esattamente_ il  metodo utilizzato e dunque come  tentare il recupero
dei dati.

Per esempio, prendiamo il RAID-5 su 3 dischi: l'algoritmo utilizza 2/3
dello  spazio  per allocare  i  dati ed  1/3  per  allocare valori  di
parita`. Un metodo semplice per implementare il RAID-5 potrebbe essere
questo  (dove  D* rappresenta  un  blocco dati,  e  P**  un blocco  di
parita`, ottenuto tramite XOR):

disco 1) D1  D3  D5
disco 2) D2  D4  D6
disco 3) P12 P34 P56

ma potrebbe anche essere organizzato in questa maniera:

disco 1) D1  D3  P56
disco 2) D2  P34 D6
disco 3) P12 D4  D5

Si vede facilmente  che il recupero in caso di  RAID hardware e` quasi
impossibile.


LVM
===

La situazione e` addirittura peggiore del caso RAID, se possibile.

Una soluzione sembra essere la  seguente: una versione demo di Stellar
Phoenix non  porta a termine il  recovery, ma indica  cosa si dovrebbe
riuscire a recuperare.


Errori hard disk
================

In caso  di errori  fisici, nessun livello  di logica  (software) puo`
essere  sufficiente: se  un blocco  e` corrotto  a livello  fisico (il
materiale magnetico e` rovinato a causa di un contatto con la testina,
per  esempio) non  esiste nessun  software in  grado di  recuperare la
situazione.

Il consiglio che si puo` dare e` di smettere di utilizzare il disco, a
volte anche staccarlo fisicamente dal  pc (nel caso non si abbia tempo
di effettuare un'analisi subito, anche  se il bootstrap di un disco e`
la  parte del  suo utilizzo  che lo  stressa di  piu`),  ed effettuare
quanto  prima una  copia  di backup  dei  dati contenuti,  utilizzando
``dd'' alla  peggio, per cercare di  limitare i danni  e recuperare il
recuperabile.


Esiste comunque  un programma,  ``badblocks'', che analizza  un device
alla ricerca  di blocchi danneggiati:  un loro continuo aumento  e` il
chiaro  segno  di un  disco  che  sta  rovinandosi sempre  piu`.   Per
controllare  piu`  a fondo  il  disco,  conviene  pero` utilizzare  le
routine del produttore, che  solitamente rilascia un dischetto di boot
con  all'interno gli strumenti  necessari a  controllare lo  stato del
disco.


Un eccellente  tutorial su come  identificare un file associato  ad un
settore corrotto e come forzare il ricollocamento di questo settore sul
disco       e`        disponibile       a       questo       indirizzo
http://smartmontools.sourceforge.net/BadBlockHowTo.txt


In tutto  questo, il kernel avvisa della  situazione critica scrivendo
nei log messaggi che  devono mettere in allarme: ``DriveStatusError'',
``DriverStatusError    BadCRC'',    ``DriveSeekError'',   ``DriveReady
SeekComplete DataRequest Error'', e molti altri simili.

Controllare i log  del kernel consente di prevenire  danni ulteriori e
di salvare la situazione al piu` presto.


Naturalmente,  esistono  servizi   che,  dietro  un  lauto  pagamento,
consentono  di recuperare i  dati da  hard disk  che sembrano  solo da
buttare.  Dato  pero`  l'elevata  cifra richiesta,  e`  una  soluzione
applicabile solo a dati _veramente_  critici (ma non si utilizzavano i
backup per questo tipo di dati...?).