Întoarceți-vă de la abis sau restaurați fișierele din unix

Întoarceți-vă de la abis sau restaurați fișierele pe UNIX

Liam Widdowson, John Ferlito

Situația șterse atunci când accidental unele fișiere importante, care transportă cu ea în uitare toate biți și bytes lor - un coșmar pentru orice administrator de sistem. În cele mai multe cazuri, aceasta este mai mult o inconvenientă decât o tragedie, deoarece fișierele pot fi restaurate utilizând o copie de rezervă actualizată în mod regulat.

Cu toate acestea, dacă un administrator de sistem sau un dezvoltator a efectuat modificări semnificative ale fișierului de la ultima copie de rezervă a fișierului, este posibil să se piardă o cantitate corectă de date. Situațiile neplăcute nu se limitează la acest lucru: scenarii de rezervă configurate incorect, defecțiuni hardware sau, în final, ghinion simplu. Nimic nu poate înlocui o strategie de rezervă adecvată. Nu punem la îndoială această îndoială, în acest articol ne concentrăm asupra metodelor de restaurare completă sau parțială a fișierelor din sistemul de fișiere UNIX.

UNIX FILE SYSTEM

Fișierele din UNIX sunt containere de date logice. Fiecare fișier este asociat așa-numita structură inod (inode, indicele de-nod structura), care conține metadate (blocuri de disc în care se află fizic de fișiere), informații despre proprietarul fișierelor, permisiunile de acces, dimensiunea și așa mai departe. D. La demontarea fișierului index descriptorii nu sunt șterși fizic de pe disc, ci sunt marcați ca fiind gratuite. Datele conținute în astfel de fișiere sunt încă stocate pe disc și pot fi recuperate dacă informațiile noi nu au fost încă înregistrate în locul lor.

RETURNAȚI DIN BOTTĂ

Această comandă a transformat fișierul cu codul Perl într-un fișier cu octet zero. Situația este agravată de faptul că modificările făcute în timpul săptămânii, nu au fost aduse în sistemul de control al bazei de date angajat de revizuire (Concurrent Versions System, CVS), ceea ce a însemnat pierderea a aproximativ 600 de linii de cod. Când a raportat ce sa întâmplat, să o liniștească, spunând că, de fapt, nu există nici o problemă mare, deoarece fișierul pot fi recuperate din copia de rezervă, care a fost făcut noaptea trecută, și că ea va trebui să recupereze doar codul scris astăzi.

Am sunat pe administratorul nostru de sistem și l-am rugat să restaureze dosarul care ne interesează. Cu toate acestea, nu am primit răspunsul pe care l-am așteptat - administratorul de sistem a recunoscut că nu a auzit niciodată despre serverul de dezvoltare și, prin urmare, acest server nu a fost rezervat.

Angajat, sa resemnat faptul că sistemul de fișiere UNIX nu poate restabili un fișier șters anterior, am pregătit să-mi petrec tot weekend-ul pentru a re-scrie acest cod. Ea a fost asigurată că este posibilă restaurarea dosarului, însă acest lucru va dura mai multe ore. Rețineți că astfel de povesti neplăcute se întâmplă nu numai cu administratorii neexperimentați. Cu câțiva ani în urmă, lucrând în Linux, unul dintre noi a scris în mod accidental crontab -d în loc de crontab -e. Câți cititori vor fi utilizatorii care fac backup / var / spool / cron / crontabs?

RESTORING UNIX FILES

Principalul lucru nu este să permiteți blocarea blocurilor sau a descriptorilor de inode revendicați anterior de fișierul la distanță care să fie suprascrise de alte procese. Acest lucru este valabil mai ales dacă această secțiune este aproape plină, de atunci probabilitatea de reutilizare a descriptorilor indexului șters este semnificativ crescută. În cazul în care gradul de umplere al secțiunii este mic, procesul de recuperare poate fi efectuată direct pe montat cu o partiție unitate de citire / scriere, cu toate că, așa cum sa menționat mai sus, șansele de recuperare în acest caz va scădea în mod inevitabil.

