¿Cómo soluciono un error de entrada / salida usando dd?

13

Hola, estoy tratando de arreglar mi sistema Windows 7 con un disco duro roto, pero todavía se está ejecutando.

Estoy intentando copiar todos los datos a una nueva unidad para reinstalar Windows 7. Unidad llamada SQSERVICE.

No puedo copiar nada, ver a continuación:

$ sudo dd if=/dev/sdc1 of=/dev/sda1
dd: reading `/dev/sdc1': Input/output error
11233976+0 records in
11233976+0 records out
5751795712 bytes (5.8 GB) copied, 187.731 s, 30.6 MB/s

¿Cómo arreglar este "error de entrada / salida"?

Erazer
fuente
1
@Gertvddijk gracias por solucionar mi problema de ortografía, soy de países bajos y todavía estoy aprendiendo inglés.
Erazer

Respuestas:

15

Lo dijiste tú mismo: tu disco está roto. Puede intentarlo ddrescue, puede ser capaz de evitar el camino roto. Sin embargo, tenga cuidado, ya que perderá datos.

Restaurar desde la copia de seguridad será más fácil :)

El uso correcto de ddrescuees el siguiente:

sudo apt-get install gddrescue
sudo ddrescue /dev/sdc1 /dev/sda1

o si desea canalizar stdouta la herramienta de monitoreo de progreso:

sudo ddrescue /dev/sdc1 /dev/sda1 | pv
Dennis Kaarsemaker
fuente
Sí, dije eso, pero la restauración desde la copia de seguridad está en esa unidad ... y esta unidad solo tiene un problema de sector, ¿cómo puedo usar ese comando? im usuario de Linux acaba de novato ..
Erazer
2
¿Entonces su copia de seguridad está en la misma unidad que la unidad que está creando? boggles
Dennis Kaarsemaker
1
bueno, la misma unidad sí pero no en la misma partición bueno, soy un poco estúpido: '(copia de seguridad no es nada importante
Erazer
6

No sé si esto es útil para alguien, pero si encontré esta página en mi búsqueda, tal vez ayude a alguien (que no sea el OP que con suerte resolvió su problema hace meses).

ddrescue puede ser la mejor opción en este caso, para la recuperación de datos (diferente de "arreglar" el error / disco como estaba redactada la pregunta original), como sugirió Dennis.

Alternativamente, también puede montar el disco y copiar los archivos. Esto es MUCHO más rápido si hay mucho espacio vacío, o si solo quieres algunos archivos en particular. ADVERTENCIA: hecho desde una máquina Linux, pierde todos los atributos extendidos, como los permisos de archivos, por lo que es una muy mala elección para los archivos del sistema operativo, pero tolerable para los archivos de usuario. Hacerlo desde Windows debería preservarlos, pero podría no manejar los errores sin problemas, posiblemente haciendo que sea muy lento.

Otra opción para realmente "arreglar" los sectores, no solo evitarlos, es reasignar los sectores defectuosos. Si conoce el número de sector (en su caso, 11233976 suponiendo que el tamaño de su bloque en dd y el tamaño del sector son 512), simplemente ejecute esto y vuelva a ejecutarlo para cada nuevo sector defectuoso que encuentre:

hdparm –write-sector 11233976 –yes-i-know-what-i-am-doing /dev/sdb

ADVERTENCIA: Esto destruirá los datos en ese sector. Así que asegúrese de saber realmente lo que está haciendo. Si este sector no se puede leer, sobrescribirlo detendrá los errores, pero significará que el sector contendrá basura, posiblemente corrompiendo un archivo importante.

Consulte esto para obtener más información: http://www.sjvs.nl/forcing-a-hard-disk-to-reallocate-bad-sectors/

Y si su disco tiene un gran número (quizás miles) de sectores defectuosos (ya sea como Current_Pending_Sector, Offline_Uncorrectable o Reallocated_Sector_Ct), o si es nuevo y todavía está en garantía, o si el número aumenta constantemente con el tiempo, entonces debe reemplazar el disco de todos modos. No dejes que te digan que la reasignación corrige el disco. Solo repara los sectores defectuosos conocidos y consume los sectores reservados para la reasignación. Si el disco es propenso a desarrollar más sectores defectuosos, el problema seguirá volviendo, corrompiendo cada vez algunos datos.

Peter
fuente
0

Si bien algunas partes del disco están rotas, aún puede copiar partes buenas del disco.

$ dd --help
...
 noerror   continue after read errors
...
sudo dd if=/dev/sdc1 of=/dev/sda1 conv=noerror
Max A.
fuente