Genellikle editörler dosyaları kaydettiğinde, 0'ı siler veya kısaltırlar, böylece ayrılan alanı boşaltırlar ve daha sonra yeni alan tahsis ederler. Bu, dosya sisteminin verileri tamamen farklı bir fiziksel konuma koymasını sağlar. Yani fikriniz işe yaramayabilir.
Sen kullanarak bir dosyanın fiziksel konumunu alabilir filefrag
veya hdparm --fibmap
, sonra kullanmak dd
doğrudan o fiziksel konumu okumak için. Bu işlemi burada farklı bir bağlamda açıkladım: /unix//a/85880/30851
Sizin durumunuzda, metin verilerini bulmak için genel yaklaşıma ihtiyacınız vardır ...
strings -n 12 -t d /dev/partition | grep -F 'text snippet'
strings
ardışık ASCII verilerini arayacaktır (UTF-8'den emin olmayan diğer kodlamaları da destekler. Kod veya İngilizce ise buna ihtiyacınız olmayacak) ve aynı zamanda ofseti bulunduğu yere de basacaktır.
text snippet
aradığınız dosyanın [tek bir satırda] parçası olduğunu hatırladığınız tam ve benzersiz bir metin örneği olmalıdır. (Tam olarak bilmiyorsanız, bunun yerine normal ifadelerle grep olabilirsiniz.)
-n 12
aranacak minimum uzunluktur strings
. 12
uzunluğunuz olmalıdır text snippet
. Bu parametre isteğe bağlıdır, eğer sağlanırsa strings | grep
biraz daha hızlı gitmeye yardımcı olabilir .
Tüm bölümü okumak uzun zaman alacaktır, ancak başarılı olursa dd
, genel alanı kapmak ve sonra ait olmayan şeyleri kaldırmak için besleyebileceğiniz bir ofsetiniz olacaktır .
O dizinden beri hiçbir şey yapmadım
Dizininiz bir bağlama noktası olmazsa ... çoğu dosya sistemi gerçekten "dizin başına" yer ayırmaz, bu nedenle ... tüm dosya sistemindeki tüm yazma işlemleri aradığınız bitin üzerine yazabilir. Veri kurtarma durumunda, genellikle her şeyi salt okunur moda geçirirsiniz.
strings
son derece şanslı değilseniz sadece dosyanın bazı bölümlerini bulacaktır.