¿La mejor manera de copiar todos los archivos, ignorando los errores?


36

Tengo un HD parcialmente dañado que no puede ser reparado por la Utilidad de Discos, pero que se puede montar de solo lectura haciendo que los datos estén accesibles.

Estoy tratando de copiar todos los contenidos recuperables en un disco duro de repuesto, pero cada método que intento falla cuando se encuentra un error, dejando los archivos restantes sin copiar.

Buscador: falla. SuperDuper: falla. Ídem (comando de terminal): falla.

Esperaba que Ditto hiciera el truco, la página de manual de Ditto dice:

ídem devuelve 0 si todo se copia, de lo contrario no es cero. Ídem casi nunca se rinde, prefiriendo informar errores en el camino. Los mensajes de diagnóstico se imprimirán con el error estándar.

He enviado un error a Apple para que no funcione como se anuncia.

¿Alguna otra idea?


Consulte stackoverflow.com/a/27637277 en lugar de las --ignore-errorsrespuestas a continuación.
espía

Respuestas:


28

Lo uso cp -Rfv sourcefile destinationfilecon éxito de forma bastante regular.

cp = copia

R = mantiene jerarquías de archivos

f = si no se puede abrir un archivo de destino existente, elimínelo e intente nuevamente

v = modo detallado, muestra los archivos transferidos a medida que avanza

archivo de origen = datos que desea copiar

archivo de destino = directorio / unidad que desea copiar


3
¿Cómo ignora esto los errores en la unidad fuente (vea la pregunta)?
nohillside

1
@patrix No "ignora" los errores, pero la bandera "f" los fuerza, solo copia los datos intactos. Mientras observa el progreso (gracias a la bandera detallada) verá resultados a lo largo de las líneas de "datos no copiados debido a un error de E / S" cuando encuentra datos incorrectos. Una vez que se muestra el error, pasa al siguiente archivo sin ninguna entrada del usuario. El escenario del póster suena extremadamente similar a las docenas de veces que he usado este comando para recuperar datos de discos / volúmenes flakey.
Mr Rabbit

¿Hay alguna forma de copiar un archivo que falla con algún postfix, para que se puedan encontrar mejor todos los archivos faltantes?

1
Del cpmanual BSD (macOS): "En modo -R, cp continuará copiando incluso si se detectan errores".
Matt

Muchas gracias por esto. Actualmente estoy tratando de recuperar todo lo que pueda de un HDD que falla, aunque no me importan los datos corruptos, no perderé el tiempo tratando de arreglarlo, sino simplemente eliminarlo. Este es un método de trabajo para lograr esto rápidamente. Estoy canalizando los errores en un archivo de registro, que puedo analizar más tarde para eliminar los archivos truncados con errores de lectura, agregando lo siguiente:2> error.log
0x01

23

Pruebe Gnu ddrescue : es un programa de recuperación de datos que realiza copias basadas en bloques con recuperación de datos corruptos durante las operaciones de copia. Puede obtenerlo para OS X si está utilizando Homebrew escribiendo en una ventana de Terminal:

brew install ddrescue

Una guía sobre arstechnica describe cómo rescatar un disco fallido usando ddrescue. Asegúrese de leer la guía, ya que contiene información útil. Aquí hay una idea general de cómo llegar allí.

  • Localice la unidad usando diskutil list. La columna del identificador es lo que está buscando:

    /dev/disk1
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *750.2 GB   disk1
       1:                        EFI EFI                     209.7 MB   disk1s1
       2:                  Apple_HFS Macintosh HD 2          80.0 GB    disk1s2
       3:                  Apple_HFS Home                    509.1 GB   disk1s3
    
  • Desmonta el disco en cuestión:

    diskutil unmount /dev/disk1s3    
    
  • Inicie una operación de rescate del disco en una imagen. Asegúrese de que la ubicación de Rescue.dmgsea ​​reemplazada por la ubicación deseada.

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • Recupere la imagen en una nueva unidad:

    sudo /usr/local/bin/ddrescue --force -v -c 4096 Rescue.dmg /dev/disk2s0 recovery.log
    

Tenga en cuenta que también debe leer el manual de ddrescue para informarse sobre las opciones disponibles ejecutando man ddrescue.


1
Para agregar al aviso del moderador: esta podría ser una muy buena respuesta al problema, pero necesita más trabajo. ¿Puede agregar algunos ejemplos de comandos ddrescue para dispositivos OS X a la respuesta? Lo arreglé un poco con el tipo de antecedentes e información que nos gusta ver en las respuestas aquí. Si haces eso, estoy seguro de que sería una gran respuesta.
Ian C.

