Linux Ext2fs Undeletion mini-HOWTO Autor: Aaron Crane aaronc@poboc.com v1.3, 2 lutego 1999 ssaawwiicckkiibb@@eeee..ppww..eedduu..ppll v1.0, 15 kwietnia 1999 Wyobra¼ sobie. Trzy ostatnie trzy dni spêdzi³e¶ bez snu, jedzenia, a nawet bez prysznica. W³a¶nie ukoñczy³e¶ program, który przyniesie Ci ¶wiatow± s³awê i uznanie. Musisz go jeszcze tylko starowaæ i umie¶ciæ na Metalab-ie. No, i skasowaæ wszystkie kopie zapasowe tworzone przez Emacs-a. Piszesz wiêc rm * ~. Ju¿ za pó¼no, zauwa¿y³e¶ dodatkow± spacjê w poleceniu. W³a¶nie skasowa³e¶ ca³e swoje dzie³o ! Nadchodzi pomoc. Dokument ten wyja¶nia jak odzyskiwaæ skasowane pliki w sys temie plików Second Extended File System. Mo¿e uda Ci siê jednak opub likowaæ Twój genialny program. Dokument ten zosta³ napisany w stan dardzie ISO-8859-2. Orygina³ tego dokumentu znajduje siê pod adresem http://pobox.com/~aaronc/ <http://pobox.com/~aaronc/>. ______________________________________________________________________ Spis tre¶ci 1. Wstêp 1.1 Historia publikacji 1.1.1 Zmiany w wersji 1.1 1.1.2 Zmiany w wersji 1.2 1.1.3 Zmiany w wersji 1.3 1.2 Inne lokalizacje tego dokumentu 2. Jak nie skasowaæ plików 3. Jakiego wspó³czynnika odzyskania skasowanych plików mogê siê spodziewaæ ? 4. Jak odzyskaæ skasowane pliki ? 5. Odmontowanie systemu plików 6. Przygotowanie do bezpo¶rednich zmian iwêz³ów 7. Przygotowanie do zapisu danych w innym miejscu 8. Szukanie skasowanych iwêz³ów 9. Uzyskiwanie szczegó³owych informacji o iwêz³ach 10. Odzyskiwanie bloków danych 10.1 Ma³e pliki 10.2 Wiêksze pliki 11. Bezpo¶rednie modyfikacje iwêz³ów 12. Czy bêdzie to kiedy¶ ³atwiejsze? 13. Czy s± jakie¶ programy automatyzuj±ce ten proces? 14. Kolofon 15. Wyrazy uznania i bibliografia 16. Formalno¶ci 17. Od t³umacza ______________________________________________________________________ 11.. WWssttêêpp To mini-Howto stara siê dostarczyæ porad jak odzyskiwaæ skasowane pliki w systemie plików ext2. Zawiera ono równie¿ dyskusjê, jak przede wszystkim, nie dopu¶ciæ do skasowania wa¿nych plików. Chcia³bym, aby by³o ono przydatne dla ludzi, którym zdarzy³ siê ma³y wypadek z rm; jakkolwiek mam równie¿ nadziejê, ¿e przeczytaj± je tak¿e inni. Nigdy nie wiadomo, pewnego dnia, która¶ z zamieszczonych tu informacji z mo¿e uratowaæ Ci ty³ek. Tekst ten zak³ada ogóln± podstawow± wiedzê o systemie plików UNIX-a. Mam jednak nadziejê, ¿e bêdzie dostêpny dla wiêkszo¶ci u¿ytkowników Linux-a. Je¶li jeste¶ ca³kowicie pocz±tkuj±cy, obawiam siê, ¿e odzyskiwanie plików _w_y_m_a_g_a ilo¶ci wiedzy technicznej, której nie posiadasz. Nie bêdziesz móg³ odtwarzaæ skasowanych plików z systemu plików ext2 bez praw odczytu do urz±dzenia, na którym by³y one przechowywane. Ogólnie oznacza to, ¿e musisz byæ administatorem (root). Niektóre dystrybucje (takie jak Debian GNU/Linux) tworz± grupê disk, której cz³onkowie maj± dostêp do takich urz±dzeñ. Bêdziesz potrzebowa³ tak¿e debugfs z pakietu e2fsprogs. Prawdopodobnie jest on ju¿ zainstalowany przez Twoj± dystrybucjê. Dlaczego to napisa³em? Wynik³o to g³ównie z moich w³asnych do¶wiadczeñ ze zwyk³± g³upot± i katastrof± spowodowan± przez komendê rm -r wykonywan± z prawami administratora. Skasowa³em 97 plików typu JPEG, których potrzebowa³em i których prawie na pewno nie mo¿na by³o odzyskaæ z innych ¼rode³. Z pomoc± u¿ytecznych wskazówek (patrz rozdzia³ ``Wyrazy uznania i Bibliografia'') i du¿ej wytrwa³o¶ci, odzyska³em 91 nieuszkodzonych plików. Uda³o mi siê odtworzyæ czê¶ciowo nastêpne piêæ (wystarczaj±co, aby zobaczyæ co by³o na tych obrazkach). Tylko jednego nie by³em w stanie obejrzeæ, ale nawet w tym przypadku, jestem prawie pewien, ze stracone zosta³y nie wiecej ni¿ 1024 bajty (niefortunnie z samego poczatku pliku; uwzglêdniaj±c to, ¿e nic nie wiem o formacie JPG, zrobi³em wszystko co mog³em). W dalszych rozwa¿aniach bêdê chcia³ przedstawiæ jakiej wielko¶ci wspó³czynnika odtworzenia skasowanych plików mo¿esz siê spodziewaæ. 11..11.. HHiissttoorriiaa ppuubblliikkaaccjjii Istniej± nastêpuj±ce upublicznione wersje tego dokumentu (i daty ich publikacji): · v1.0, 18 stycznia 1997 · v1.1, 23 lipca 1997 (patrz rozdzia³ ``Zmiany w wersji 1.1'') · v1.2, 4 sierpnia 1997 (patrz rozdzia³ ``Zmiany w wersji 1.2'') · v1.3, 2 lutego 1999 (patrz rozdzia³ ``Zmiany w wersji 1.3'') 11..11..11.. ZZmmiiaannyy ww wweerrssjjii 11..11 Jakie zmiany zosta³y zrobione w tej wersji? Przede wszystkim, zosta³ poprawiony b³±d w przyk³adowym odzyskiwaniu pliku. Dziêkujê wszystkim, którzy napisali, ¿eby wskazaæ mi ten b³±d. Mam nadziejê, ¿e nauczy³em siê byæ bardziej uwa¿nym przy interakcyjnej pracy z programem. Po drugie, rozwa¿ania o systemie plików w UNIX-ie zosta³y przerobione tak, aby uczyniæ je bardziej zrozumia³ymi. Od pocz±tku nie by³em z tego zadowolony i dosta³em komentarze, ¿e nie by³o to napisane zbyt jasno. Po trzecie, uuencode'owany gzip-owany tar-owany pakiet fsgrab ze ¶rodka pliku zosta³ usuniêty. Teraz program dostêpny jest na mojej stronie domowej <http://pobox.com/~aaronc/tech/fsgrab-1.2.tar.gz> i na Metalab-ie <http://metalab.unc.edu/pub/Linux/utils/file/> (i kopiach, w Polsce - Sunsite <http://sunsite.icm.edu.pl/pub/Linux/sunsite/utils/file/> ). Po czwarte, dokument ten zosta³ przet³umaczony na jêzyk sk³adu SGML u¿ywany w Linux Documention Project. Ten jêzyk mo¿e byæ ³atwo konwertowany do innych jêzyków sk³adu (np. HTML-a i LaTeX-a) w celu dogodnego sposobu wy¶wietlania i drukowania. Jedn± z korzy¶ci z tego jest to, ¿e ³adny wygl±d wersji papierowej jest ³atwiejszy do osi±gniecia. Inn± jest to, ¿e dokument zawiera wewnêtrzne i zewnêtrzne odno¶niki, gdy ogl±dany jest przez WWW. 11..11..22.. TToo wwyyddaanniiee zzaawwiieerraa wwyy³³±±cczznniiee ppoopprraawwkkii.. GG³³óówwnniiee uuwwzzggllêêddnnii³³eemm zzmmiiaannyy ssuuggeerroowwaannee pprrzzeezz cczzyytteellnniikkóóww,, ttoo oonnee ss±± ww³³aa¶¶nniiee nnaajjwwaa¿¿nniieejjsszzee.. PPiieerrwwsszzaa zzmmiiaannaa zzoossttaa³³aa zzaassuuggeerroowwaannaa pprrzzeezz EEggiillaa KKvvaalleebbeerrggaaeeggiill@@kkvvaallee bbeerrgg..nnoo,, kkttóórryy wwsskkaazzaa³³ nnaa ppoolleecceenniiee dduummpp ww ddeebbuuggffss .. JJeesszzcczzee rraazz,, ddzziiêêkkii EEggiill.. DDrruuggaa zzmmiiaannaa ppoolleeggaa³³aa nnaa zzaazznnaacczzeenniiuu,, ¿¿ee uu¿¿yycciiee cchhaattttrr ppoommaaggaa uunniikknn±±ææ sskkaassoowwaanniiaa wwaa¿¿nnyycchh pplliikkóóww.. DDzziieekkuujjêê HHeerrmmaannoowwii SSuuiijjss HH..PP..MM..SSuuiijjss@@kkuubb..nnll zzaa zzaauuwwaa¿¿eenniiee tteeggoo.. SSttrreesszzcczzeenniiee zzoossttaa³³oo uuaakkttuuaall nniioonnee.. ZZoossttaa³³yy ddooddaannee UURRLL--ee ddoo oorrggaanniizzaaccjjii ii oopprrooggrraammoowwaanniiaa.. WWpprroowwaadd zzoonnoo wwiieellee iinnnnyycchh mmnniieejjsszzyycchh zzmmiiaann ((lliitteerróówwkkii ii ttyymm ppooddoobbnnee)).. ZZmmiiaannyy ww wweerrssjjii 11..22 11..11..33.. ZZmmiiaannyy ww wweerrssjjii 11..33 Pomimo, ¿e jest to pierwsza wersja od 17 miesiêcy, jest tutaj ma³o nowego. W wersji tej poprawione s± drobniejsze b³êdy (literówki, puste URL-e, tego typu rzeczy -- szczególnie nie zwi±zane z Open Group), uaktualniono kilka czê¶ci tekstu, które uleg³y przeterminowaniu, takich jak partie dotycz±ce wersji j±dra i lde. No i zmieni³em `Sunsite' na `Metalab'. To wydanie jest przewidywane jako ostatnie przed wersj± 2.0, która, mam nadziejê, bêdzie pe³nym Howto. Pracujê nad istotnymi zmianami, które spowoduj± zwiêkszenie g³ównego numeru wersji. 11..22.. IInnnnee llookkaalliizzaaccjjee tteeggoo ddookkuummeennttuu Najnowsza publiczna wersja tego dokumentu powinna byæ zawsze dostêpna na Linux Documentation Project site <http://metalab.unc.edu/LDP/> (i kopiach, w Polsce - Sunsite <http://sunsite.icm.edu.pl/pub/Linux/sunsite/docs/LDP/> ). Najbardziej aktualna wersja jest równie¿ przechowywana na mojej stronie domowej <http://pobox.com/~aaronc/> w kilku formatach: · ¼ród³o SGML <http://pobox.com/~aaronc/tech/e2-undel/howto.sgml>. To jest format ¼ród³owy, tak jak to napisa³em u¿ywaj±c pakietu SGML Tools. · HTML <http://pobox.com/~aaronc/tech/e2-undel/html/>. To jest HTML, automatycznie wygenerowany ze ¼ród³a SGML. · czysty tekst <http://pobox.com/~aaronc/tech/e2-undel/howto.txt>. To jest czysty tekst, który równie¿ zosta³ automatycznie wygenerowany ze ¼ród³a SGML. 22.. JJaakk nniiee sskkaassoowwaaææ pplliikkóóww Trzeba pamiêtaæ, ¿e Linux ró¿ni siê od MS-DOS je¶li chodzi o kasowanie plików. W MS-DOS (jak i w Windows 95), dosyæ ³atwo jest odzyskaæ skasowane pliki - `system operacyjny' (u¿ywam tego terminu dosyæ swobodnie) dostarcza nawet narzêdzi, które automatyzuj± ten proces. W Linux-ie jest inaczej. Regu³a numer jeden (podstawowa wskazówka) brzmi: RRÓÓBB KKOOPPIIEE ZZAAPPAASSOOWWEE bez wzglêdu na wszystko. Pomy¶l o wszystkich swoich danych. Byæ mo¿e, jak ja, trzymasz kilkuletni zbiór listów, kontaktów, programów, dokumentów na swoim komputerze. Pomy¶l co by siê sta³o z Twoim ¿yciem, gdyby Twój dysk uleg³ katastrofalnemu uszkodzeniu, lub gdyby -- o wielkie nieba ! -- z³o¶liwy craker wyczy¶ci³ Twój dysk. To nie jest niemo¿liwe; korespondowa³em z wieloma lud¼mi w takiej sytuacji. My¶lê, ¿e teraz wszyscy rozs±dnie my¶l±cy u¿ytkownicy Linux-a wyjd±, kupi± urz±dzenie do robienia kopii zapasowych, opracuj± kalendarz archiwizacji i _b_ê_d_± _s_i_ê _j_e_g_o _t_r_z_y_m_a_æ. Ja u¿ywam wolnego dysku twardego w innym komputerze i okresowo kopiujê tam przez sieæ ethernet mój katalog domowy. Wiêcej informacji o planowaniu kalendarza archiwizacji znajdziesz u Frischa (1995) (patrz rozdzia³ ``Bibliografia i Wyrazy Uznania''). Co wtedy, gdy nie ma kopii zapasowej? (lub nawet przy istnieniu kopii zapasowej: ¿adne ¶rodki bezpieczeñstwa nie s± z³ym rozwi±zaniem w miejscu gdzie przechowywane s± wa¿ne dane). Spróbuj ustawiæ prawa dostêpu do wa¿nych plików na 440 (lub mniej): odebranie sobie samemu praw zapisu oznacza, ¿e rm bêdzie wymaga³ potwierdzenia przed skasowaniem. (Zauwa¿y³em, ¿e je¶li rekursywnie kasujê katalog rm -r, pro¶ba potwierdzenia pojawi siê przy pierwszym i drugim pliku, potem program zachowuje siê jak rm -rf). Niez³± sztuczk± dla wybranych plików jest utworzenie w ukrytym katalogu twardych dowi±zañ do nich. Kiedy¶ us³ysza³em historiê o administatorze, który przez pomy³kê skasowa³ /etc/passwd (nieomal w ten sposób niszcz±c system). Jednym z rozwi±zañ takiego k³opotu jest zrobienie czego¶ nastêpuj±cego (jako root): # mkdir /.backup # ln /etc/passwd /.backup Teraz skasowanie pliku wymaga wiêkszego wysi³ku: gdy napiszesz tylko # rm /etc/passwd wtedy # ln /.backup/passwd /etc odtworzy Twój plik. Oczywi¶cie, to rozwi±zanie nie pomo¿e je¶li nadpiszesz plik, wiêc nie zapomninaj o kopii zapasowej. W systemie plików ext2 jest mo¿liwe u¿ycie atrybutów ext2, aby ochraniaæ pliki. Atrybuty te mog± byæ zmieniane za pomoc± komendy chattr. Istnieje atrybut `append-only`: plik z tym atrybutem mo¿e byæ tylko powiêkszany, nie mo¿e byæ skasowany i istniej±ca zawarto¶æ nie mo¿e byæ nadpisana. Je¶li atrybut ten ma katalog, ka¿dy plik czy katalog w nim le¿±cy mo¿e byæ normalnie modyfikowany, ale ¿aden z plików nie mo¿e zostaæ skasowany. Atrybut `append-only' ustawia siê poleceniem $ chattr +a FILE... Istnieje równie¿ atrybut `immutable', który mo¿e byæ zapalany lub gaszony tylko przez administratora. Pliku lub katalogu z tym atrybutem nie mo¿na zmienieniæ, skasowaæ, zmieniæ jego nazwy, czy utworzyæ do niego twardego dowi±zania. Mo¿na go ustawiæ w nastêpuj±cy sposób: # chattr +i FILE... Ext2fs dostarcza równie¿ atrybutu `undeletable' (+u in chattr). Za³o¿enie by³o takie, ¿e plik z tym atrybutem po skasowaniu zostaje przeniesiony w bezpieczne miejsce `safe location', aby rzeczywiste skasowanie przesun±æ w czasie. Niestety funkcja ta nie jest jeszcze zaimplementowana w j±drze. My¶la³em, ¿e bêdzie wiêksze zainteresowanie ni± i stanie siê to szybko, ale nie jest ona dostêpna (wed³ug mojej wiedzy) w ¿adnej aktualnej wersji j±dra. Niektórzy radz±, aby zrobiæ alias lub funkcjê w pow³oce rm, która wykonywa³aby rm -i (bêdziesz musia³ potwierdziæ skasowanie _k_a_¿_d_e_g_o pliku). Dystrubucja Red Hat <http://www.redhat.com/> robi to domy¶lnie dla wszystkich u¿ytkowników, w tym i dla root-a. Ja osobi¶cie nie lubiê oprogramowania, które nie mo¿e dzia³aæ bez mojej pomocy, dlatego nie u¿ywam tego sposobu. Wcze¶niej, czy pó¼niej mo¿e pojawiæ siê kolejny problem: kiedy bêdziesz pracowa³ w trybie singe- user, lub bêdziesz u¿ywa³ innej pow³oki lub nawet innej maszyny, gdzie Twoja funkcja rm nie istnieje. Je¶li bêdziesz spodziewa³ siê, ¿e ka¿de skasowanie wymaga potwierdzenia, dosyæ ³atwo jest nie przewidzieæ tego, ¿e kaza³e¶ skasowaæ zbyt wiele plików. Równie¿ skrypty i programy, które podmieniaj± rm mog± byæ bardzo niebezpieczne. Trochê lepszym rozwi±zaniem jest u¿ycie pakietu, który umo¿liwia `odtwarzalne' kasowanie poprzez specjaln± komendê zastêpuj±ca rm. Szczegó³y znajdziesz u Peeka (1993) (patrz rozdzia³ ``Bibliografia i Wyrazy Uznania''). Jednak w ten sposób przyzwyczajamy u¿ytkownika do pewniej nonszalancji przy kasowaniu plików. Nie jest to najlepsze, bowiem system typu Unix wymaga jednak uwa¿nego dzia³ania. 33.. JJaakkiieeggoo wwssppóó³³cczzyynnnniikkaa ooddzzyysskkaanniiaa sskkaassoowwaannyycchh pplliikkóóww mmooggêê ssiiêê ssppooddzziieewwaaææ ?? To zale¿y. Problem wynika z tego, ¿e w systemie operacyjnym wysokiej jako¶ci, wielozadaniowym, wielou¿ytkownikowym, takim jak Linux, nie mo¿esz przewidzieæ kiedy kto¶ zechce zapisaæ co¶ na dysk. Po chwili, w której kaza³e¶ systemowi skasowaæ jaki¶ plik, bloki przez niego zajête mog± zostaæ u¿yte, gdy system bêdzie chcia³ zapisaæ co¶ nowego. (Jest to jeden przyk³ad ogólnej zasady systemów typu Unix: j±dro i zwi±zane z nim programy zak³adaj±, ¿e u¿ytkownicy nie s± idiotami). Ogólnie rzecz bior±c, im bardziej obci±¿ona jest Twoja maszyna, tym mniej prawdopodobne jest odzyskanie plików. Znaczenie mo¿e mieæ równie¿ fragmentacja dysku. Je¶li partycja, na której by³ skasowany plik jest bardzo pofragmentowana, masz ma³e szanse na odczytanie ca³ej jego tre¶ci. Je¶li Twój komputer, tak jak mój, realnie jest maszyn± jednou¿ytkownikow± i nie robi³e¶ niczego co intensywnie korzysta³o z dysku w tragicznej chwili skasowania pliku, mo¿esz siê spodziewaæ wspó³czynnika odzysku zbli¿onego do tego wymienionego ni¿ej. Ja odzyska³em prawie 94% plików (by³y to pliki binarne) w stanie nieuszkodzonym. Je¿eli otrzymasz 80% lub wiêcej, my¶lê, ¿e bêdziesz z siebie zadowolony. 44.. JJaakk ooddzzyysskkaaææ sskkaassoowwaannee pplliikkii ?? Operacja ta polega g³ównie na znalezieniu danych na urz±dzeniu partycji i uczynieniu ich ponownie widocznymi dla systemu operacyjnego. S± dwa sposoby, ¿eby to zrobiæ: pierwszy polega na takiej zmianie systemu plików, ¿eby usun±æ znacznik `deleted' ze skasowanych iwêz³ów z nadziej±, ¿e pliki nagle pojawi± siê na swoim miejscu. Inn± metod±, bezpieczniejsz±, ale wolniejsz± jest znalezienie po³o¿enia interesuj±cych danych na partycji i zapisaniu ich jako nowy plik w innym systemie plików. Przed odtwarzeniem danych musisz zrobiæ kilka rzeczy; patrz rozdzia³y ``Odmontowanie systemu plików'', ``Przygotowanie do bezpo¶rednich zmian w iwêz³ach'' i ``Przygotowanie do zapisania danych w innym miejscu''. Informacjê jak odzyskiwaæ pliki znajdziesz w rozdzia³ach ``Szukanie skasowanych iwêz³ów'', ``Uzyskiwanie szczegó³owych informacji o iwêz³ach'', ``Odzyskiwanie bloków danych'' i ``Bezpo¶rednie modyfikacje iwêz³ów''. 55.. OOddmmoonnttoowwaanniiee ssyysstteemmuu pplliikkóóww Niezale¿nie od metody jak± wybra³e¶, pierwszym krokiem jest odmontowanie systemu plików zawieraj±cego skasowane pliki. Zdecydowanie nie polecam ¿adnych dzia³añ na zamontowanym systemie plików. Krok ten powinien byæ wykonany najszybciej jak to bêdzie mo¿liwe od momentu, gdy zauwa¿y³e¶, ¿e pomy³kowo skasowa³e¶ pliki. Im szybciej odmontujesz system plików, tym wiêksza bêdzie szansa, ¿e Twoje dane nie zostan± nadpisane (zamazane). Najprostsz± metod±, aby to zrobiæ jest: zak³adaj±c, ¿e skasowane pliki by³y systemie plików /usr, # umount /usr Je¶li chcesz mo¿esz równie¿ utrzymaæ widoczno¶æ katalogu /usr. Zamontuj go w trybie tylko-do-odczytu: # mount -o ro,remount /usr W przypadku, gdy skasowane pliki by³y na g³ównej partycji musisz dodaæ opcjê -n, aby zabroniæ programowi mount na próby zapisu do /etc/mtab: # mount -n -o ro,remount / Poza tym wszystkim, mo¿liwe jest równie¿, ¿e jaki¶ inny proces u¿ywa interesuj±cego nas systemu plików (spowoduje to b³±d typu `Resource busy' przy próbie odmontowania). fuser jest programem, który wy¶le sygna³ do ka¿dego procesu u¿ywaj±cego wskazanego pliku lub punktu montowania. Spróbuj tego dla partycji /usr: # fuser -v -m /usr W ten sposób uzyskasz listê przeszkadzaj±cych Ci procesów. Zak³adaj±c, ¿e ¿aden z nich nie jest niezbêdny, mo¿esz napisaæ # fuser -k -v -m /usr aby wys³aæ sygna³ SIGKILL do ka¿dego z nich ( gwarantuje to ich zabicie), albo # fuser -k -TERM -v -m /usr aby przekazaæ ka¿demu sygna³ SIGTERM (spowoduje to normalne zakoñczenie pracy procesów). 66.. PPrrzzyyggoottoowwaanniiee ddoo bbeezzppoo¶¶rreeddnniicchh zzmmiiaann iiwwêêzz³³óóww Moja rada? Nie u¿ywaj tej metody. Nie uwa¿am, ¿eby dobrym pomys³em by³a zabawa na niskim poziomie w systemie plików. Metoda ta stwarza równie¿ problemy je¶li chcesz odtworzyæ pliki wiêksze ni¿ 12 bloków. W celu odzyskania du¿ych plików, tak czy owak, bêdziesz musia³ u¿yæ innej metody. (Chocia¿ patrz rozdzia³ ``Czy bêdzie to kiedy¶ ³atwiejsze?'' w celu dodatkowych informacji.) Je¿eli jednak chcesz koniecznie u¿yæ tego sposobu, lepiej skopiuj bezpo¶rednio obraz partycji na inn± partycjê, a pó¼niej zamontuj j± u¿ywaj±c pêtli zwrotnej (loopback): # cp /dev/hda5 /root/working # mount -t ext2 -o loop /root/working /mnt (Niektóre wersje mount nie potrafi± tego zrobiæ. Je¶li Twój mount nie dzia³a poprawnie, zalecam u¿ycie najnowszej wersji, conajmniej 2.7. Du¿o starsze wersje maj± problemy z utrzymaniem bezpieczeñstwa danych.) U¿ywaj±c pêtli zwrotnej, nawet je¶li ca³kowicie zniszczysz system plików, mo¿esz ponownie skopiowaæ partycjê i zacz±æ próby od nowa. 77.. PPrrzzyyggoottoowwaanniiee ddoo zzaappiissuu ddaannyycchh ww iinnnnyymm mmiieejjssccuu Je¿eli wybierzesz tê drogê dzia³ania, musisz znale¼æ partycjê ratunkow± -- miejsce, gdzie zapiszesz nowe kopie odzyskanych plików. Na ca³e szczê¶cie, twój system zawiera kilka partycji: prawdopodobnie partycjê g³ówn±, /usr i /home. Wybierz jedn± z nich i utwórz na niej nowy katalog. Je¶li masz tylko partycjê g³ówn± i wszystko przechowujesz na niej, rozwi±zanie troszkê siê skomplikuje. Mo¿e masz partycje MS-DOS lub Windows, której bedziesz móg³ u¿yæ ? Albo masz sterownik do ramdisk-u w swoim j±drze, albo w module ? W celu u¿ycia ramdisk-u (zak³adaj±c, ¿e j±dro jest nowsze od 1.3.48), napisz: # dd if=/dev/zero of=/dev/ram0 bs=1k count=2048 # mke2fs -v -m 0 /dev/ram0 2048 # mount -t ext2 /dev/ram0 /mnt W ten sposób stworzy³e¶ 2MB wolumen ramdisk-u i zamontowa³e¶ do w /mnt. Krótkie ostrze¿enie: je¿eli u¿ywasz kerneld (lub zastêpuj±cego go kmod w j±drach 2.2.x i pó¼nych 2.1.x) w celu automatycznego ³adowania i od³adowywania modu³ów, nie odmontowuj ramdisk-u dopóki nie skopiujesz wszystkich plików na bardziej trwa³y no¶nik. W chwili, gdy go odmontujesz, kerneld zak³ada, ¿e mo¿e od³adowaæ modu³ (zwykle jednak czeka pewien okres). Gdy to ju¿ siê stanie, pamiêæ zostanie u¿yta przez inne czê¶ci j±dra i stracisz wszystkie godziny spêdzone na odzyskiwaniu danych. Je¿eli masz napêd Zip, Jaz, LS-120 lub co¶ podobnego, mo¿e on spe³niaæ z powodzeniem rolê partycji ratunkowej. W pozosta³ych przypadkach, u¿yj po prostu napêdu stacji dyskietek. Bêdziesz jeszcze potrzebowa³ programu, który potrafi czytaæ dane ze ¶rodka partycji. W³a¶ciwie mo¿e to zrobiæ dd, ale aby przeczytaæ dane le¿±ce od 600 MB do 800 MB, dd musi przeczytaæ i zignorowaæ pierwsze 600 MB. Zajmuje to dosyæ du¿o czasu, nawet na szybkich dyskach. Moim sposobem na obej¶cie tego problemu by³o napisanie programu, który przeskakuje w ¶rodek partycji. Nazywa siê on fsgrab; pakiet ze ¼ród³em mo¿esz znale¼æ na mojej stronie domowej <http://pobox.com/~aaronc/tech/fsgrab-1.2.tar.gz> lub na Metalab-ie <http://metalab.unc.edu/pub/Linux/utils/file/> (i kopiach, w Polsce - Sunsite <http://sunsite.icm.edu.pl/pub/Linux/sunsite/utils/file/> ). Je¶li bêdziesz chcia³ stosowaæ tê metodê, w dalszej czê¶ci tego mini- JTZ zak³adam, ¿e masz fsgrab. Nie potrzebujesz fsgrab-a, je¿eli ¿aden z plików, które starasz siê odzyskaæ, nie zajmuje wiêcej ni¿ 12 bloków (przewa¿nie blok ma rozmiar jednego kilobajta). Je¿eli musisz u¿yæ fsgrab-a, ale nie chce Ci siê go ¶ci±gaæ i kompilowaæ, jest te¿ prosta droga na przet³umaczenie polecenia dla fsgrab na polecenie dla dd. Maj±c fsgrab -c _c_o_u_n_t -s _s_k_i_p _d_e_v_i_c_e mo¿esz u¿yæ komendy dd (przewa¿nie jest to du¿o wolniejsze) dd bs=1k if=_d_e_v_i_c_e count=_c_o_u_n_t skip=_s_k_i_p Muszê Ciê ostrzec, ¿e chocia¿ dla mnie fsgrab dzia³a doskonale, nie mogê braæ odpowiedzialno¶ci za jego funkcjonowanie. Pisa³em go dosy¶ szybko i niestarannie, po prostu, aby dzia³a³ poprawnie. Wiêcej szczegó³ów o gwarancji znajdziesz w rozdziale `No Warranty' w pliku COPYING do³aczonym do pakietu (the GNU General Public Licence). 88.. SSzzuukkaanniiee sskkaassoowwaannyycchh iiwwêêzz³³óóww Nastêpnym krokiem jest odnalezienie w systemie plików tych iwêz³ów, które zosta³y ostanio uwolnione. Do tego zadania u¿yjemy programu debugfs. Uruchom debugfs z nazw± urz±dzenia, na którym przechowywany jest system plików: # debugfs /dev/hda5 Je¿eli chcesz bezpo¶rednio wprowadzaæ zmiany do iwêz³ów, dodaj opcjê -w, aby umo¿liwiæ zapisywanie do systemu plików: # debugfs -w /dev/hda5 lsdel jest poleceniem debugfs, które wyszukuje skasowane iwêz³y. Po zachêcie programu, napisz wiêc: debugfs: lsdel Po chwili ¶wiergotania dysku, d³uga lista zostanie przekierowana do Twojego ulubionego ³amacza na strony (ang. pager) (warto¶æ zmiennej $PAGER). Powinienne¶ zachowaæ gdzie¶ kopiê tej listy. Je¿eli u¿ywasz less, mo¿esz po prostu napisaæ -o i nazwê pliku wyj¶ciowego. W innym razie, bêdziesz musia³ przes³aæ wyniki do pliku w inny sposób. Spróbuj czego¶ takiego: debugfs: quit # echo lsdel | debugfs /dev/hda5 > lsdel.out Teraz, tylko na podstawie czasu skasowania, rozmiaru, praw w³asno¶ci i w³a¶ciciela musisz okre¶liæ, które iwêz³y nale¿a³y do skasowanych plików. Bêdzie to prawdopodobnie proste zadanie je¶li wypadek przydarzy³ siê 5 minut temu, je¶li nie, przeszukaj listê bardzo uwa¿nie. Polecam wydrukowanie sobie listy iwêz³ów, które chcesz odzyskaæ. U³atwi Ci to dalsz± pracê. 99.. UUzzyysskkiiwwaanniiee sszzcczzeeggóó³³oowwyycchh iinnffoorrmmaaccjjii oo iiwwêêzz³³aacchh debugfs dysponuje poleceniem stat, które wy¶wietla szczegó³owe informacje o iwê¼le. Wykonaj tê komendê dla wszystkich iwêz³ów, które chcesz odzyskaæ. Na przyk³ad, je¿eli interesuje Ciê iwêze³ o numerze 148003, napisz tak: debugfs: stat <148003> Inode: 148003 Type: regular Mode: 0644 Flags: 0x0 Version: 1 User: 503 Group: 100 Size: 6065 File ACL: 0 Directory ACL: 0 Links: 0 Blockcount: 12 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996 atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996 mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996 dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996 BLOCKS: 594810 594811 594814 594815 594816 594817 TOTAL: 6 Gdy chcesz odzyskaæ wiele plików, dobrze bêdzie jak zautomatyzujesz ten proces. Przy za³o¿eniu, ¿e Twoja lsdel lista interesuj±cych iwêz³ów znajduje siê w pliku lsdel.out, napisz co¶ takiego: # cut -c1-6 lsdel.out | grep "[0-9]" | tr -d " " > inodes Nowy plik inodes zawiera tylko numery iwêz³ówm, które chcesz odzyskaæ, po jednym w jednej linii. Zapisali¶my to, bowiem pó¼niej bardzo nam siê przyda. Potem piszesz po prostu: # sed 's/^.*$/stat <\0>/' inodes | debugfs /dev/hda5 > stats i plik stats zawiera wyniki wszystkich poleceñ stat. 1100.. OOddzzyysskkiiwwaanniiee bbllookkóóww ddaannyycchh Ta czê¶æ jest albo bardzo ³atwa, albo trudna, w zale¿no¶ci od tego, czy plik który chcesz odzyskaæ zajmowa³ wiêcej ni¿ 12 bloków. 1100..11.. MMaa³³ee pplliikkii Je¿eli plik ma mniej ni¿ 12 bloków, numery wszystkich bloków, które on zajmuje zapisane s± w jednym iwê¼le. Mo¿esz odczytaæ je po wykonaniu polecenie stat dla tego iwêz³a. Ponadto, w debugfs jest polecenie, które automatycznie odzyskuje taki plik. We¼my ten sam przyk³ad co poprzednio: debugfs: stat <148003> Inode: 148003 Type: regular Mode: 0644 Flags: 0x0 Version: 1 User: 503 Group: 100 Size: 6065 File ACL: 0 Directory ACL: 0 Links: 0 Blockcount: 12 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996 atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996 mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996 dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996 BLOCKS: 594810 594811 594814 594815 594816 594817 TOTAL: 6 Plik ten zajmuje sze¶æ bloków. Poniewa¿ jest to mniej ni¿ 12, mo¿emy u¿yæ debugfs, aby zapisaæ plik w nowym miejscu, na przyk³ad /mnt/recovered.000: debugfs: dump <148003> /mnt/recovered.000 Oczywi¶cie mo¿na to zrobiæ równie¿, pos³uguj±c siê fsgrab. Poka¿ê jak wygl±da takie przyk³adowe wywo³anie: # fsgrab -c 2 -s 594810 /dev/hda5 > /mnt/recovered.000 # fsgrab -c 4 -s 594814 /dev/hda5 >> /mnt/recovered.000 Zarówno przy korzystaniu z debugfs jak i fsgrab, na koñcu pliku /mnt/recovered.000 pozostan± ¶mieci. Nie ma to wiêkszego znaczenia. £atwo mo¿na siê ich pozbyæ. Najprostsz± metod± jest odczytanie pola Size w iwê¼le i wpisanie tej warto¶ci za opcj± bs komendy dd: # dd count=1 if=/mnt/recovered.000 of=/mnt/resized.000 bs=6065 Mo¿e siê okazaæ, ¿e jeden lub wiêcej z bloków zosta³o straconych, bowiem zosta³y ju¿ nadpisane. Je¿eli tak bêdzie, po prostu nie mia³e¶ szczê¶cia: bloki te odesz³y ju¿ na zawsze. (Wybra¼ sobie, ¿e odmontowa³e¶ je wcze¶niej!) 1100..22.. WWiiêêkksszzee pplliikkii Problem pojawia siê, gdy plik zajmuje wiêcej ni¿ 12 bloków danych. Przypadek ten wymaga pewnej wiedzy o tym jak zbudowany jest system plików UNIX-a. Dane pliku przechowywane s± w jednostkach zwanych `blokami'. Bloki te s± numerowane sekwencyjnie. Ka¿dy plik ma równie¿ `iwêze³', w którym przechowywane s± informacje typu: w³a¶ciciel, prawa dostêpu i typ. Podobnie jak bloki, iwêz³y s± numerowane sekwencyjnie, chocia¿ maj± one ró¿ne numeracje. Pozycja w katalogu odpowiadaj±ca plikowi sk³ada siê z jego nazwy i numeru iwêz³a. Jednak na postawie tych informacji j±dro nie jest jeszcze w stanie odnale¼æ na partycji danych odpowiadaj±cych jednej z pozycji w katalogu. ¯eby to umo¿liwiæ, iwêze³ przechowuje po³o¿enia bloków danych zajmowanych przez plik. Zorganizowane jest to w nastêpuj±cy sposób: · Numery pierwszych 12 bloków danych przechowywane s± bezpo¶rednio w iwê¼le; czasami nazywa siê je _b_l_o_k_a_m_i _b_e_z_p_o_¶_r_e_d_n_i_m_i. · Iwêze³ zawiera numer _p_o_¶_r_e_d_n_i_e_g_o _b_l_o_k_u. Blok po¶redni zawiera numery nastêpnych 256 bloków z danymi. · Iwêze³ zawiera numer _p_o_d_w_ó_j_n_i_e _p_o_¶_r_e_d_n_i_e_g_o _b_l_o_k_u. Blok podwójnie po¶redni zawiera numery dodatkowych 256 bloków po¶rednich. · Iwêze³ zawiera numer _p_o_t_r_ó_j_n_i_e _p_o_¶_r_e_d_n_i_e_g_o _b_l_o_k_u. Blok potrójnie po¶redni zawiera numery dodatkowych 256 bloków podwójnie po¶rednich. Przeczytaj to jeszcze raz: wiem, ¿e to jest skomplikowane, ale bardzo wa¿ne. Niestety wszystkie implementacje j±dra, a¿ do wersji 2.0.36 podczas kasowania pliku zeruj± bloki po¶rednie (podwójnie po¶rednie, itd.). Je¶li Twój plik jest wiêkszy ni¿ 12 bloków, nie masz gawarancji, ¿e bêdzie mo¿liwe odnalezienie numerów wszystkich jego bloków, nie mówi±c ju¿ nic o ich zawarto¶ci. Jedyn± metod± jak± uda³o mi siê znale¼æ, jest oparcie siê na za³o¿eniu, ¿e plik nie by³ pofragmentowany. Je¿eli by³, masz powa¿ny problem. Zak³adaj±c, ¿e plik nie by³ pofragmentowany, istnieje kilka sekcji bloków danych, w zale¿no¶ci od tego ile bloków danych zajmuje plik: 00 ddoo 1122 Numery bloków przechowywane s± w iwê¼le, jak to by³o opisane wcze¶niej. 1133 ttoo 226688 Po blokach bezpo¶rednich, odlicz jeden na blok po¶redni, dalej znajduje siê 256 bloków danych. 226699 ddoo 6655880044 Tak jak poprzednio jest: 12 bezpo¶rednich bloków, (nieprzydatny) blok po¶redni i 256 bloków. Po tym wszystkim nastêpuje (nieprzydatny) podwójnie po¶redni blok oraz 256 powtórzeñ jednego (nieprzydatnego) bloku po¶redniego i 256 bloków danych. 6655880055 lluubb wwiiêêcceejj Po³o¿enie piewszych 65804 bloków jak wy¿ej. Potem potrójnie po¶redni blok i 256 powtórzeñ `sekwecji podwójnie po¶redniej'. Ka¿da podwójnie po¶rednia sekwencja zawiera (nieprzydatny) podwójnie po¶redni blok, po którym nastêpuje 256 powtórzeñ jednego (nieprzydatnego) bloku po¶redniego i 256 bloków danych. Oczywi¶cie, nawet je¶li numery bloków, które przyjêli¶my, s± poprawne, nie ma ¿adnych gwarancji, ¿e dane s± w nich s± nienaruszone. Dodatkowo, im d³u¿szy by³ plik, tym mniejsze szanse, ¿e system operacyjny zapisa³ go bez ¿adnej fragmentacji (za wyj±tkiem wyj±tkowych sytuacji). Za³o¿y³em, ¿e rozmiar Twoich bloków wynosi 1024 bajty, tyle ile warto¶æ standardowa. Je¶li Twój blok jest wiêkszy, niektóre z liczb podanych wy¿ej zmieni± siê. Sprecyzujmy: dopóki numer ka¿dego bloku ma d³ugo¶æ 4 bajtów, rozmiarbloku/4 jest liczb± numerów bloków, które mog± byæ przechowane w ka¿dym bloku po¶rednim. Ka¿de wyst±pienie liczby 256 we wcze¶niejszym opisie, zast±p na rozmiarbloku/4. Zmianie ulegn± równie¿ ograniczenia na ilo¶æ wymaganych bloków. Popatrz na przyk³adowe odzyskiwanie du¿ego pliku. debugfs: stat <1387> Inode: 148004 Type: regular Mode: 0644 Flags: 0x0 Version: 1 User: 503 Group: 100 Size: 1851347 File ACL: 0 Directory ACL: 0 Links: 0 Blockcount: 3616 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996 atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996 mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996 dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996 BLOCKS: 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8583 TOTAL: 14 Wydaje siê, ¿e mamy pewne szanse, ¿e plik nie jest pofragmentowany. Pewne jest tylko, ¿e pierwsze 12 bloków, których numery s± zawarte w iwê¼le, jest `po kolei'. Mo¿emy wiêc odtworzyæ te bloki: # fsgrab -c 12 -s 8314 /dev/hda5 > /mnt/recovered.001 Nastêpny blok, wymieniony w iwê¼le, 8326, jest blokiem po¶rednim, który ignorujemy. Mamy jednak nadziejê, ¿e nastepne 256 bloków jest naszymi blokami danych (numery 8327 do 8582). # fsgrab -c 256 -s 8327 /dev/hda5 >> /mnt/recovered.001 Ostatnim blokiem wymienionym w iwê¼le jest 8583. Nadal zak³adamy, ¿e istnieje ci±g³o¶æ w blokach. Jest to jednak uzasadnione bowiem: ostatnim blokiem danych by³ blok o numerze 8582 (8327 + 255). Blok 8583 jest podwójnie po¶redni i mo¿e byæ zignorowany. Teraz mo¿e nast±piæ do 256 powtórzeñ bloku po¶redniego (który mo¿na pomin±æ) i 256 bloków danych. Trochê arytmetyki i ju¿ mo¿na pisaæ kolejne polecenie. Zauwa¿, ¿e pominêli¶my podwójnie po¶redni blok 8583 oraz po¶redni blok 8584 i rozpoczêli¶my czytaæ dane od bloku numer 8585. # fsgrab -c 256 -s 8585 /dev/hda5 >> /mnt/recovered.001 # fsgrab -c 256 -s 8842 /dev/hda5 >> /mnt/recovered.001 # fsgrab -c 256 -s 9099 /dev/hda5 >> /mnt/recovered.001 # fsgrab -c 256 -s 9356 /dev/hda5 >> /mnt/recovered.001 # fsgrab -c 256 -s 9613 /dev/hda5 >> /mnt/recovered.001 # fsgrab -c 256 -s 9870 /dev/hda5 >> /mnt/recovered.001 Dodajmy to wszystko, zapisali¶my do tej pory 12 + (7 * 256) bloków, co daje 1804. Wyniki polecenia `stat' dla iwêz³a da³y nam `blockcount' (liczba bloków) równe 3616. Niestety s± to bloki o rozmiarze 512 bajtów (zasz³o¶æ z UNIX-a), na prawdê potrzebujemy wiêc 3616/2 = 1808 bloków o rozmiarze 1024 bajty. Oznacza to, ¿e musimy jeszcze odnale¼æ cztery bloki. Ostatni przeczytany blok danych mia³ numer 10125. Tak jak to robili¶my do tej pory, pomijamy blok po¶redni (numer 10126) i mo¿emy ju¿ zapisaæ ostatnie cztery bloki. # fsgrab -c 4 -s 10127 /dev/hda5 >> /mnt/recovered.001 Przy pewnym szczê¶ciu uda³o nam siê odzyskaæ ca³y plik. 1111.. BBeezzppoo¶¶rreeddnniiee mmooddyyffiikkaaccjjee iiwwêêzz³³óóww Metoda ta jest du¿o prostsza. Jednak, tak jak wspomnia³em wcze¶niej, nie mo¿e byæ jeszcze stosowana do plików wiêkszych ni¿ 12 bloków. W ka¿dym iwê¼le, który chcesz odzyskaæ musisz ustawiæ licznik pod³±czeñ (linkcount) na jeden i czas skasowania (deletion time) na zero. Robi siê to za pomoc± polecenia mi (modify inode) w debugfs. Przyk³adowe wywo³anie, modyfikacja iwêz³a 148003 (tego co wcze¶niej): debugfs: mi <148003> Mode [0100644] User ID [503] Group ID [100] Size [6065] Creation time [833201524] Modification time [832708049] Access time [826012887] Deletion time [833201524] 0 Link count [0] 1 Block count [12] File flags [0x0] Reserved1 [0] File acl [0] Directory acl [0] Fragment address [0] Fragment number [0] Fragment size [0] Direct Block #0 [594810] Direct Block #1 [594811] Direct Block #2 [594814] Direct Block #3 [594815] Direct Block #4 [594816] Direct Block #5 [594817] Direct Block #6 [0] Direct Block #7 [0] Direct Block #8 [0] Direct Block #9 [0] Direct Block #10 [0] Direct Block #11 [0] Indirect Block [0] Double Indirect Block [0] Triple Indirect Block [0] Ustawi³em czas skasowania na 0, licznik pod³±czeñ na 1 i nacisn±³em Enter dla wszystkich innych pól. Jest to pewn± niedogodno¶ci±, je¿eli masz wiele plików do odzyskania. My¶lê jednak, ¿e mo¿na z tym ¿yæ. Je¶li oczekujesz wygody, lepiej zacznij u¿ywaæ graficznego `systemu operacyjnego' ze ¶licznym `Koszem na ¶mieci'. Przy okazji: polecenie mi pokazuje `Czas stworzenia' (Creation time) w iwê¼le. To k³amstwo ! (lub, jak kto woli, pomy³ka.) Prawda jest taka, ¿e nie mo¿na w systemie plików UNIX-a stwierdziæ kiedy dany plik zosta³ utworzony. Pole st_ctime w struct stat zawiera `czas zmiany iwêz³a', czyli czas ostaniej zmiany, którego¶ z parametrów iwêz³a. To tyle z dzisiejszej lekcji. Nowsze wersje debugfs ni¿ moja, prawdopodobnie nie wy¶wietalaj± niektórych pól w iwê¼le (szczególnie, Reserved1 i Fragment). Po zmianie w iwêz³ach, mo¿esz wyj¶æ z debugfs i napisaæ: # e2fsck -f /dev/hda5 Pomys³ polega na tym, ¿e ka¿dy ze skasowanych plików zosta³ odkasowany, ale nie pojawi³ siê w ¿adnym katalogu. Program e2fsck umie to wykryæ i doda pozycjê dla ka¿dego z nich w katalogu /lost+found systemu plików. (Je¿eli partycja by³a zamontowana w /usr, pliki pojawi± siê w /usr/lost+found, gdy j± zamontujesz.) Prac±, któr± musisz jeszcze zrobiæ, to nadanie plikom nazw i umieszczenie ich we w³a¶ciwym miejscu drzewa plików. Po uruchomieniu e2fsck, wy¶wietli Ci on trochê informacji, ale zada równie¿ pytania, które zniszczenia naprawiaæ. Odpowiadaj `yes' (tak) na wszystko co dotyczy `summary information' lub iwêz³ów, które zmienia³e¶. Resztê pozostawiam do Twojej decyzji, pamiêtaj, ¿e nie jest najlepsz± metod± odpowiadanie `tak' na wszystkie pytania. Po skoñczeniu pracy przez e2fsck, mo¿esz ponownie zamontowaæ system plików. Istnieje alternatywne rozwi±zanie do pozwolenia, aby e2fsck utworzy³ pliki w /lost+found. Mo¿esz u¿yæ debugfs i stworzyæ w systemie plików do³±czenie (link) do iwêz³a. S³u¿y do tego polecenie link w debugfs, po zmianach w samym iwê¼le: debugfs: link <148003> foo.txt W ten sposób powstanie w bie¿±cym katalogu plik o nazwie foo.txt; foo.txt bêdzie Twoim odzyskanym plikiem. Nadal musisz jednak uruchomiæ e2fsck, aby uaktualniæ informacje ogólne, liczniki bloków itp. itd. 1122.. CCzzyy bbêêddzziiee ttoo kkiieeddyy¶¶ ³³aattwwiieejjsszzee?? Tak. W³a¶ciwie, mam nadziejê, ¿e tak. Chocia¿, gdy to piszê, aktualna, stabilna wersja j±dra (seria 2.0.x) zeruje bloki po¶rednie. Wersje serii rozwojowej 2.1.x i stabilnej 2.2.x nie maj± tej wady. Dzisiaj, 2 lutego 1999 minê³o dopiero kilka dni od wydania j±dra 2.2.1; prawdopodobnie pojawi siê ono w dystrybucjach za jeden, dwa miesi±ce. Kiedy wersje j±dra rozwi±¿± problem zerowania bloków po¶rednich, wiele moich rêcznych technik modyfikacji iwêz³ów nie bêdzie ju¿ potrzebnych. W tym samym czasie stanie siê mo¿liwe u¿ycie polecenia dump w debugfs dla du¿ych plików i innych programów narzêdziowych do odzyskiwania plików. 1133.. CCzzyy ss±± jjaakkiiee¶¶ pprrooggrraammyy aauuttoommaattyyzzuujj±±ccee tteenn pprroocceess?? Pewnie, ¿e s±. Niestety cierpi± one na te same problemy co rêczna technika zmian w iwêz³ach: bloki po¶rednie s± nieodzyskiwalne. Warto im siê przyjrzeæ, bowiem wydaje siê, ¿e ograniczenie to wkrótce zniknie. Napisa³em program e2recover, który jest w³a¶ciwie tylko Perl-ow± otoczk± dooko³a fsgrab. Stara siê on poradziæ sobie z wyzerowanymi blokami po¶rednimi i wydaje sie, ¿e dzia³a ca³kiem nie¼le dla du¿ych plików, które nie uleg³y fragmentacji. Ustawia poprawne prawa dostêpu (i w³a¶ciciela, gdy to jest mo¿liwe). Upewnia siê równie¿, ¿e odzyskiwany plik ma poprawny rozmiar. Program e2recover by³ planowany jako czê¶æ powa¿nych zmian w tym Howto; oznacza to niestety, ¿e wiêcej u¿ytecznej dokumentacji do e2recover bêdzie zamieszczone dopiero w nowej wersji tego dokumentu. Jednak i teraz mo¿e on siê komu¶ przydaæ; mo¿na go ¶ci±gn±æ z mojej strony domowej <http://pobox.com/~aaronc/tech/e2-undel/>, i wkrótce z Metalab-a (jest ju¿ w Polsce - Sunsite <http://sunsite.icm.edu.pl/pub/Linux/sunsite/utils/file/>). Scott D. Heavner jest autorem programu lde, the Linux Disk Editor. Mo¿e on byæ u¿ywany zarówno jako binarny edytor dysku i jako odpowiednik debugfs dla systemów plików ext2 i minix, a nawet dla systemu plików xia (chocia¿ wsparcie dla xia przesta³o byæ dostêpne w j±drach 2.1.x i 2.2.x). Zawarto w nim kilka pomys³ów wspomagaj±cych odzyskiwanie skasowanych plików: ¶ledzenie listy bloków tworz±cych plik i wyszukiwanie danych na dysku. Zawiera on tak¿e ca³kiem u¿yteczn± dokumentacjê o podstawach systemu plików oraz jak go u¿ywaæ do odzyskiwania plików skasowanych. Wersja 2.4 lde jest dostêpna na Metalab-ie <http://metalab.unc.edu/pub/Linux/system/filesystems/lde-2.4.tar.gz> (i kopiach, w Polsce - Sunsite <http://sunsite.icm.edu.pl/pub/Linux/sunsite/system/filesystems/lde-2.4.tar.gz>), lub na stronie domowej autora <http://www.geocities.com/CapeCanaveral/Lab/7731/lde.html>. Inne mo¿liwo¶ci oferowane s± przez GNU Midnight Commander, mc. Jest to pe³noekranowe narzêdzie do zarz±dzania plikami, oparte na znanym w ¶rodowisku MS-DOS programie o nazwie `NC'. mc obs³uguje mysz zarówno na konsoli, jak i w oknie xterm-a, dostarcza mechanizm wirtualnych systemów plików, co umo¿liwia triki takie jak cd do archiwum tar. Odzyskiwanie plików obs³ugiwane jest przez jeden z takich wirtualnych systemów plików. Wszystko to brzmi bardzo zachêcaj±co, ale muszê przyznaæ, ¿e nie u¿ywam tego programu -- wolê staromodne polecenia pow³oki. Aby u¿ywaæ mo¿liwo¶ci odzyskiwania skasowanych plików, musisz skonfigurowaæ program z opcj± --with-ext2undel; bêdziesz równie¿ potrzebowa³ bibliotek w wersji rozwojowej i niektórych plików zawartych w pakiecie e2fsprogs. W ten sposób zbudowana jest wersja dostarczana w Debian GNU/Linux <http://www.debian.org/>; tak samo mo¿e byæ w innych dystrybucjach. Teraz mo¿esz po prostu kazaæ mu cd undel:/dev/hda5, i otrzymasz `zawarto¶æ katalogu' ze skasowanymi plikami. Jak wiele innych i ten program bardzo ¼le radzi sobie z zerowaniem bloków po¶rednich -- przewa¿nie odtwarza tylko pierwsze 12k wiêkszych plików. Aktualn± wersjê mo¿na ¶ci±gn±æ z serwera ftp the Midnight Commander <ftp://ftp.nuclecu.unam.mx/Midnight/devel/>. 1144.. KKoollooffoonn Mam zamiar regularnie uaktualniaæ ten dokument tak d³ugo jak bêdê mia³ wystarczaj±co du¿o czasu i co¶ ciekawego do powiedzenia. Oznacza to, ¿e bardzo mi zale¿y na komentarzach od czytelników. Czy moje pisanie mo¿e byæ bardziej zrozumia³e? Czy my¶licie o czym¶, co uczyni³oby problem prostszym? Jest jaki¶ program, który robi to wszystko automatycznie? Je¿eli masz co¶ do powiedzenia o tym dokumencie, albo o fsgrab, albo o e2recover, napisz do mnie aaronc@pobox.com. 1155.. WWyyrraazzyy uuzznnaanniiaa ii bbiibblliiooggrraaffiiaa `Je¿eli widzê dalej od innych, to dlatego, ¿e stojê na ramionach olbrzymów.' (Isaac Newton) To mini-Howto wywodzi siê z listu zamieszczonego w grupie comp.os.linux.misc przez Robina Glovera swrglovr@met.rdg.ac.uk. Chcia³bym podziekowaæ Robinowi za wspania³omy¶lne pozwolenie na przetworzenie jego pomys³ów w to mini-Howto. Korzystaj±c z okazji, chcia³bym jeszcze raz podziêkowaæ wszystkim, którzy napisali do mnie o tym Howto. Otrzymywanie wyrazów wdzieczno¶ci czyni pracê wart± wysi³ku. Niektóre odno¶niki bibliograficzne: · FFrriisscchh, Æleen (1995), _E_s_s_e_n_t_i_a_l _S_y_s_t_e_m _A_d_m_i_n_i_s_t_r_a_t_i_o_n, second e O'Reilly and Associates, Inc., ISBN: 1-56592-127-5. · GGaarrffiinnkkeell, Simson, Daniel WWeeiissee and Steven SSttrraassssmmaannnn (1994), _T_h_e _U_n_i_x_-_H_a_t_e_r_s _H_a_n_d_b_o_o_k, IDG Books, ISBN: 1-56884-203-1. Wiêkszo¶æ tej ksi±¿ki wype³niaj± jednynie m³odociane jêki ludzi, którzy my¶l± ¿e _i_c_h system operacyjny by³ o wiele lepszy od Unix-a; a reszta ksi±¿ki nie dotyczy Ciê, je¿eli u¿ywasz dobrego otoczenia u¿ytkownika jakim jest GNU. S± tam jednak pewne ciekawe rzeczy; na przyk³ad, dyskusja o tym jak ³atwo jest skasowaæ plik pod Unix-em warta jest przeczytania. · GGlloovveerr, Robin (31 Jan 1996), _H_O_W_-_T_O _: _u_n_d_e_l_e_t_e _l_i_n_u_x _f_i_l_e_s _(_e_x_t_2_f_s_/_d_e_b_u_g_f_s_), comp.os.linux.misc Usenet posting. · PPeeeekk, Jerry, Tim OO''RReeiillllyy, Mike LLoouukkiiddeess et al (1993), _U_N_I_X _P_o_w_e_r _T_o_o_l_s, O'Reilly and Associates, Inc./Random House, Inc., ISBN: 0-679-79073-X. Second edition, 1998. 1166.. FFoorrmmaallnnoo¶¶ccii Wszystkie znaki towarowe s± w³asno¶ci± ich prawowitych w³a¶cicieli. Konkretnie: · _M_S_-_D_O_S i _W_i_n_d_o_w_s s± znakami towarowymi Microsoftu <http://www.microsoft.com/>. · _U_N_I_X jest znakiem towarowym the Open Group <http://www.opengroup.org/>. · _L_i_n_u_x jest znakiem towarowym zarejestrowanym w USA i kilku innych pañstwach dla Linusa Torvalds. Prawa autorskie do tego dokumentu 1997, 1999 posiada Aaron Crane aaronc@pobox.com. Mo¿e on byæ darmowo rozpowszechniany w ca³o¶ci, ³±cznie z t± not± autorsk±. Nie mo¿e byæ zmieniany bez zgody autora lub koordynatora Linux Documentation Project HOWTO. Nie dotyczy to tylko kopiowania jego czê¶ci w celu przegl±dania lub cytowania; w takim przypadku, czê¶ci te musz± byæ poprawnymi cytatami i nie musz± zawieraæ noty o prawach autorskich. Autor oczekuje, ale nie wymaga, ¿e ten kto bêdzie chcia³ sprzedawaæ kopie tego dokumentu, niezale¿nie od tego, czy na no¶niku elektronicznym, czy papierowym, poinformuje jego lub koordynatora projektu Linux HOWTO o swoich zamiarach. Koordynatorem projektu Linux HOWTO jest aktulanie Tim Bynum linux- howto@sunsite.unc.edu. 1177.. OOdd tt³³uummaacczzaa Stara³em siê, aby t³umaczenie by³o najwierniejsze z mo¿liwych. Dlatego nie ma ¿adnych zmian w stosunku do orgina³u, za wyj±tkiem odno¶ników do polskiej kopii serwera Metalab na Sunsite.icm.edu.pl. Czekam na komentarze pod adresem: Bartosz Sawicki sawickib@ee.pw.edu.pl.