Gddrescue запрашивает файл карты, но отказывается его создать

Gddrescue запрашивает файл карты, но отказывается его создать

я используюПример 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' не существует или не

Я использую gddrescueWindows 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заполнит фрагменты, отмеченные ?, -или *.

Связанный контент