Următoarele descriu procedurile pentru restaurarea fișierelor în sistemele UNIX. Prima secțiune este dedicată metodei de recuperare a fișierelor cu conținut cunoscut, care este aplicabilă pentru aproape toate soiurile sistemelor de fișiere UNIX. Cel de-al doilea analizează particularitățile recuperării fișierelor în sistemul de fișiere ext2 Linux.

PROCESUL DE REZOLVARE A FILDELOR CU CONȚINUTUL CUNOSCUT

După ce sistemul a fost transferat într-o stare sigură, trebuie să utilizați comanda dd (1) pentru a face o copie a datelor originale ale partiției care conține fișierul șters. Să presupunem că fișierul / etc / passwd a fost șters din greșeală. Următorul exemplu ilustrează procedura pentru crearea unei copii a partiției rădăcină și apoi plasarea acesteia într-un fișier din partiția / export:

Partiția țintă trebuie să fie suficient de mare pentru a acoperi întreaga partiție sursă (în acest caz, aproximativ 128 MB). Dacă sistemul nu are spațiul necesar pe disc, trebuie să vă gândiți la acțiuni alternative, cum ar fi montarea unei partiții la distanță utilizând NFS sau efectuarea de acțiuni direct pe fișierul dispozitivului de partiționare.

După ce se face o copie a sistemului de fișiere, sistemul poate fi returnat în modul multi-utilizator și poate continua să funcționeze cu acesta în modul normal. În cazul în care copia eșuează, sistemul ar trebui să fie lăsat într-o stare sigură, și înlocuiți numele dispozitivului în numele fișierului (în exemplul de mai jos, / dev / dsk / c0t3d0s0 se înlocuiesc cu /export/recover.dsk).

Procedura descrisă mai jos este mai degrabă artă decât știință. Permiteți ștergerea fișierului numit passwd. În partea stângă a instrucțiunii următoare, comanda pisică (1) reflectă toate "șirurile" de pe disc (opțiunea -n asigură ieșirea numerelor de linie). O altă ieșire este redirecționată către utilitarul fgrep (1), iar cel din expresia regulată specificată efectuează o căutare "rapidă" pentru intrarea rădăcină din fișierul passwd:

În exemplul nostru, versiunile fișierului / etc / passwd au fost stocate pe disc în trei locuri. Versiunea GNU a utilitarului grep (1) oferă opțiunile -A și -B, care vă permit să imprimați mai multe linii înainte și după modelul găsit pe șablon. Acest lucru facilitează extragerea conținutului întregului fișier șters. Dacă versiunea grep (1) GNU nu este instalat pe computer, puteți utiliza programul pe un Cu numit seekcat, se arată în Listarea 1. Se imprimă întregul fișier, începând de la o anumită compensare în octeți sau linii. Programul searchcat oferă doi parametri independenți: primul este indicat cu flagul -b sau -l, urmat de un număr întreg indicând decalajul în octeți sau liniile din care ar trebui să înceapă listele. Al doilea parametru este specificat ca flag -f, iar apoi este specificat numele fișierului, care în acest caz este "imaginea de disc" a datelor sursă.

Același rezultat poate fi obținut prin specificarea utilității searchcat a șirului inițial. Acest număr este luat din imprimarea obținută ca urmare a comenzii cat -n, descrisă anterior în secțiunea curentă. Programul searchcat va afișa conținutul fișierului, pornind de la locul în care a fost găsit șirul care corespunde șablonului. În exemplul următor, sunt afișate 10 linii ale "imaginii discului", începând cu prima linie găsită (linia numerotată 200 600). Dacă este necesar, puteți repeta procesul prin specificarea numărului liniei următoare (în exemplul său numărul său este 202 098).

