
我不小心將 512 位元組的二進位檔案寫入了錯誤的 USB 磁碟,dd
並且裝置不再顯示任何分割區fdisk
。
我以為所有資料都消失了,但dd if=/dev/sdx | strings
顯示資料似乎仍然存在,因為dd
幸運的是,資料僅限於前 512 個位元組。有什麼辦法可以恢復嗎?
此磁碟有兩個分割區:一個是 ext4 (~4GB),其餘 16GB 則是 NTFS。
答案1
這取決於之前到底發生了什麼,但從中恢復可能很容易。
用於
dd
在安全位置建立 USB 隨身碟的完整映像。用於
dd
在安全位置建立 USB 隨身碟的完整映像。是的,請保留完整圖像。資料恢復操作通常會造成比預期更大的損害。
試著記住該 USB 隨身碟上的分割佈局是什麼樣的。寫下來。如果您擁有 Linux 核心偵測到該磁碟(在被搞亂之前)時的系統日誌,這可能會有所幫助 - 通常它會列印有關偵測到的分割區的一些資料。
使用 fdisk 重新建立具有相同分割區表的 MBR。不要格式化和/或 fsck 任何分割區。
嘗試使用唯讀 (
-o ro
)mount
選項掛載分割區。如果成功,請嘗試將所有檔案複製到安全位置,並觀察終端並記錄 I/O 錯誤 - 表達分區邊界錯誤的典型方式是透過底層裝置上的越界存取。
如果複製失敗,請恢復映像並返回步驟 4。
我是否提到在執行其他操作之前要有 USB 驅動器的完整映像?
PS:您可能還想看看類似的工具測試磁碟,嘗試自動化恢復過程。但您仍然應該先獲得完整的圖像。
PS2:如果你覺得舒服的話,你也可以試試看。如果您可以對第一個分割區的起點做出合理的假設,那麼您可以用來tune2fs -l
取得第一個分割區的確切大小,這將允許您尋找第二個分割區的起點。
答案2
為了恢復ext4
分割區及其數據,我考慮建立一個磁碟範圍的 ext4 分割區。這讓我得到了存取數據並按照 @thkala 的建議,使用 檢索有關分區的資訊tune2fs -l
。這些資訊看起來非常可行,因此沒有改變。
非常有趣的是,gparted 在某種程度上能夠弄清楚實際分區大小從這個警告可以看出:
分區內有 10.96 GiB 未分配空間。若要擴充檔案系統以填入分割區,請選擇分割區並選擇選單項目:
因為 11GiB 大約是 NTFS 分割區的大小。
請注意未使用的空間,IIRC,它是 ext4 仍然可用的空間。這未分配的空間gparted辨識出的似乎是NTFS分割區;現在,我怎麼才能恢復那個呢,也許可以透過找出第一個分割區的結束位置(即它的總位元組數)來實現?
最後測試磁碟毫不費力地處理了這件事。