estou a usarExemplo 3 da documentação do gddrescue aquigravar em zero um disco e forçar a realocação de setores defeituosos pendentes nele.
A mesma documentação afirma em outro lugar que:
Se o mapfile não existir, o ddrescue irá criá-lo.
Mas quando executo o Exemplo 3 quase literalmente:
ddrescue -vvvv --fill-mode=- -f --synchronous /dev/zero /dev/sdc mapfile.txt
... recebo o erro:
ddrescue: Mapfile 'mapfile.txt' não existe ou não é legível.
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' não existe ou não existe
Estou usando gddrescue
no Windows 7, via Cygwin.
Isso é um bug com a implementação do Cygwin dd
ou estou faltando alguma coisa?
Responder1
Não é um bug. É o mesmo no meu Kubuntu. Acho que é por causa da --fill-mode
opção que você usou. Este modo temseu próprio capítulo da documentação. O que está faltando é esta parte [ênfase minha]:
Quando
ddrescue
é invocado com a--fill-mode
opção ele opera em "modo preenchimento", que édiferentedo "modo de resgate" padrão. Ou seja, se usar a--fill-mode
opção,ddrescue
não resgata nada. Ele apenas preenche os dados lidos dosinfile
blocosoutfile
cujo caractere de statusdemapfile
coincide com um dos caracteres de tipo especificados como argumento para a--fill-mode
opção.
Isso significa --fill-mode
que precisa de um arquivo mapfile
.
O que são caracteres de status e caracteres de tipo aqui?
A expressão “caractere de status de mapfile
” deve ser entendida de acordo comeste fragmento:
O caractere de status é um destes:
Personagem que significa
'?' bloco não testado
'*' bloco com falha não aparado
'/' bloco com falha não raspado
'-' bloco com falha setor(es) defeituoso(s)
'+' bloco finalizadoE aqui está um exemplo de 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, "caracteres de tipo especificados como argumento para a --fill-mode
opção" são caracteres que aparecem logo após --fill-mode=
.
Então, se mapfile
for como o exemplo acima e você usar
--fill-mode=-
, entãoddrescue
preencherá apenas0x00000200
blocos começando na posição0x00117000
;--fill-mode=?-*
(cuidado com o globbing do shell, improvável, mas ainda assim),ddrescue
preencherá os fragmentos marcados com?
,-
ou*
.