Я использую Пример 3 из документации gddrescue, чтобы записать диск на ноль и принудительно перераспределить ожидающие сбойные сектора на нем.

В той же документации говорится, что:

Если mapfile не существует, ddrescue создаст его.

Но когда я запускаю Пример 3 почти дословно:

ddrescue -vvvv --fill-mode=- -f --synchronous /dev/zero /dev/sdc mapfile.txt

...Я получаю ошибку:

ddrescue: Mapfile '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' не существует или не существует

Я использую gddrescue на Windows 7, через Cygwin.

Это ошибка в реализации Cygwin dd , или я что-то упустил?

1 ответ1

1

Не ошибка То же самое на моем Kubuntu. Я думаю, что это из-за --fill-mode вы использовали. Этот режим имеет свою главу документации. Чего вам не хватает, так это части [выделено мной]:

Когда ddrescue вызывается с параметром --fill-mode он работает в "режиме заполнения", который отличается от "режима восстановления" по умолчанию. То есть, если вы используете --fill-mode , ddrescue ничего не спасет. Он заполняет только данные, прочитанные из infile из блоков outfile чей символ статуса из mapfile совпадает с одним из символов типа, указанных в качестве аргумента для --fill-mode .

Это означает, что --fill-mode нужен уже существующий mapfile .


Что такое статусные символы и тип символов здесь?

Фраза «символ статуса из 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 заполнит фрагменты, отмеченные знаком ? , - или * .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .