Gddrescue solicita un archivo de mapa pero se niega a crear uno

Gddrescue solicita un archivo de mapa pero se niega a crear uno

Estoy usandoEjemplo 3 de la documentación de gddrescue aquípara escribir en cero un disco y forzar la reasignación de los sectores defectuosos pendientes.

La misma documentación establece en otros lugares que:

Si el archivo de mapa no existe, ddrescue lo creará.

Pero cuando ejecuto el Ejemplo 3 casi palabra por palabra:

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

... me sale el error:

ddrescue: El archivo de mapa 'mapfile.txt' no existe o no es legible.

Si corro:

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

...Recibo una versión truncada del mismo error:

ddrescue: El archivo de mapa '/cygdrive/b/users/user/desktop/mapfile.txt' no existe o no existe

Lo estoy usando gddrescueen Windows 7, a través de Cygwin.

¿Es esto un error con la implementación de Cygwin ddo me falta algo?

Respuesta1

No es un error. Es lo mismo en mi Kubuntu. Creo que es por la --fill-modeopción que usaste. Este modo tienesu propio capítulo de la documentación. Lo que te falta es esta parte [el énfasis es mío]:

Cuando ddrescuese invoca con la --fill-modeopción opera en “modo relleno”, que esdiferentedesde el "modo de rescate" predeterminado. Es decir, si usas la --fill-modeopción, ddrescueno rescata nada. Sólo se llena con datos leídos de infilelos bloques outfilecuyo carácter de estadodemapfilecoincide con uno de los caracteres de tipo especificados como argumento de la --fill-modeopción.

Este medio --fill-modenecesita un ya existente mapfile.


¿Qué son los caracteres de estado y los caracteres de tipo aquí?

La frase "carácter de estatus de mapfile" debe entenderse de acuerdo coneste fragmento:

El carácter de estado es uno de estos:

Carácter que significa
'?' bloque no probado
'*' bloque fallido no recortado
'/' bloque fallido no raspado
'-' bloque fallido sector(es) defectuoso(s)
'+' bloque terminado

Y aquí hay un archivo de mapa de ejemplo:

# 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  ?

Ahora "los caracteres de tipo especificados como argumento de la --fill-modeopción" son caracteres que aparecen justo después --fill-mode=.

Entonces, si es mapfilecomo el ejemplo anterior y usas

  • --fill-mode=-, entonces ddrescuesolo llenará 0x00000200bloques que comiencen en la posición 0x00117000;
  • --fill-mode=?-*(tenga cuidado con el shell globbing, es poco probable, pero aún así), luego ddrescuellenará los fragmentos marcados con ?, -o *.

información relacionada