PROCESUL DE RECUPERARE A FILEI LA LINUX

Este vorba despre procesul de recuperare a fișierelor pe un sistem Linux dacă au fost șterse de comanda rm (1). Tehnica descrisă aici, ca regulă, garantează restaurarea fișierelor și nu se bazează pe principiul încercării și erorii. Avantajul său suplimentar este că vă permite să restaurați cu ușurință fișiere binare, precum și fișiere cu conținut necunoscut.

Instrumentul folosit în procesul de recuperare este cunoscut ca debuggerul debugfs (8), care este de obicei folosit pentru a verifica și schimba starea. Deși următoarele exemple sunt scrise pentru Linux, teoretic, ar trebui să fie valabil pentru orice tip de sistem de fișiere UNIX, cu condiția ca acesta conține mijloace cu debugfs funcționalitate (8). Dacă nu există o astfel de unealtă, va trebui să utilizați metoda de restaurare a fișierelor cu conținut cunoscut.

Aici este necesar să spunem că debugfs este un instrument puternic, dar în același timp extrem de periculos. Oferă acces direct la sistemul de fișiere, deci trebuie să aveți grijă în timpul sesiunii.

Utilitarul debugfs (8) oferă o interfață pentru tipul de interfață shell. Vom fi interesați de trei comenzi: lsdel, pisică și dump. Executați debugfs (8) în partiția necesară, după cum urmează.

Din ieșirea din lsdel, puteți afla care dintre descriptorii inode eliminați sunt de interes pentru noi. Coloanele din lista sunt cele mai importante: Proprietar, Dimensiune, Mod și Ora șterse. Dacă din momentul ștergerii fișierelor nu s-au efectuat operații ulterioare cu discul, atunci descriptorii care ne interesează vor apărea la sfârșitul listei. Câmpul Proprietar conține ID-ul de utilizator al proprietarului fișierului a cărui valoare poate fi găsită în al treilea câmp al fișierului / etc / passwd. În exemplul nostru, numele proprietarului este johnf (identificator 1000), iar fișierul conține un singur șir de date importante.

În lista de mai sus, un descriptor (inode) cu numărul 32605 se află la sfârșitul listei și, prin urmare, este primul candidat pentru verificare. Conținutul corespunzător acestui descriptor poate fi derivat după cum urmează:

Deci, fișierul șters este găsit. Comanda dump "resurează" fișierul, scriind-o pe disc:

Opțiunea -p asigură că fișierul rămâne același ca și proprietarul, grupul și drepturile de acces.

Instalarea recuperării este destul de simplă:

Implicit, utilitarul este instalat în sistemul de directoare cu root / usr. Citiți fișierul README care descrie cum se instalează în alt sistem de directoare. În timpul sesiunii, programul de recuperare pune câteva întrebări simple, de exemplu:

  • care deține fișierele?
  • când aceste fișiere au fost șterse?
  • Care este dimensiunea aproximativă a acestor fișiere?

Folosind informațiile obținute, recuperarea începe debugfs, restabilește inodurile corespunzătoare acestui criteriu și le plasează în directorul specificat de utilizator.

Din păcate, spre deosebire de conținutul fișierelor, numele lor nu pot fi restabilite. Fișierele recuperate primesc nume constând din dump-ul prefixului și numărul inodului ulterior. Dacă ștergeți un director ca / ​​etc, se pot pierde sute de fișiere. Pentru a sorta fișierele recuperate, puteți utiliza utilitare simple UNIX, dintre care șiruri (1) și fișier (1) sunt cele mai utile.

Șirul de programe (1) afișează secvența de caractere ASCII, extragându-l din fișierul specificat. Acest utilitar este folosit de obicei pentru a "scoate" textul din fișierele binare care nu pot fi decriptate în alte moduri.

Acesta este modul în care fișierul (1) funcționează pentru directorul cu fișierele restaurate:

Articole similare