я используюПример 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: Файл карты '/cygdrive/b/users/user/desktop/mapfile.txt' не существует или не
Я использую gddrescue
Windows 7 через Cygwin.
Это ошибка реализации 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=?-*
(остерегайтесь подстановки оболочки, маловероятно, но все же), затемddrescue
заполнит фрагменты, отмеченные?
,-
или*
.