當我想將 ISO 放在 USB 隨身碟上時,我不小心dd
在 HDD ( ) 上使用了它。/dev/sdc
我試著環顧四周,發現如果數據被覆蓋,那麼我就完蛋了...
有辦法恢復資料嗎?有什麼我可以做的嗎?
答案1
資料銷毀器會覆蓋硬碟上的磁區。無法恢復被覆蓋的扇區。由於 Linux 在磁區之間分配檔案的方式(這就是 ext 分割區不需要進行碎片整理的原因),大多數檔案的所有內容都不太可能保存下來。從備份恢復,你確實創建了它們嗎?如果你不這樣做,你就會明白為什麼你應該這樣做。對不起。
答案2
僅當部分或大部分資料仍然存在時才能保存資料。
這是一個簡單的暴力現場測試(使用光電發電和利佐普)看看有多遠(以及多少)DD得到:
hd=/dev/sdc # change to whatever device or partition needs testing.
pv -EcN raw ${hd} | lzop | pv -cN compressed | wc -c
在尚未清除的 160GB 硬碟上DD,一分鐘後測試如下所示:
raw: 5.12GiB 0:01:11 [46.1MiB/s] [==> ] 3% ETA 0:33:15
compressed: 4.81GiB 0:01:11 [45.9MiB/s] [ <=> ]
請注意如何壓縮的數字非常接近生的數字。只要工作完成時就是這種情況,那麼大部分數據仍然存在。此百分比將根據故障發生前硬碟的已滿程度而變化,即,如果 HD 或分區僅已滿 10%,則為 8%利佐普會是正常的。它還取決於 HD 中填充的資料類型 - 幸運的是利佐普是一個弱壓縮器,這裡很有幫助。
讓我們用全零來試試:
hd=/dev/zero # change to whatever device or partition needs testing.
pv -cN raw ${hd} | lzop | pv -cN compressed | wc -c
...8 秒後顯示:
raw: 6.81GiB 0:00:08 [ 891MiB/s] [ <=> ]
compressed: 31.8MiB 0:00:08 [4.06MiB/s] [ <=> ]
這壓縮的尺寸現在小於 1%生的。如果整個硬碟都是這樣的話,數據就是卡普特。
(注意:讀取更大的硬碟需要更多的時間,因此可以透過取樣來改進該方法。我們可以使用不讀取每個區塊的方法DD讀書n區塊,向前跳過10n塊,並將其饋送到生的輸入上面。