Gddrescue pede um arquivo de mapa mas se recusa a criar um

0

Estou usando o Exemplo 3 da documentação do gddrescue aqui para zero gravar um disco e forçar setores ruins pendentes a serem realocados.

A mesma documentação afirma em outro lugar que:

If mapfile does not exist, ddrescue will create it.

Mas quando executo o Exemplo 3 quase-textual:

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

... recebo o erro:

ddrescue: Mapfile 'mapfile.txt' does not exist or is not readable.

Se eu correr:

ddrescue -vvvv --fill-mode=- -f --synchronous /dev/zero /dev/sdc -m /cygdrive/b/users/user/desktop/mapfile.txt

... recebo uma versão truncada do mesmo erro:

ddrescue: Mapfile '/cygdrive/b/users/user/desktop/mapfile.txt' does not exist or is not

Estou usando gddrescue no Windows 7, por meio do Cygwin.

Isso é um bug com a implementação do Cygwin de dd , ou estou faltando alguma coisa?

    
por Hashim 13.04.2018 / 00:16

1 resposta

1

Não é um bug. É o mesmo no meu Kubuntu. Eu acho que é por causa da opção --fill-mode que você usou. Este modo tem seu próprio capítulo da documentação . O que você está perdendo é essa parte [ênfase minha]:

When ddrescue is invoked with the --fill-mode option it operates in "fill mode", which is different from the default "rescue mode". That is, if you use the --fill-mode option, ddrescue does not rescue anything. It only fills with data read from infile the blocks of outfile whose status character from mapfile coincides with one of the type characters specified as argument to the --fill-mode option.

Isso significa que --fill-mode precisa de um mapfile já existente.

What are status characters and type characters here?

A frase "caractere de status de mapfile " deve ser entendida de acordo com este fragmento :

The status character is one of these:

Character Meaning
'?' non-tried block
'*' failed block non-trimmed
'/' failed block non-scraped
'-' failed block bad-sector(s)
'+' finished block

And here is an example 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  ?

Agora, "digite os caracteres especificados como argumento para a opção --fill-mode " são caracteres que aparecem logo após --fill-mode= .

Então, se o mapfile for como o exemplo acima e você usar

  • --fill-mode=- , então ddrescue preencherá apenas 0x00000200 blocos começando na posição 0x00117000 ;
  • --fill-mode=?-* (cuidado com a globalização de casca, improvável, mas ainda), então ddrescue preencherá fragmentos marcados com ? , - ou * .
por 23.04.2018 / 06:50