Utilicé ddrescue con éxito hace uno o dos años, para copiar datos de un disco dañado. Pasó tal vez 200 errores, y finalmente logró leer aproximadamente la mitad de esos. El disco copiado resultante se introdujo en diskwarrior y el resultado fue quizás daño a 10 archivos de aproximadamente 1 millón.
Pittsburgh Mike

7

Me gusta usar rsyncpara copiar archivos de una fuente dañada a un destino funcional:

rsync -auv --delete --ignore-errors /path/to/source/ /path/to/destination/

Dónde:

-a = "modo de archivo" = se repite en directorios, copia enlaces simbólicos como enlaces simbólicos, conserva permisos, tiempos, grupos y archivos especiales, también conserva propietario (cuando propietario = root) y dispositivos (cuando propietario = root)

-u= omite el archivo en origen si su copia correspondiente en destino es más reciente

-v = salida detallada

--delete= los archivos en el destino que no existen en la fuente se eliminarán

--ignore-errors = elimina un archivo / directorio en caso de error de E / S durante el proceso de copia


4

Esta sugerencia de Macworld sugiere usar dd para hacer una copia bit por bit (ignorando los errores) y luego montar la imagen resultante en Finder para recuperar sus archivos. No lo he probado, pero parece que podría funcionar.


Esto es bueno, porque desea que sus datos se borren rápidamente si ese disco es duff. De esta forma, obtienes un bloque para la copia en bloque, incluidos los errores, que luego estarán disponibles para inspección a tu antojo sin preocuparte de que el disco muera antes de que lo quites todo. Realizaré una operación, de una manera agradable y ordenada, de principio a fin, sin pasar de un fragmento de archivo a otro, lo que será un trabajo más duro en la unidad que creó la copia DD.
stuffe

3
ddrescue es mejor que dd en esto, ya que volverá a intentar las secciones malas una y otra vez durante todo el tiempo que lo deje en ejecución; vea esta respuesta anterior donde el OP eliminó sus datos después de un par de semanas de trabajo (!). Tenga en cuenta que este es un buen enfoque si el hardware HD falla, pero no hace nada para corregir la corrupción de la estructura del volumen, que solo se copia junto con los archivos.
Gordon Davisson

3

Puede considerar usar el ddcomando para realizar una copia bloque por bloque de su HDD corrupto a su nuevo HDD.

Suponiendo que su nuevo HDD ( /dev/disk2) sea de igual o mayor tamaño que su HDD corrupto ( /dev/disk1), puede emitir:

dd if=/dev/disk1 of=/dev/disk2 bs=4096 conv=notrunc,noerror

Blockized @ 4k, no trunca ningún bloque de datos, ignora todos los errores

Para encontrar los nombres de los dispositivos, mountprimero ejecute desde la Terminal.


0

El dittocomando debería funcionar, lo usaría dittojunto con la -vopción para detallado para que pueda ver exactamente qué le da un error de lo que copia.


3
Según el autor de la pregunta dittono funciona. ¿Por qué crees que lo hace?
nohillside

op está preguntando acerca de las alternativas aditto
juniorRubyist

0

Puede intentar ejecutar SuperDuper e ignorar los archivos con errores io, si son solo unos pocos y usa la función de actualización inteligente que es una forma bastante efectiva de eliminar la mayoría de los datos. (Creo que el comando dd sería preferible si puedes hacer eso).

Pasos:

  1. Seleccione 'respaldar todos los archivos' como estrategia de respaldo
  2. En las opciones, seleccione 'actualización inteligente' (de lo contrario, este proceso tomará un tiempo ridículamente largo si tiene más de uno o dos errores, necesitará la versión paga para esto)
  3. Ejecuta la copia
  4. Cuando la copia falla, lea los registros para encontrar qué archivo no se pudo copiar, luego presione ok / close para volver a la pantalla 'inicio'
  5. Seleccione 'editar guión de copia seleccionado' del menú desplegable de uso
  6. Bajo los comandos de Script, agregue el archivo que no se pudo copiar, debería decir 'ignorar' una vez que se haya agregado a la lista de archivos
  7. Guarde su script con algún nombre (por ejemplo, ignore-corrupted-files)
  8. Seleccione su secuencia de comandos y repita los pasos 3 a 7 tantas veces como sea necesario para ignorar todos los archivos dañados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.