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.