Login page

Come vengono salvati i dati sul disco

Spesso si genera molta confusione con i termini legati al salvataggio dei dati sul disco, come ad esempio frammentazione, recupero dati, sovrascrittura, wipe, formattazione e altri ancora. In questa pagina si vogliono riassumere i concetti base per evitare fraintendimenti nei capitoli successivi.

Suddivisione del disco

All'inizio del disco, vengono salvate informazioni sulla tabella delle partizioni, all'inizio di ogni partizione vi sono le informazioni su dove vengono salvati i file all'interno della partizione ad esempio, supponiamo che il seguente schema rappresenti un disco con una partizione e all'interno un file di testo semplice.
Lo spazio vuoto (senza nessun carattere) all'interno della partizione, può contenere qualsiasi cosa, tanto non ci interessa, non è stato riempito, ad esempio, di 0, per evitare di appesantire troppo la lettura degli esempi.
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND file.txt[agjg]
E
F                        IND
G ciao_mondo
H
L'IND (l'indice), contiene tutte le informazioni relative alle posizione dei file, esso è dato, nel esempio, dai quattro caratteri racchiusi nelle parentesi quadre.
Questo vuol dire che se si aggiunge un secondo file, si otterrà un risultato come il seguente
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND file.txt[agjg]file2.txt[kgtg]
E
F                        IND
G ciao_mondocome_stai?
H
notare che, sebbene siano attaccati all'interno della partizione, la scritta ciao_mondo e come_stai? si trovano su due file di testo separati.
Cosa succede se però si decide di aggiungere del testo nel file file.txt? Sostanzialmente possono accadere due cose, a seconda del comportamento del file system.
Nel primo caso si ha
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND file.txt[ahjp]file2.tx
E t[kgtg]
F                        IND
G           come_stai?
H ciao_mondo_bello
in questo caso vengono spostati tutti i byte da una parte all'altra del disco e viene aggiornato l'indice. Questa operazione di solito non viene effettuata per i seguenti motivi:
  • Potrebbe non esserci abbastanza spazio sul disco per spostare il contenuto del file.
  • L'operazione è lunga (e quindi lenta), anche per piccole modifiche potrebbe rendersi necessario ricopiare grossi file
  • Usura maggiore del disco
Nel secondo caso invece
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND file.txt[agjgugzg]file
E 2.txt[kgtg]
F                        IND
G ciao_mondocome_stai?_bello
H
in questo modo è necessario scrivere i dati nuovi e aggiornare l'indice, l'operazione da eseguire è molto più veloce che quella presentata precedentemente. Tramite l'indice è possibile raggiungere qualsiasi parte del file scegliendo la giusta quaterna di caratteri.
Lo svantaggio di questo metodo è la deframmentazione. I suoi effetti sono i seguenti
  • Lettura dai file dal disco rallentata poichè si trovano in diverse zone, la testina, oggetto fisico responsabile della lettura e scrittura dei dati, dovrà muoversi da una zona all'altra del disco per poter leggere un singolo file. Se i dati sono invece contigui (come nel caso 1), allora la lettura dei file risulterà più veloce poiché tutti i componenti si trovano nella stessa zona del disco.
  • Alcuni software per il recupero dei dati non sono in grado o hanno difficoltà a recuperare file frammentati.
