我在用著範例 3 來自 gddrescue 的文檔(此處)對磁碟進行零寫入並強制重新分配其上掛起的壞磁區。
同一文件在其他地方指出:
如果mapfile不存在,ddrescue將建立它。
但是當我幾乎逐字運行範例 3 時:
ddrescue -vvvv --fill-mode=- -f --synchronous /dev/zero /dev/sdc mapfile.txt
……我收到錯誤:
ddrescue:地圖檔案「mapfile.txt」不存在或不可讀。
如果我運行:
ddrescue -vvvv --fill-mode=- -f --synchronous /dev/zero /dev/sdc -m /cygdrive/b/users/user/desktop/mapfile.txt
....我收到相同錯誤的截斷版本:
ddrescue: Mapfile '/cygdrive/b/users/user/desktop/mapfile.txt' 不存在或不存在
我透過 Cygwin 在 Windows 7 上使用gddrescue
。
這是 Cygwin 實現的錯誤dd
,還是我遺漏了什麼?
答案1
不是錯誤。我的 Kubuntu 上也是這樣。我認為這是因為--fill-mode
你使用的選項。該模式有文件的獨立章節。您缺少的是這部分[強調我的]:
當
ddrescue
使用--fill-mode
選項呼叫時,它在“填充模式”下運行,即不同的從預設的“救援模式”。也就是說,如果您使用該--fill-mode
選項,ddrescue
則不會挽救任何內容。它只填充從具有狀態字元infile
的區塊中讀取的數據outfile
從mapfile
與指定為選項參數的類型字元之一一致--fill-mode
。
這意味著--fill-mode
需要一個已經存在的mapfile
.
這裡的狀態字元和類型字元是什麼?
短語“狀態字元來自mapfile
”應根據這個片段:
狀態字元是以下字元之一:
字符含義
'?'未嘗試的塊
'*' 失敗的塊 未修剪的
'/' 失敗的塊 未刮擦的
'-' 失敗的塊 壞扇區
'+' 完成的塊這是一個範例地圖檔:
# Mapfile. Created by GNU ddrescue version 1.23 # Command line: ddrescue -d -c18 /dev/fd0 fdimage mapfile # Start time: 2015-07-21 09:37:44 # Current time: 2015-07-21 09:38:19 # Copying non-tried blocks... Pass 1 (forwards) # current_pos current_status current_pass 0x00120000 ? 1 # pos size status 0x00000000 0x00117000 + 0x00117000 0x00000200 - 0x00117200 0x00001000 / 0x00118200 0x00007E00 * 0x00120000 0x00048000 ?
現在,「指定為--fill-mode
選項參數的類型字元」是緊接在 之後出現的字元--fill-mode=
。
所以如果mapfile
就像上面的例子並且你使用
--fill-mode=-
,則ddrescue
只會填滿0x00000200
從該位置開始的區塊0x00117000
;--fill-mode=?-*
(小心 shell 通配符,雖然不太可能,但仍然如此),然後ddrescue
將填充標有?
,-
或 的片段*
。