Następna strona Poprzednia strona Spis treści

11. Bezpośrednie modyfikacje iwęzłów

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.


Następna strona Poprzednia strona Spis treści