hard-disk – ¿Cómo ignorar los errores de escritura al poner a cero un disco?

Pregunta:

Supongamos que desea poner a cero un disco duro defectuoso. Quiere sobrescribir tanto como sea posible con ceros. Lo que no desea es: el proceso se interrumpe con el primer error de escritura. ¿Como hacer eso?

AFAICS, plain dd solo proporciona una opción para ignorar los errores de lectura. Por lo tanto, algo como

dd if=/dev/zero of=/dev/disk/by-id/lousy-vendor-123 bs=128k

no es suficiente.

ddrescue parece ser mejor para ignorar errores, pero ¿cuál sería la línea de comando óptima con él?

Mi intento con GNU ddrescue:

ddrescue --verbose --force --no-split /dev/zero /dev/disk/by-id/lousy-vendor-123

Respuesta:

Prefiero badblocks en modo de escritura destructiva para esto. Escribe, continúa haciéndolo cuando encuentra errores y finalmente le dice dónde estaban esos errores, y esta información puede ayudarlo a decidir qué hacer a continuación (Will It Blend?).

# badblocks -v -b 4096 -t random -o badblocks.txt -w /dev/destroyme
Checking for bad blocks in read-write mode
From block 0 to 2097151
Testing with random pattern: done
Reading and comparing: done
Pass completed, 52105 bad blocks found. (0/52105/0 errors)

Y la lista de bloqueo:

# head badblocks.txt
2097000
2097001
2097002
2097003
2097004

Y lo que queda en el disco después:

# hexdump -C /dev/destroyme
00000000  be e9 2e a5 87 1d 9e 61  e5 3c 98 7e b6 96 c6 ed  |.......a.<.~....|
00000010  2c fe db 06 bf 10 d0 c3  52 52 b8 a1 55 62 6c 13  |,.......RR..Ubl.|
00000020  4b 9a b8 d3 b7 57 34 9c  93 cc 1a 49 62 e0 36 8e  |K....W4....Ib.6.|

Tenga en cuenta que no son datos realmente aleatorios: el patrón es repetitivo, por lo que si omitió 1MiB , volvería a ver el mismo resultado.

También intentará verificar volviendo a leer los datos, por lo que si tiene un disco que dice estar escribiendo correctamente pero devuelve datos incorrectos en la lectura, también encontrará esos errores. (Asegúrese de que ningún otro proceso escriba en el disco mientras se ejecuta badblocks para evitar falsos positivos).

Por supuesto, con un disco muy roto, esto puede llevar demasiado tiempo: no hay ningún código que lo haga omitir por completo las áreas defectuosas. La única forma de lograrlo con badblocks sería usando un tamaño de bloque mucho mayor.

No estoy seguro de si ddrescue hace mejor; se supone que debe hacerlo en la otra dirección (recuperar la mayor cantidad de datos lo más rápido posible). Puede hacerlo manualmente para dd / ddrescue / badblocks especificando el primer / último bloque …

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım