Hard-Disk
盲目地將故障驅動器添加到新驅動器
我有一個有故障的 320GB 驅動器,它在 samish GB 位置有讀取錯誤,但具體位置不同。我可以接受錯誤的可能性,這在這裡是不可能的。
首先,我很驚訝我需要
conv=sync
真正conv=noerror
有用,但是好吧,我有空閒時間來長新腳。我發現它是因為file -s /dev/sdc*
沒有為最後一個分區提供任何合理的輸出(即與源驅動器相同),而是說data
。sync
但是,在添加到命令行後,我沒有得到任何實際改進:file -s
除了第一個分區不包含 FS 描述部分中的錯誤,因此輸出仍然沒有任何意義,因此file -s
命令可以正確檢測 FS。我確認mount -o ro
兩個驅動器的複制不穩定並比較md5sum
所有文件的 s (但單獨的目錄結構是不穩定的)。我正在嘗試以這種方式將其添加到新的更大驅動器中:
dd if=/dev/sda3 conv=noerror,sync bs=1M of=/dev/sdc3 2> /part3_log grep -oPaz '[[:digit:]]*(?=\+[[:digit:]]+ records out\n)' </part3_log >/part3_log_bads # parsing is ok for this specific case rm /part3_log_01 for i in $(cat /part3_log_bads); do dd if=/dev/sda3 conv=noerror,sync bs=1M of=/dev/sdc3 skip=$((i-1)) seek=$((i-1)) count=1 2>>/part3_log_01; done # retrying erratic blocks. i-1 because of number of records is written after erratic block was padded and written. noerror does not make any practical difference here.
我得到每個不穩定塊的輸出
/part3_log
(如預期的那樣):dd: error reading ‘/dev/sda3’: Input/output error 71051+3 records in <<<<<<<<< second number increments from 0 after each erratic block indicating partial read, this is expected 71054+0 records out 74505519104 bytes (75 GB) copied, 2546,96 s, 29,3 MB/s
我得到了以下所有塊的奇怪輸出(預計速度差異)
/part3_log_01
:1048576 bytes (1,0 MB) copied, 6,5663 s, 160 kB/s 0+1 records in 0+0 records out 0 bytes (0 B) copied, 6,41877 s, 0,0 kB/s 0+1 records in 1+0 records out 1048576 bytes (1,0 MB) copied, 7,42028 s, 141 kB/s 1+0 records in 1+0 records out
引起我注意的是,幾乎每個輸入記錄都被部分讀取,而儘管實際上發生了錯誤,但沒有報告錯誤(我在 中看到它們
dmesg
)。沒有報告錯誤sdc
(正如預期的那樣,它是一個新驅動器)。那麼,如何盲目複製故障驅動器然後重試故障記錄?我的方法似乎在兩點上失敗了:
- 它無法複製數據而不會在不穩定的塊之後發生移位(儘管
conv=sync
存在)- 它在重試壞塊時無法報告錯誤。
PS我只想這樣做
dd
。使用ddrescue
有問題的 ATM。PPS 這是 Debian 8.7.1 和 dd 8.23
嘗試 ddrescue(大多數發行版中的 gddrescue):
GNU ddrescue - 數據恢復工具。將數據從一個文件或塊設備複製到另一個文件,嘗試在讀取錯誤的情況下首先搶救好的部分。