Linux’ta ext3 bir diskten silinen dosyalar geri getirilebilir mi?

Aslında sorunun resmi cevabı “getirilemez” kısaca. ext3 dosya sisteminde silinen dosyaların akıbetini ext3 formatını geliÅŸtiren ekipten Andreas Dilger’den öğrenelim:

“In order to ensure that ext3 can safely resume an unlink after a crash, it actually zeros out the block pointers in the inode, whereas ext2 just marks these blocks as unused in the block bitmaps and marks the inode as “deleted” and leaves the block pointers alone.”

Kısaca özetleyelim : ext2 formatında silinen (unlink edilen) dosyanın bulunduÄŸu inode’ları “silindi” olarak iÅŸaretleyip, datayı iÅŸaret eden bölüme dokunmazken, ext3 formatında datayı iÅŸaret eden bölüme sıfır yazar (dolayısıyla da o bölüm fiziksel anlamda silinmiÅŸ olur).

Data hakkında sisteme bilgi verebilecek bu bölüm silindiğinde, yani bir anlamda datanın nerede başlayıp bittiğinin indeksi kaybolduğunda, elinizde harita ve hiçbir koordinat bulunmadan dünya üzerindeki bir şehri aramak gibi bir durumda kalırsınız. Bu durumda ne yapılabileceği ile ilgili ufak da olsa bir umut ışığını da gene aynı developerdan alalım:

Your only hope is to “grep” for parts of your files that have been deleted and hope for the best.”

Aslında bu yanlış anlamıyorsam, raw data recovery denilen hadise. Yani disk üzerinde ne kadar data varsa o dataların tümü içerisinde tamamen silinmemiÅŸ (özellikle o bölgenin üzerine baÅŸka data yazılmamış) olduÄŸunu umduÄŸumuz bir bölgeyi bulmaya çalışabiliriz. Tabii silinen bir text dosyasını bu ÅŸekilde aramak için “eh iÅŸte mümkün” denilebilirse de binary bir dosyayı geri getirmeyi ummak Pollyana’ya iç çektirebilecek ölçüde bir iyimserlik olur herhalde..

Peki silinen dosyamız text dosyası ise ne yapacağız diyorsanız, öncelikle silinen dosyada spesifik olarak bulunan, baÅŸka dosyalarda bulunması ihtimali pek olmayan bir kelime öbeÄŸini hatırlamanız gerekiyor. Silinen dosyanızda emin olduÄŸunuz ve baÅŸka dosyalarınızda, iÅŸletim sistemi ya da programlarınızın dosyalarında olmama ihtimali yüksek bir ifade bulmalısınız. ÖrneÄŸin, “hedeli hodolar geldi” eÄŸer hede hodo diÄŸer dosyalarınızda pek geçmiyorsa güzel bir tercihtir. “bin/bash” veya “for each” gibi script dosyalarının çoÄŸunda olabilecek kelimeler seçmenin mantıklı olmadığını söylemem bile abes galiba.

Bir de arama yapacağınız kelime, ifade mümkünse dosyanızın ismi olmasın. Boşuna dosya ismi ile arama yaparak kendinizi yormayın.

Yapılacak şey ise çok basit :

grep -a -B10 -A100 "hedeli hodolar geldi" /dev/sda1

Bu komutu açıklayalım, -a binary data olan /dev/sda1 partition’ını text gibi aramamıza yarıyor. -B10 yazdığımız metin bulunursa, bulunan satırın 10 satır öncesini de ekrana dök demek, -A100 de 100 satır sonrasını dök demek. En sona da dosyanın silindiÄŸi partition’ı yazıyoruz.

Yukarıda belirttiÄŸim gibi birçok dosyada geçebilecek ifadelerle arama yapılırsa, bu komutun çıktısını bir dosyaya yönlendirmek yapmak isteyeceÄŸiniz son ÅŸeylerden biri olur emin olun. Çünkü komutun çıktısı GB’lar büyüklüğünde olabilir, harddiskinizdeki dosyaların kapladığı alana göre. Bu nedenle spesifik bir ifade ile grep yapıp, önce ekrana dökmek (more kullanmak da pek akıllıca olmayabilir) mantıklı sonuçlar geliyorsa tekrar yaparak bir dosyaya yönlendirmek daha akıllıca olur.

Harddiskinizin büyüklüğüne göre, komutun çalışmasını tamamlaması saatler bile alabilir haberiniz ola. Bir diğer not da komutun root hakları ile çalıştırılması gerektiğidir.

Bu arada baÅŸka bir konu da dosyayı silmenizden saniyeler sonrasında dosyanızı kurtarmaya çalışacaksanız, google da “lsof recover deleted files” benzeri aramalar yapmanızı, bir uygulama ile açmışsanız dosyanızı /tmp dizinini ve .swp, .tmp gibi uzantılara sahip gizli dosyalara bakmanızı öneririm. lsof komutuyla henüz silinmiÅŸ dosyaların kurtarılabileceÄŸi ile ilgili bazı ÅŸeyler okumuÅŸtum zamanında. Belki o yöntem hayat kurtarabilir.
Kolay gelsin..

Yorumunuzu Ekleyin

Ad - Soyad: (Gerekli)

E-posta: (Gerekli)

Web siteniz:

Yorumunuz: