用於損壞驅動器(IO 錯誤)的高級 NTFS 分區文件恢復技術?
我最近在 ESXi 主機上的硬碟驅動器上遭受了非常小但非常重要的損壞,影響了幾個虛擬機。有一個文件我非常想恢復,當然它在我的正常備份中不知何故被遺漏了。最新的副本是 6 個月大的。原來我需要那個……哎呀。
細節:
我在 Parted Magic 可啟動 ISO 中使用了 ddrescue(AWESOME 工具)來恢復有問題的 VM 驅動器的 99.98%。不幸的是,錯誤似乎幾乎完全是最近的文件寫入……所以當然它們正是我最需要恢復的扇區。
驅動器在讀取壞扇區時出現 IO 錯誤,但偶爾會成功讀取先前的壞扇區!所以,恢復還是有可能的。比這稍微多一點的時候會出現某種重大故障,並使驅動器向下旋轉並重新啟動。哦,大約 1/4 的減速不會回來。(需要硬通電,關機不起作用)最後,幾乎每個壞扇區讀取都伴隨著美妙的咔噠聲。
重要的 VM 磁碟是 NTFS 格式的。
我可以(通常)以只讀方式掛載損壞的 NTFS 卷,並且我可以(稍微少一些)導航到包含我需要的文件的文件夾。但是,當我對文件夾執行“ls”時,有問題的文件似乎總是給出 IO 錯誤。文件夾中的其他文件不會給出 IO 錯誤。
我嘗試過使用 ntfsinfo/etc…這聽起來正是我需要的…但它根本不會打開分區。(令人沮喪,因為’mount’通常會)
該文件是 Excel 2003 時代的 XLS 文件,因此我不確定是否可以提供任何字元串來搜尋原始磁碟映像。(可能是 6 個月大版本的一部分?)
我真的很想使用類似 debugfs 的工具。但是,從手冊頁看來,ntfs 工具可以完成這項工作,前提是它們可以打開分區。特別是,我想知道 IO 錯誤是否可能純粹存在於文件的元數據中,以及目錄記錄是否可以很好地恢復以復製文件內容。作為最後的手段,我可以檢索到的任何部分文件內容都會很棒。
我以前寫過(相對簡單的)核心模組,所以我可以編譯一個啟用(或添加)更多調試資訊的特殊 NTFS 模組。(該文件值得至少花幾天的時間來嘗試恢復……而且我在這個過程中學到了很酷的東西)
任何指針?
編輯:
更多驅動錯誤資訊:
/var/log/messages 當然顯示了很多 NTFS-fs 錯誤……但我終於費心翻譯我通常得到的未處理的感知程式碼消息:感知鍵 0x3,ASC=0x11,ASCQ=0x4。(這似乎轉化為 UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED)。
當驅動器減速時,我看到“scsi0: *** BusLogic BT-958 Initialized”消息。我不確定是 Linux SCSI 驅動程序、ESXi 驅動程序還是驅動器本身決定使驅動器減速。如果是 Linux 驅動程序,那麼也許我可以修改驅動程序以避免停機。整個 ddrescue 事情因這些需要電源循環的減速而變得更加痛苦。
編輯2:
在我“ls”包含相關文件的目錄之後,使用“end_request:I/O 錯誤,dev sda,扇區 7238859”日誌消息,我已將我的 ddrescue 操作定位到該扇區。如果成功,我目前計劃抓住機會將該扇區寫回活動磁碟。也許我可以通過這種方式慢慢地重建我的方式來處理有問題的文件。儘管如此,大多數可恢復的壞扇區都在 20 次以下重試中恢復……到目前為止,這個已經超過 150 次……嘆息
編輯3:
我需要的文件上來自“ls”的扇區錯誤完全不合作(一夜之間嘗試了 1000 多次,但沒有運氣)。我希望這只是您執行 ’ls’ 時的元數據?:)
我確實有大部分 ddrescue 副本,但是沒有安裝(或沒有文件安裝)。損壞的驅動器大部分時間都正確安裝……可能損壞的驅動器“安裝”上的 IO 錯誤回退到正常工作的鏡像?
** EDIT4:**
我暫時放棄了,等待進一步的建議。我已經卸下了驅動器並重建了盒子。我會繼續開車,以防萬一。
從我的經驗中得到幾點說明:
- **(原因)**如果您在嘗試高畫質訪問期間聽到異常聲音,並且(或多或少)隨機磁碟位置沒有出現問題,那麼根本原因很可能是磁碟表面(而不是電子設備) - 不幸的是,這是可悲的情況。如果它“只是”電子設備,您可能有機會恢復大部分甚至全部數據。
- **(壞扇區)**如果您還沒有,請在網路上搜尋磁碟製造商的可啟動診斷/恢復工具,下載、啟動、執行深度測試並讓它嘗試重新映射壞扇區 - 這是免費方法中最好的。 請注意,壞扇區有增長的趨勢 - 因此,即使您在第 2314 次讀取嘗試後設法擷取了文件的一大塊,這些嘗試也有可能只是使附近的壞扇區增長,從而有效地降低了恢復其他部分的機會的文件。
- **(恢復 NTFS)**沒有什麼可以修復 NTFS 文件系統以及 MS Windows 原生工具。如果 NTFS 映像不可掛載(還要確保您嘗試掛載分區,而不是整個磁碟!),您可以嘗試
testdisk
在 Linux 下進行嘗試,但如果失敗,Windowschkdisk
可以提供幫助。如果您在虛擬機下安裝了 Windows,您可以將獲取的原始映像轉換ddrescue
為該虛擬機支持的格式(例如VDI
或VMDK
),將其添加到 VM 並以命令行模式啟動 Windows 以修復文件系統。如果您使用 VirtualBox,轉換此類圖像的命令是VBoxManage convertfromraw <filename> <outputfile>
可選的,--format VDI|VMDK|VHD
以獲取指定的輸出格式。