Per ridurre quindi la frammentazione il file system si occuperà di allocare diversi file in modo distante, così facendo quando questi verranno modificati non verranno frammentati tanto facilmente, ad esempio
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND file.txt[agpg]file2.tx
E t[nhxh]
F                        IND
G ciao_mondo_bello
H               come_stai?
Lo svantaggio principale, in questo caso, è un possibile consumo inutile di spazio. Considerando però che un sistema operativo occupa mediamente meno di 10GB, e che i dischi attuali hanno memorie superiori alle centinaia di GB, questo generalmente non presenta un problema. Prima di continuare, è necessario sottolineare nuovamente l'importanza dell'indice: esso segna dove si trovano tutti i dati, quando il sistema operativo cerca dei dati, esso interroga l'indice che gli da la posizione. Lo spazio che non è stato indicizzato viene quindi visto come libero, indipendentemente da cosa ci sia effettivamente scritto.
Cosa succede invece quando si vuole cancellare un file?
Ecco, supponendo di cancellare il primo file, cosa succede
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND               file2.tx
E t[nhxh]
F                        IND
G ciao_mondo_bello
H               come_stai?
Viene quindi aggiornato soltanto l'indice. Il sistema operativo non è più in grado di vedere il file sul disco, e gli viene detto che lo spazio [agpg], precedentemente occupato da file.txt è ora libero. Non ha importanza se i file sono ancora li o meno, ora risulta libero e il sistema operativo ci scriverà sopra, ecco ad esempio cosa può succedere creando un nuovo file.
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND new.txt[aghg] file2.tx
E t[nhxh]
F                        IND
G new_filedo_bello
H               come_stai?
In questo caso il vecchio file è stato parzialmente sovrascritto, tutto ciò che è sopravvissuto è il pezzo di parola do_bello.
Il wiping (sovrascrittura) è un forzamento di quello che è appena successo. Per assicurare che i dati vecchi vengano effettivamente cancellati dal disco (e non soltanto la loro indicizzazione), si chiede al sistema di riempire di dati le aree che risultano vuote, ad esempio se abbiamo cancellato il file file.txt, e prima di creare il file new.txt volevamo far sparire ogni traccia sul vecchio file, allora avremmo potuto riempire di zeri lo spazio visto come vuoto.
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND               file2.tx
E t[nhxh]
F                        IND
G 00000000000000000000000000
H 00000000000000come_stai?00
e successivamente scrivere il file
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A informazioni_relative_alle
B _partizioni
C partizione1
D IND new.txt[aghg] file2.tx
E t[nhxh]
F                        IND
G new_file000000000000000000
H 00000000000000come_stai?00
La rimozione delle partizione funziona in modo analogo alla rimozione di un file all'interno della partizione, supponendo appunto di eliminare la partizione a questo punto otterremo
\ ABCDEFGHIJKLMNOPQRSTUVWXYZ
A
B
C partizione1
D IND new.txt[aghg] file2.tx
E t[nhxh]
F                        IND
G new_file
H               come_stai?
vengono quindi rimosse le informazioni relative alla partizione, non le partizioni stesse.
Come spesso accade in informatica si tenta di minimizzare il numero di operazioni da fare, cancellare le informazioni relative ad un file o ad una partizione, è molto più veloce che eliminare per davvero il file o una intera partizione sovrascrivendola.

Nota

Il file stesso può contenere informazioni sulla propria posizione sul disco, dimensione e altro ancora, ma è attraverso l'indice che il file viene localizzato.

Per evitare ulteriormente la frammentazione, il sistema operativo cerca di trovare lo spazio necessario per salvare un file in modo contiguo, solo se non esiste abbstanza spazio contiguo lo spezzarà in varie parti sullo stesso disco.
Inoltre alcuni filesystem moderni (tra cui ext4 e reiserfs) ritardano l'allocazione dei file; questo vuol dire che i file vengono mantenuti in memoria per un tempo più lungo, così che il sistema possa decidere meglio dove posizionare i file, sopratutto se questi vengono modificati e le loro dimensioni ridotte o aumentate. Ovviamente i tempi non sono lunghi, altrimenti se il computer si dovesse spegnere immediatamente (causa ad esempio un calo di corrente) tali file non andrebbero salvati.

Nota sul cancellare i file

Cancellare un file e svuotare il cestino (oppure dare un rm da terminale), non è sufficiente per rendere irraggiungibili i propri dati. Qualsiasi sito ammetta che basta formattare un disco per rendere irrecuperabili i dati si sta sbagliando, anche questa operazione non è sufficiente per cancellarli.
Per poter essere sicuri di aver cancellato i propri dati, verrebbe da pensare, basta sovrascriverli completamente almeno una volta.
Non so se sia del tutto vero, e la questione è irrisolta in quanto non ho trovato molto in merito.\\ Se chi vuole recuperare i dati ha a disposizione soltanto del software, allora è vero che non sarà mai in grado di recuperare i dati sovrascritti. Durante il recupero dei file leggerà tanti 0 (negli esempi fatti prima) e non può sapere in alcun modo cosa ci fosse prima.
Se invece chi vuole recuperare i dati ha a disposizione anche qualche strumento hardware, in particolare un microscopio elettronici, la questione si fa più complessa e si potrebbe essere in grado di recuperare i file. Potrebbe i seguenti due motivi
  • Il documento Gutmann è stato scritto se nel 1996, i supporti su cui vengono salvati i dati e i filesystem si sono evoluti nel frattempo.
  • Non ho trovato nessuna prova (corredata di ricerca attendibile) di un riuscito recupero di dati recuperati dopo una sovrascrittura completa.
  • Esiste una ricerca più recente di quella del professor Guntman che afferma che un solo passaggio è più che sufficiente.
