Data-Recovery

讀取文件末尾以恢復數據

  • November 1, 2016

一個非常舊的 .swp 文件恢復了我正在編輯的文件,因此它現在顯著縮短。從那以後我沒有在那個目錄中做任何事情,所以緊跟在文件末尾的字節應該仍然有我的數據。我可以使用什麼函式從給定的記憶體地址讀取 N 個字節?ddread停在文件邊界,除非我在某處錯過了一個選項。

目前文件大小為 3.2 KB。我不記得文件在被截斷之前到底有多大,但可能不超過 10 KB。如何從文件開頭讀取 10 KB,忽略文件邊界?數據保存不完善也沒關係,只要我不用從頭開始。

通常當編輯器保存文件時,他們會刪除或截斷為 0,從而釋放分配的空間,然後再寫入,從而分配新的空間。這導致文件系統將數據放在完全不同的物理位置。所以你的想法可能行不通。

您可以使用filefragor獲取文件的物理位置hdparm --fibmap,然後使用dd直接讀取該物理位置。我在這裡在不同的上下文中描述了這個過程:https ://unix.stackexchange.com/a/85880/30851


在您的情況下,您更有可能需要查找文本數據的通用方法……例如:

strings -n 12 -t d /dev/partition | grep -F 'text snippet'

strings將查找連續的 ASCII 數據(也支持一些其他編碼,不確定 UTF-8。如果它是程式碼或英文,你將不需要它)並且它還將列印找到它的偏移量。

text snippet應該是您記得在您要查找的文件部分中的準確、獨特的文本樣本

$$ in a single line $$. (如果您不完全了解,可以使用正則表達式 grep。) -n 12strings要尋找的最小長度。12應該是你的長度text snippet。此參數是可選的,如果提供它可能有助於strings | grep加快速度。

讀取整個分區需要很長時間,但如果成功,您將獲得一個偏移量,您可以提供該偏移量dd以獲取一般區域,然後刪除不屬於的內容。

從那以後我沒有在那個目錄中做任何事情

如果您的目錄碰巧不是掛載點……大多數文件系統並沒有真正為“每個目錄”保留空間,所以……整個文件系統中的任何和所有寫入都可能覆蓋您正在尋找的位。在數據恢復情況下,您通常會將整個事物切換到只讀模式。

引用自:https://unix.stackexchange.com/questions/320149