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 gddrescue
en Windows 7, a través de Cygwin.
¿Es esto un error con la implementación de Cygwin dd
o me falta algo?
Respuesta1
No es un error. Es lo mismo en mi Kubuntu. Creo que es por la --fill-mode
opció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
ddrescue
se invoca con la--fill-mode
opción opera en “modo relleno”, que esdiferentedesde el "modo de rescate" predeterminado. Es decir, si usas la--fill-mode
opción,ddrescue
no rescata nada. Sólo se llena con datos leídos deinfile
los bloquesoutfile
cuyo carácter de estadodemapfile
coincide con uno de los caracteres de tipo especificados como argumento de la--fill-mode
opción.
Este medio --fill-mode
necesita 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 terminadoY 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-mode
opción" son caracteres que aparecen justo después --fill-mode=
.
Entonces, si es mapfile
como el ejemplo anterior y usas
--fill-mode=-
, entoncesddrescue
solo llenará0x00000200
bloques que comiencen en la posición0x00117000
;--fill-mode=?-*
(tenga cuidado con el shell globbing, es poco probable, pero aún así), luegoddrescue
llenará los fragmentos marcados con?
,-
o*
.