
Ext3 filesystem’de silinmiş dosyaları kurtarmak için uygulanabilecek birkaç farklı yöntem var.
Yazının devamında, bence en başarılı olan yöntemi aktaracağım sizlere.
Bu yöntemi uygulamak için kullanacağımız 3 program var. Bunlar:
foremost , blkls (sleuthkit package) , debugfs (e2fsprogs package)
debugfs uygulaması sanırım çoğu dağıtımda işletim sistemine gömülü geliyor.
Büyük ihtimalle diğer iki uygulamayı derlemeniz gerekecek. Yukarıdaki link’lerden kaynak kodlarını indirerek uygulamaları derleyebilirsiniz.
blkls, foremost ve debugfs uygulamalarını edindikten sonra işleme başlayabiliriz.
Not: Yanlışlıkla sildiğiniz dosyayı geri döndürmye başlamadan önce yaptığınız her hareket (kullanacağımız uygulamaları kurmak, Linux’u reboot etmek, konfigürasyon değişkliği yapmak, vb.) dosyanın kayıpspz geri dönme ihtimalini azaltır. Bu yüzden gerekli uygulamaları testi kırılmadan kurmak doğru bir yöntem olabilir.
Örneğin /tmp klasöründeki tux.pdf dosyasını silelim.
[root@testserver ~]# ls -la /tmp/
total 776
drwx—— 2 root    root     16384 Mar 30 14:33 lost+found
srwxr-xr-x 1 root    root         0 Mar 30 15:51 mapping-root
drwx—— 2 temp_adm temp_adm  4096 Apr 27 08:38 ssh-HteHU16134
-rw-rw-r– 1 temp_adm temp_adm 770042 Nov 2 2006 tux.pdf
[root@testserver ~]# rm /tmp/tux.pdf
rm: remove regular file `/tmp/tux.pdf’? y
Artık dosyamız yok. Ama geri getirmek istiyoruz.
Öncelikle dosyamızın hangi partition’da ve hangi disk’de olduğunu öğrenelim.
[root@testserver ~]# df -h
Filesystem           Size Used Avail Use% Mounted on
/dev/sda3Â Â Â Â Â Â Â Â Â Â Â Â Â 20GÂ 3.1GÂ Â 17GÂ 16% /
/dev/sda6Â Â Â Â Â Â Â Â Â Â Â Â 5.9GÂ 141MÂ 5.7GÂ Â 3% /tmp
/dev/sda5Â Â Â Â Â Â Â Â Â Â Â Â 9.7GÂ 151MÂ 9.5GÂ Â 2% /home
/dev/sda2Â Â Â Â Â Â Â Â Â Â Â Â Â 30GÂ 173MÂ Â 29GÂ Â 1% /u01
/dev/sda1Â Â Â Â Â Â Â Â Â Â Â Â 190MÂ Â 12MÂ 177MÂ Â 7% /boot
tmpfs                2.0G    0 2.0G  0% /dev/shm
Yukarıda görüldüğü gibi tmp /dev/sda6 diskinde.
Şimdi debugfs komutuyla yanlışlıkla sildiğimiz dosyanın inode tablosundaki yerini bulalım.
[root@testserver ~]# debugfs /dev/sda6
debugfs 1.39 (29-May-2006)
debugfs:Â ls -d
2 (12) .   2 (12) ..   11 (20) lost+found   786433 (20) .ICE-unix
163841 (20) .font-unix   753665 (164) ssh-HteHU16134
<98305> (140) tux.pdf <98307> (120) ccG5AR0k.o  <98309> (20) cc3HK5qV.ld
<98310> (80) ccWyJYQv.le  <98311> (20) ccYQe4Ju.ld
<98312> (40) ccgXh5Vg.le  <1146881> (20) orbit-root
98308 (68) mapping-root  <294913> (24) ssh-xWYtZ14637
<524289> (24) vmware-config1Â Â Â 98306Â (3780) .vmware-deploy.ERRORED
<720897> (3728) VMwareDnDÂ Â <98309> (3708) sh-thd-1269995942
debugfs:
debugfs:
debugfs:
debugfs:
debugfs:Â imap <98305>
Inode 98305 is part of block group 3
located at block 98691, offset 0×0000
debugfs:
debugfs:
debugfs:
debugfs:Â stats
Filesystem volume name:Â Â /tmp
Last mounted on:Â Â Â Â Â Â Â Â Â <not available>
Filesystem UUID:Â Â Â Â Â Â Â Â Â e6eb7744-a1e6-4538-b444-352f8922fdf9
Filesystem magic number:Â 0xEF53
…
…
Blocks per group:Â Â Â Â Â Â Â Â 32768
..
..
debugfs:
debugfs:
debugfs:Â quit
debugfs komutuyla elde ettiğimiz verilerden yararlanarak silinen dosyanın bulunduğu block grup’daki tüm veri çekerek dosyayı bulmaya çalışacağız. Block grubun başlangıç ve bitiş değerini ifade eden 2 değere ulaşmaya çalışacağız.
Başlangıç değerini hesaplamak için: (Block Group * Blocks Per Group)
Bitiş değerini hesaplamak için : ((Block Group + 1) * Blocks Per Group -1)
Bu mantıkla örneğimizdeki değerlerimiz:
3 * 32768 Â = Â 98304 Â Â ve
4 * 32767 = 131068  olacaktır.
blkls komutuyla bulduğumuz değerler arasındaki tüm veriyi bir dosyaya yazdıracağız.
Dikkat!!: Burada dikkat edilmesi gereken nokta blkls komutunun otput dosyası, kurtarılmaya çalışılan dosyanın bulunduğu partition’a yazılmamalıdır. Hatta mümkünse bu dosya harici bir diske yazılmalıdır.
[root@testserver ~]# blkls /dev/sda6 98304-131068 > /home/emre/recover.dat
Sıra, recover dat dosyasından aradığımız dosya tipindeki veriye/verilere ulaşmaya geldi.
Öncelikle bulunacak (umarım J) dosyaların yazılacağı bir klasör oluşturalım.
[root@testserver ~]# mkdir /home/emre/rescue
foremost komutuyla recover.dat dosyasının içeriğinde pdf hash’lerini tarayarak eşleşen veri kümelerini /home/emre/rescue klasörüne yazdıracağız.
root@testserver ~]# foremost -dv -t pdf -o /home/emre/rescue/ -i /home/emre/recover.dat
Foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus
Audit File
Foremost started at Tue Apr 27 09:43:04 2010
Invocation: foremost -dv -t pdf -o /home/emre/rescue/ -i /home/emre/recover.dat
Output directory: /home/emre/rescue
Configuration file: /usr/local/etc/foremost.conf
Processing: /home/emre/recover.dat
|——————————————————————
File: /home/emre/recover.dat
Start: Tue Apr 27 09:43:04 2010
Length: 122 MB (128425984 bytes)
Num     Name (bs=512)        Size     File Offset    Comment
0:     00070632.pdf        755 KB       36163584
**|
Finish: Tue Apr 27 09:43:05 2010
1 FILES EXTRACTED
pdf:= 1
——————————————————————
Foremost finished at Tue Apr 27 09:43:05 2010
Foremost komutunun çıktısından görüldüğü gibi, komut 1 adet pdf hashing’I tespit etti.
/home/emre/rescue/ klasörünün içeriğine baktığımızda pdf isimli klasörün altında 00070632.pdf isimli bir pdf dosyası var.
Ve bu dosya kuvvetle muhtemel yanlışlıkla sildiğimiz tux.pdf dosyasının ta kendisi.
[root@testserver ~]# tree /home/emre/rescue/
/tmp/rescue/
|– audit.txt
`– 00070632.pdf
foremost komutunu kullanırken –t parametresi ile belirttiÄŸimiz dosya tipleri ön tanımlı olarak ÅŸunlar olabilir: jpg, gif, png, bmp, avi, exe, mpg, wav, riff, wmv, mov, pdf, ole, doc, zip, rar, htm, cpp, pst, vb… Åžayet tanımlı dosya tipleri dışında bir dosya kurtarmaya çalışıyorsanız  /usr/local/etc/foremost.conf dosyasına bazı eklemeler yapmanız gerekecektir.