18 votos

¿Cómo puedo solucionar un error de entrada/salida utilizando dd?

Hola, estoy intentando arreglar mi sistema Windows 7 con un disco duro roto, pero sigue funcionando.

Estoy intentando copiar todos los datos a un nuevo disco para reinstalar Windows 7. El disco se llama SQSERVICE.

No puedo copiar en absoluto - ver abajo:

$ sudo dd if=/dev/sdc1 of=/dev/sda1
dd: leyendo `/dev/sdc1': error de entrada/salida
11233976+0 registros dentro
11233976+0 registros fuera
5751795712 bytes (5.8 GB) copiados, 187.731 s, 30.6 MB/s

¿Cómo solucionar este error de "Entrada/salida"?

1 votos

@Gertvddijk gracias por corregir mi problema de ortografía, soy de los Países Bajos y aún estoy aprendiendo inglés.

19voto

Clyde Puntos 3881

Tú mismo lo dijiste: tu disco está dañado. Puedes intentar ddrescue, puede ser capaz de trabajar alrededor de la ruta rota. Sin embargo, ten cuidado, ya que perderás datos.

¡Restaurar desde una copia de seguridad será más fácil! :)

El uso correcto de ddrescue es el siguiente:

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

o si quieres redirigir la salida estándar a la herramienta de monitoreo de progreso:

sudo ddrescue /dev/sdc1 /dev/sda1 | pv

0 votos

Sí, dije eso, pero al restaurar desde la copia de seguridad, está en ese disco.. y este disco sólo tiene un problema de sector, ¿cómo puedo utilizar ese comando? Soy solo un usuario novato de Linux.

2 votos

¡¿Entonces tu copia de seguridad está en el mismo disco que estás respaldando ?! desconcertante

1 votos

Bien, la misma unidad sí pero no en la misma partición. bueno, soy un poco tonto :'( la copia de seguridad no es importante en absoluto

8voto

Sami Laine Puntos 193

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 probablemente 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 se formuló la pregunta originalmente), como sugirió Dennis.

Alternativamente, también podrías 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 particulares. ADVERTENCIA: hecho desde una máquina Linux, esto pierde todos los atributos extendidos, como los permisos de archivo, por lo que es una opción muy mala para archivos del sistema operativo, pero tolerable para archivos de usuario. Hacerlo desde Windows debería preservar esos atributos, pero podría no manejar los errores de manera suave, posiblemente haciendo que vaya muy lento.

Otra opción para realmente "arreglar" los sectores, no solo pasarlos por alto, es reasignar los sectores defectuosos. Si conoces el número del sector (en tu caso, 11233976 asumiendo tu tamaño de bloque en dd, y el tamaño del sector es 512), simplemente ejecuta esto, y ejecuta nuevamente por cada nuevo sector defectuoso que encuentres:

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

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

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

Y si tu disco tiene un gran número (quizás miles) de sectores defectuosos (vistos como Current_Pending_Sector, Offline_Uncorrectable o Reallocated_Sector_Ct), o si es nuevo y aún está en garantía, o si el número aumenta consistentemente con el tiempo, entonces deberías reemplazar el disco de todos modos. No dejes que te digan que la reasignación arregla el disco. Solo arregla los sectores defectuosos conocidos y consume los sectores reservados para reasignación. Si el disco tiende a desarrollar más sectores defectuosos, el problema seguirá regresando, corrompiendo datos cada vez.

3voto

Max A. Puntos 131

Mientras algunas partes del disco están dañadas, aún puedes copiar las partes buenas del disco.

$ dd --help
...
 noerror   continuar después de errores de lectura
...

sudo dd if=/dev/sdc1 of=/dev/sda1 conv=noerror

1voto

hinneLinks Puntos 317

Tuve un disco con errores de E/S y, además, el disco se desconectaba después de unos minutos de lectura, pero luego volvía después de unos segundos, por eso también uso disk/by-uuid ya que el nombre del dispositivo cambió después de esto. Amplié la respuesta de Dennis y esta para que se ejecute indefinidamente:

#!/bin/bash
while [ true ]
do
    echo "start ddrescue"
    ddrescue -O  --retry-passes=3 /dev/disk/by-uuid/ /media//data.img  /media/data_ddrescue_map
    echo "ddrescue end, sleep 30"
    sleep 30
done

Esto utilizará ddrescue con un archivo de mapa, de esta manera puedes reiniciar el programa y ddrescue continuará desde donde estaba antes. Recuperará los datos a un archivo .img.

El parámetro -O significa "reabrir el archivo de entrada después de cada error de lectura".

Cada vez que falla, el script duerme 30 segundos y luego vuelve a intentarlo. Después de casi un día llegué al 99% Rescued, después de eso se detuvo. Dejé que el disco se enfriara y lo intenté de nuevo, luego llegué al 100%.

Advertencia: El script se ejecutará siempre, a menos que lo detengas tú mismo cuando estés satisfecho con los resultados.

Con estos comandos puedes montar la imagen creada para ver los archivos:

sudo mkdir /media/data-image
sudo mount -o loop,ro /media//data.img /media/data-image

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X