Citit despre procesul de recuperare a datelor de pe un disc FAT și algoritmul utilizat pentru recuperarea fișierelor. Acum că am găsit sistemul de fișiere, putem începe să analizăm înregistrările acestuia. Scopul nostru este identificarea adreselor sectoarelor fizice de pe disc care conțin date aparținând unui fișier șters. Pentru a face acest lucru, un algoritm de recuperare a datelor va scana sistemul de fișiere și va enumera înregistrările acestuia.

căutării

Algoritmul de căutare și structura tabelei de partiții FAT

În prima parte a articolului, am analizat algoritmul de căutare și structura tabelului de partiții FAT. În sistemul FAT, fiecare fișier și director are o înregistrare corespunzătoare în sistemul de fișiere, așa-numita intrare de director. Intrările din director conțin informații despre fișier, inclusiv numele, atributele, adresa inițială și lungimea acestuia.

Conținutul unui fișier sau director este stocat în blocuri de date de lungime egală. Aceste blocuri de date se numesc clustere. Fiecare cluster conține un anumit număr de sectoare de disc. Acest număr este o valoare fixă ​​pentru fiecare volum FAT. Este înregistrat în structura corespunzătoare a sistemului de fișiere.

Partea dificilă este atunci când un fișier sau director conține mai mult de un singur cluster. Clusterele ulterioare sunt identificate cu structuri de date numite FAT (File Allocation Table). Aceste structuri sunt utilizate pentru a identifica clusterele ulterioare care aparțin unui anumit fișier și pentru a identifica dacă un anumit cluster este ocupat sau disponibil.

Înainte de a analiza sistemul de fișiere, este esențial să identificați cele trei zone ale sistemului.

  • Prima zonă este rezervată; conține informații esențiale despre sistemul de fișiere. În FAT12 și FAT16, această zonă are o lungime de un sector. FAT32 poate utiliza mai mult de un sector. Mărimea acestei zone este specificată în sectorul de încărcare.
  • A doua zonă aparține sistemului FAT și conține structuri primare și secundare ale sistemului de fișiere. Această zonă urmează imediat zona rezervată. Dimensiunea sa este definită de dimensiunea și numărul structurilor FAT.
  • În cele din urmă, ultima zonă conține datele reale. Conținutul fișierelor și directoarelor este stocat în această zonă specială.

La analizarea sistemului de fișiere, zona FAT va fi de interes principal. Această zonă conține informații despre adresele fizice ale fișierelor de pe disc.

figura 1. Structura fizică a sistemului de fișiere FAT.

Când se analizează sistemul de fișiere, este esențial să se determine corect cele trei zone ale sistemului. Zona rezervată începe întotdeauna chiar de la începutul sistemului de fișiere (numărul sectorului 0). Mărimea acestei zone este specificată în sectorul de încărcare. În FAT12 și FAT16 dimensiunea acestei zone este exact un sector. În FAT32, această zonă poate ocupa mai multe sectoare.

Zona FAT urmează imediat zona rezervată. Zona FAT conține una sau mai multe structuri FAT. Mărimea acestei zone este calculată prin înmulțirea numărului de structuri FAT cu dimensiunea fiecărei structuri. Aceste valori sunt stocate și în sectorul de boot.

Recuperarea fișierelor

În sfârșit, suntem aproape de recuperarea primului nostru fișier. Să presupunem că fișierul a fost șters recent și nici o parte din fișier nu a fost suprascrisă cu alte date. Aceasta înseamnă că toate clusterele utilizate anterior de acest fișier sunt acum marcate ca fiind disponibile.

Este important de reținut că sistemul poate șterge și înregistrările FAT corespunzătoare. Acest lucru înseamnă că putem obține informații despre adresa inițială a fișierului, atributele și dimensiunea acestuia, dar nu avem nicio modalitate de a obține date despre clusterele ulterioare.

În acest moment, nu putem recupera întreaga listă de clustere care aparțin fișierului șters. Cu toate acestea, putem încerca să recuperăm conținutul fișierului citind primul cluster. Dacă fișierul este destul de mic și se încadrează într-un singur cluster, minunat! Tocmai am recuperat fișierul. Cu toate acestea, dacă fișierul este mai mare decât dimensiunea unui singur cluster, trebuie să dezvoltăm un algoritm pentru a recupera restul fișierului.

