Verifique la corrección de los archivos copiados

14

Después de copiar, digamos más de 50 GB (30,000 archivos que incluyen diferentes formatos) de archivos desde un disco duro interno a un disco externo, ¿hay alguna forma de averiguar si todo se ha copiado correctamente? Además, si me detengo cancelando la operación y luego digo fusionar al continuar la operación, ¿será correcta la corrección?

Podría usar aplicaciones como, back-in-timepero soy muy selectivo al copiar archivos y para la próxima vez tengo la intención de usar la copyoperación y decir en mergelugar de replace. ¿Es aconsejable al copiar una gran cantidad de archivos?

Chethan S.
fuente
2
Puede encontrar una respuesta aquí .
Takkat

Respuestas:

16

Estoy usando hashdeep para verificar copias de seguridad / restauraciones y ocasionalmente para verificar la corrupción del sistema de archivos en un RAID.

La velocidad depende de las funciones hash que use (algunas requieren más CPU que otras), así como la velocidad de lectura de sus discos. En mi sistema hashdeeppuedo procesar o verificar alrededor de 1 TB / hora con md5 y 300 MB / s de velocidad de lectura.


Ejemplo sobre el cálculo de sumas de verificación y su almacenamiento en un archivo:

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt

Parámetros:

  • r - recursivo
  • l - usar caminos relativos
  • c - especificar la función hash
  • . - recursivo comenzando en el directorio actual
  • > - redirige la salida al archivo especificado

Ver la página del manual .


Ejemplo para verificar sumas de verificación e imprimir una lista de diferencias:

$ cd /mnt/my-backup
$ hashdeep -ravvl -k ~/checksums.txt .
hashdeep: Audit passed
          Files matched: 40914
Files partially matched: 0
            Files moved: 0
        New files found: 0
  Known files not found: 0

Parámetros:

  • a - auditoría (comparar con la lista de sumas de verificación conocidas)
  • v- detallado (para obtener una lista de desajustes, múltiples vs significa más detallado)
  • k - archivo de hashes conocidos

Tenga en cuenta que a partir de marzo de 2016 hashdeepparece estar abandonado .

jg-faustus
fuente
14

Parece la tarea perfecta para rsync . Rsync está comparando y copiando diferencias.

La rsyncutilidad apareció por primera vez en mi mente cuando vi tu pregunta. Hacer algo como a continuación podría mostrar rápidamente qué archivos están en el directorio apero no en b:

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

Esta es una buena opción porque también puede comparar el contenido de los archivos para asegurarse de que coincidan. rsyncEl algoritmo delta está optimizado para este tipo de casos de uso. Luego, si desea hacer bcoincidir el contenido de a, simplemente puede eliminar la -nopción para realizar la sincronización real.

Algunas preguntas relacionadas:

ddeimeke
fuente
1
rsync es definitivamente la herramienta para este trabajo, pero no compara y copia diferencias, per se. Compara los archivos usando tamaños y hashes.
Justin Force
@JustinForce ¿Usa el tamaño? Claro, diferentes tamaños aseguran que el archivo no sea exactamente el mismo, pero rsync es muy versátil, opcionalmente puede confiar en los metadatos (como el tiempo) para evitar volver a leer todos los archivos. Al copiar a través de la red, calcula un hash continuo para detectar con precisión las partes comunes para evitar transferirlas, pero en el disco local los hashes predeterminados no juegan este papel (si se usan). Incluso puede pedirle que confíe en que un destino más corto ya tiene contenido correcto y solo necesita agregarse, aunque sigamos con el tema.
Stéphane Gourichon
0

En "si todo se ha copiado correctamente", utilizo un cp (o mv) modificado que incluye suma de comprobación (opcionalmente almacenada en xattr, por lo tanto, solo debe calcularse una vez para la fuente) http://sourceforge.net/projects / crcsum /

Hans
fuente
1
Aunque su respuesta es 100% correcta, también es casi imposible de implementar para un usuario principiante. Por lo tanto, edite su respuesta e incluya los pasos sobre cómo descargar, compilar, instalar y desinstalar crccpen su respuesta. ;-) Siempre puede dejar el enlace en la parte inferior de su respuesta como fuente de su material ...
Fabby