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

Tengo un disco duro parcialmente dañado que no puede repararse con la Utilidad de Discos, pero que puede montarse en modo de solo lectura para que los datos que contiene sean accesibles.

Estoy tratando de copiar todo el contenido recuperable en un HD de repuesto, pero todos los métodos que intento fallan cuando se encuentra un error, dejando los archivos restantes sin copiar.

  • Buscador - falla
  • SuperDuper - Falla
  • Ditto (comando de terminal) - Falla

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

ditto devuelve 0 si todo se copia, de lo contrario, no es cero. ditto casi nunca se da por vencido, prefiriendo informar errores en el camino. Los mensajes de diagnóstico se imprimirán con un error estándar.

He enviado un error a Apple re ídem que no funciona como se anuncia.

¿Alguna otra idea?

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

Respuestas (8)

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

  • cp = copiar

  • R = mantiene las jerarquías de archivos, también en modo -R, cp continuará copiando incluso si se detectan errores).

  • f = si no se puede abrir un archivo de destino existente, elimínelo y vuelva a intentarlo

  • p = preservar las marcas de tiempo de modificación del archivo

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

  • sourcefile = datos que desea copiar

  • archivo de destino = directorio/unidad en la que desea copiar


Si no se puede copiar un archivo debido a un error, el trabajo continuará y debería ver un registro como:

cp: sourcefile/someBadFile.txt: Input/output error

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á usando Homebrew escribiendo en una ventana de Terminal:

brew install ddrescue

Una guía en 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 sobre cómo llegar allí.

  • Ubique la unidad usando diskutil list. La columna de 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
    
  • Desmontar 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.dmgse reemplace con 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
    

Se recomienda leer también el manual de ddrescue para informarse sobre las opciones disponibles al ejecutar man ddrescue.

Parece que debería ser la respuesta seleccionada, ¿por qué no lo es? ¿La desventaja de esto es que necesitas homebrew para ddrescue?

Me gusta usar rsyncpara copiar archivos de una fuente corrupta 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= salta el archivo en origen si su copia correspondiente en destino es más nueva

-v= salida detallada

--delete= los archivos en el destino que no existen en el origen serán eliminados

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

Esta sugerencia de Macworld sugiere usar dd para hacer una copia bit a 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.

Podría considerar usar el ddcomando para realizar una copia bloque por bloque desde su HDD corrupto a su nuevo HDD.

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

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

blockized @ 4k, no trunque ningún bloque de datos, ignore todos los errores

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

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 obtener la mayoría de los datos. (Creo que el comando dd sería preferible si puede hacerlo).

Pasos:

  1. Seleccione 'copia de seguridad de todos los archivos' como estrategia de copia de seguridad
  2. En las opciones, seleccione 'actualización inteligente' (de lo contrario, este proceso llevará un tiempo ridículamente largo si tiene más de uno o dos errores, necesitará la versión paga para esto)
  3. Ejecutar la copia
  4. Cuando la copia falla, lea los registros para encontrar qué archivo no se pudo copiar, luego presione Aceptar/Cerrar para volver a la pantalla de "inicio".
  5. Seleccione 'editar script de copia seleccionado' en el menú desplegable de uso
  6. En los comandos de script, agregue el archivo que no se pudo copiar, debe decir "ignorar" una vez que se agregue a la lista de archivos
  7. Guarde su secuencia de comandos con algún nombre (por ejemplo, ignorar archivos corruptos)
  8. Seleccione su secuencia de comandos y repita los pasos 3 a 7 tantas veces como sea necesario para ignorar todos los archivos corruptos.

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

Si aún se puede acceder a su unidad y puede ver la jerarquía de los archivos, pero el proceso de copia se detiene debido a errores, puede usar el Unstoppable Copierprograma (solo para Windows).

http://www.roadkil.net/program.php?ProgramID=29

Ese es un programa solo para Windows, y el OP está solicitando soluciones para Mac (¡en un foro específico para Mac!)