Sistemul FAT nu oferă o modalitate ușoară de a determina care clustere aparțin unui fișier șters, astfel încât această sarcină este întotdeauna un joc de ghicit. Cea mai simplă modalitate este doar citirea clusterelor după cea inițială, ignorând dacă aceste clustere sunt sau nu ocupate de alte fișiere. Oricât de stupid ar suna, aceasta este singura metodă disponibilă dacă nu este disponibil niciun sistem de fișiere sau dacă sistemul de fișiere este gol (de ex. După formatarea discului).

Cealaltă metodă este mai sofisticată, citind doar informații din clustere care nu sunt ocupate cu date aparținând altor fișiere. Această metodă ia în considerare informații despre clustere ocupate de alte fișiere, așa cum se specifică în sistemul de fișiere.

Este logic să presupunem că a doua metodă dă rezultate mai bune comparativ cu prima (presupunând că sistemul de fișiere este disponibil și nu gol). A doua metodă poate chiar recupera unele fișiere fragmentate.

Figura 2 prezintă trei scenarii diferite de recuperare a unui fișier care ocupă 6 clustere ale sistemului de fișiere. Dimensiunea fișierului este de 7094 octeți; dimensiunea clusterului este de 2048 octeți. Aceasta înseamnă că fișierul șters a ocupat inițial 4 clustere. În plus, cunoaștem adresa clusterului inițial (clusterul 56). În scop demonstrativ, clusterele care aparțineau fișierelor șterse sunt colorate în albastru. Culoarea roșie marchează clustere ocupate cu alte date, în timp ce clustere goale sunt umplute în alb.

Figura 2. Trei scenarii de recuperare a fișierelor.

  • În scenariul 2.A, fișierul ocupă 4 clustere ulterioare (adică fișierul nu este fragmentat). În acest caz, fișierul poate fi recuperat corect prin oricare algoritm. Ambii algoritmi vor citi corect clusterele de la 56 la 59.
  • În scenariul 2.B, fișierul a fost fragmentat și stocat în 3 fragmente. Clusterele 57 și 60 sunt utilizate de alte fișiere. În acest scenariu, primul algoritm va recupera clusterele de la 56 la 59, care va returna un fișier corupt. A doua metodă va recupera corect clusterele 56, 58, 59 și 61.
  • In final scenariul 2.C, fișierul șters a fost, de asemenea, fragmentat (aceleași clustere ca în 2.B). Cu toate acestea, clusterele 57 și 60 nu sunt utilizate de niciun alt fișier. În acest scenariu, ambii algoritmi vor recupera clusterele de la 56 la 59, ambii returnând un fișier deteriorat.

După cum putem vedea, nici una dintre metode nu este perfectă, dar al doilea algoritm oferă șanse mai mari de recuperare cu succes în comparație cu prima. Această metodă este utilizată în Recuperarea partiției Hetman.

În scenariul nostru simplu am presupus că toate părțile fișierului sunt încă disponibile și nu sunt suprascrise cu alte date. În viața reală, acest lucru nu este întotdeauna cazul. Dacă unele părți ale unui fișier sunt preluate de alte fișiere, niciun algoritm nu va putea recupera fișierul complet.

Concluzie

După cum am putut vedea, sistemul de fișiere FAT este destul de simplu. Acesta este exact motivul pentru care este atât de utilizat pe scară largă de către producătorii de CompactFlash, Memory Stick și xD-Picture Card. Cu toate acestea, când vine vorba de recuperarea datelor, FAT nu este cel mai bun sistem de fișiere din jur. Cu un anumit nivel de fragmentare, unele fișiere pot sau nu să fie recuperate, indiferent de abordarea aleasă.

Din fericire, Windows nu mai folosește sistemul FAT pentru formatarea hard disk-urilor interne. Utilizarea unui sistem de fișiere mult mai nou și mai sofisticat, NTFS, este impusă la formatarea unui disc de sistem și este foarte recomandată la formatarea altor partiții. NTFS este un sistem de fișiere mult mai complicat. Internele NTFS vor fi discutate în următorul articol.