Linux'te Silinen Dosyayı Kurtarmak

Çoğumuzun başına gelmiştir. Arşiv temizliği yaparken yanlışlıkla bir dizini shift+del ile silip çöp kutusunda da bulamayınca da ne yaptım ben demiş olabilirsiniz. Her ne kadar o dosyalara doğrudan ulaşmanın bir yolu kalmamış olsa da dosyaların bilgileri disk üzerinde halen durmaktadır.

İşletim sistemi bir dosyayı silerken disk üzerinde kapladığı yeri sıfırlamakla uğraşmaz. Sadece dosyanın nerede durduğu bilgisini unutur ve o yerler boşmuş gibi davranır. Bunu 1KB lık bir dosya ile 100MB lık bir dosyanın aşağı yukarı aynı sürede siliniyor olmasından anlayabilirsiniz (shift+del ile). Eğer sektör sektör temizliyor olsaydı dosyanın boyutu arttıkça işlemin uzaması gerekirdi değil mi?
 
Dosyanın bilgileri hala aynı yerde duruyorsa bile işletim sistemi artık orayı boş farzettiği için yeni gelecek bilgileri onun üzerine kaydetme ihtimali vardır. O yüzden elimizi çabuk tutup bu dosyaları güvenli bir yere kaydetmemiz gerekir.

Peki bir program nasıl bu dosyaları bulacak iz kalmamışsa? Dosya sistemlerine göre farklı yöntemler kullanılıyor olsa da temel mantık dosyanın son görüldüğü ve olması muhtemel alanları byte byte tarayıp dosyayı çağrıştıracak bir şeyler yakalamak ve dosyanın ardışık sıralandığını varsayarak bulduğumuz yerde etrafa daha dikkatli bakmak şeklinde. Windows'ta bu işi çok güzel yapan programlar Priform'un Recuva uygulaması gibi. Peki Linux kullanırken başınıza gelirse ne yapacaksınız?

Öncelikle:
Dizinimizin bulunduğu disk bölümünü öğrenmemiz gerekiyor. Bunun için

$ mount
 /dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro)
.
.
.
/dev/sdb1 on /home type ext4 (rw)

Benim /home dizinim ayrı bir disk bölümüne eşlendiği için /dev/sdb1 i kullanacağım. Siz o şekilde bir ayrım yapmadı iseniz muhtemelen /dev/sda1 gibi / (yani root) disk bölümünün ismini kullanacaksınız.
 Alternatiflerimiz:

1) extundelete

Kurulum: sudo apt-get install extundelete (Ubuntu ve Mint için)
Kullanım: sudo extundelete --output-dir 'yazilacak dizin' --restore-directory 'silinmis dizin' 'disk bölümü'
Örnek: sudo extundelete --output-dir /tmp/kurtarilanlar --restore-directory ugur/.local/share/local-mail/ /dev/sdb1 (/tmp/kurtarilanlar dizinini önceden oluşturmak gerekli)

2) ext4magic

Kurulum: sudo apt-get install ext4magic (Ubuntu ve Mint için)
Kullanım: sudo ext4magic diskbölümü -r -f silinmisdizin -d yazilacakdizin
Örnek: sudo ext4magic /dev/sdb1 -r -f ugur/.local/share/local-mail -d /tmp/kurtarilanlar (/dev/sdb1 /home dizinine eşlenmiş ve /tmp/kurtarilanlar dizini yoksa oluşturur)
HowTo: http://ext4magic.sourceforge.net/howto_en.html

Ben ext4magic ile daha başarılı sonuçlar aldım fakat bu iki program da diğerinin kurtaramadığı dosyaları bulabiliyor ve ikisini de kullanmakta fayda var ayrı ayrı.

Ext4Magic'in tavsiyesi önemli bir dosya silindiğinde hemen ilgili disk bölümünü unmount etmeniz. Böylece silinen dosyaların kaydedildikleri alanlar bozulmamış olur ve kurtarılma şansı artar. Ayrıca yazılabilir bir dosya sistemi ise her türlü unmount etmemiz tavsiye ediliyor ama ben unmount etmeden de aradıklarımı bulabildim çoğu zaman.

Bir de dikkat etmeniz gerek bir nokta eğer /home için ayrı disk bölümü kullanıyorsanız /home zaten mount ismi olduğu için silinmisdizin yolu verirken /home/ugur yerine /ugur demek gerekiyor. Bir de silinmisdizin ile yazilacakdizin aynı dosya sisteminde olmamalı. Örneğin /home dizini altında bir kurtarma yapıyorsanız kurtarılacak verileri yazmak için /tmp/kurtarilan diye bir dizin seçebilirsiniz

Yorumlar

Popüler Yayınlar