Se queste argomentazioni non dovessero risultare sufficienti, basta notare che il professor Gutmann stesso nel suo documento ammette che un solo passo è più che sufficiente anche per questioni probabilistiche:
it's unlikely that anything can be recovered from any recent drive except perhaps a single level via basic error-cancelling techniques. In particular the drives in use at the time that this paper was originally written are long since extinct, so the methods that applied specifically to the older, lower-density technology don't apply any more. Conversely, with modern high-density drives, even if you've got 10KB of sensitive data on a drive and can't erase it with 100% certainty, the chances of an adversary being able to find the erased traces of that 10KB in 200GB of other erased traces are close to zero.
ci si rende effettivamente conto che recuperare i dati con una sola sovrascritture, se fosse possibile, avrebbe un costo esorbitante.
Tutto questo non è stato scritto per dire che è inutile fare più di una sovrascrittura, ma soltanto per dire che è inutile rompere fisicamente il disco o renderlo inutilizzabile se si teme che qualcuno voglia recuperare i propri dati. Una sovrascrittura va bene, anche due o tre se ci si sente più sicuri, ma anche qui è inutile farne troppe, si rischia di rovinare il disco (sopratutto se è una memoria flash, floppy, cd o ssd). Inoltre è inutile installare programmi che in background effettuanola sovrascrittura dei dati. I dati verranno comunque, in modo casuale, sovrascritti. La procedura di wipe è daeffettuare se si ha intenzione di dare il disco a qualcun'altro che non deve essere in grado di leggere alcuni file che si trovavano precedentemente sul computer.

Quando è possibile perdere e recuperare i dati

Purtroppo ci sono purtroppo molti modi facili per perdere i propri dati, mentre il recupero è difficile. Dal momento che i dati vengono fisicamente salvati sul disco rigido (o chiave USB, CD, e via dicendo) vi sono modalità di perdita completamente differenti, ecco un breve elenco di casistiche:

  • Cancellazione errata di un file

    Un file viene cancellato per sbaglio da parte propria o da parte di qualcun'altro. Oppure da un virus o da un programma. Se non vi sono state sovrascritture del file, le possibilità di recupero sono abbastanza alte per sperare di recuperare il file senza corruzioni. Più il computer viene usato dopo la cancellazione del file, più aumentano le probabilità che il file venga sovrascritto, e quindi diminuiscono le probabilità di successo.
  • Formattazione di una partizione o disco

    Come nel caso della cancellazione di un file, anche in questo caso, se il disco non è stato usato a lungo una volta accortosi del danno, probabilmente i file da recuperare non sono stati sovrascritti e sono quindi recuperabili, anche se non solo è stata rimossa la partizione ma ve ne è stata creata un'altra (anche di tipo diverso).
  • File system corrotto

    Se vi è ad esempio un calo di corrente, o un errore software, può succedere che il filesystem si corrompa e che non sia possibile accedere ai contenuti del disco.
    Se il sistema operativo riconosce il disco come tale dovrebbe essere possibile recuperare i dati, ma non è detto che questi siano sempre integri.
  • Una fonte elettromagnetica ha cancellato i file

    La fonte potrebbe non aver cancellato tutti i file ma soltanto l'indice e le informazioni sulla partizione, si potrebbe essere quindi in grado di recuperare alcuni file.
  • Danno fisico al disco

    Quando il disco fisico si rompe, spesso il sistema operativo non è più in grado di riconoscerlo. In tal caso sono necessari strumenti hardware che solitamente non si hanno a disposizione. Pertanto tramite questa guida non sarà possibile recuperare i file da dischi rotti. Se invece il sistema operativo riesce a leggere ancora il disco, dovrebbe essere possibile recuperare i file.

Un fattore che diminuisce ulteriormente la probabilità di recupero dei dati è la frammentazione. I programmi hanno infatti maggiori difficoltà a capire dove iniziano e finiscono i file all'interno del disco se l'indice non è più disponibile.
Non si deve mai effettuare la deframmentazione poco prima di un tentativo di recupero di file, l'unico risultato che si ottiene è quello di spostare i file che il sistema operativo è già in grado di leggere e quindi rischiare di sovrascrivere i file che si vogliono recuperare.
Il modo migliore per evitare la perdita dei dai è copiarli su un disco esterno, ovvero effettuare un backup, una copia di sicurezza, in modo che qualsiasi cosa accada al computer si abbia sempre la certezza di essere in grado di recuperare i file, anche se non per forza dal computer stesso.

Questo è l'elenco degli articoli di questa categoria:

Ripulire Debian: Ripulire Debian da linea di comando
Come recuperare dati persi: come recuperare dati persi o cancellati