¿Hay un comando copiar y verificar en Ubuntu / Linux?

23

Respaldo todas mis fotos digitales en un par de lugares. He estado usando el comando cp, pero, dado el valor personal, he comenzado a preguntarme si hay una forma más confiable. No soy ajeno a Linux, Bash, Perl, etc., por lo que podría escribir algo para copiar y comparar hash md5, pero me preguntaba si ya existe algo (reinvención, ruedas y qué no).

La mayor parte de mi búsqueda en Google para copiar y (verificar | válido | verificar | hash | confirmar) aparece rsync. Sin embargo, por lo que puedo decir, rsync solo usa hash para ver si un archivo necesita ser actualizado. No realiza una comparación hash después.

Para este uso, específicamente, los archivos son binarios y típicamente de 8-10MB. Cualquier recomendación para servicios públicos u orientación para soluciones de bricolaje sería muy apreciada.

N13
fuente
¿Qué tal unísono ? Se utiliza para la sincronización bidireccional, pero seguramente verifica la suma de comprobación de un archivo.
cono

Respuestas:

19

De man rsync, bajo -copción:

-c, --checksum: omisión basada en la suma de comprobación, no mod-time & size

Tenga en cuenta que rsync siempre verifica que cada archivo transferido se haya reconstruido correctamente en el lado receptor al verificar una suma de verificación de todo el archivo que se genera a medida que se transfiere el archivo, pero que la verificación automática después de la transferencia no tiene nada que ver con esta opción before-the-transfer "¿Es necesario actualizar este archivo?" comprobar.

icyrock.com
fuente
77
Algunas personas descubrieron que el manual de rsync es engañoso acerca de la verificación de copia posterior predeterminada: unix.stackexchange.com/a/66702/148560 Parece que no hay tal verificación. Para verificar todas las copias, tienes que hacer otra rsync con la opción --checksum, dicen.
Rotareti
5

Hace varios años tuve las mismas demandas que tú. La solución que elegí fue usar ZFS a través del controlador ZFS-FUSE en mi servidor de almacenamiento. Pensé que mis fotos personales, documentos escaneados y otros archivos similares eran cosas a las que puedo acceder solo ocasionalmente, por lo que puede pasar mucho tiempo, digamos un año o más, antes de notar que un archivo se ha dañado debido a un error de unidad o similar.

En ese momento, todas las copias de seguridad que tengo pueden ser esta versión descompuesta en bits de los archivos.

ZFS tiene un beneficio sobre RAID-5 en que puede detectar y reparar errores en los datos almacenados en los discos individuales, incluso si las unidades no informan un error de lectura mientras leen los datos. Detectará, mediante sumas de comprobación, que uno de los discos devolvió información corrupta y utilizará los datos de redundancia para reparar ese disco.

Debido a la forma en que está diseñada la suma de comprobación en ZFS, sentí que podía confiar en ella para almacenar datos usados ​​con poca frecuencia durante largos períodos de tiempo. Cada semana ejecuto un "zpool scrub" que revisa y vuelve a leer todos los datos y verifica las sumas de verificación.

ZFS-FUSE me ha funcionado bastante bien en los últimos años.

En el pasado distante, para un cliente, implementé un sistema de base de datos que almacenaba información de suma de verificación en todos los archivos almacenados en un directorio particular. Luego tuve otro script que se ejecutaría periódicamente y verificaría el archivo contra la suma de verificación almacenada en la base de datos. Con eso, pudimos detectar rápidamente un archivo dañado y restaurar desde copias de seguridad. Básicamente, estábamos implementando los mismos tipos de controles que ZFS realiza internamente.

Sean Reifschneider
fuente
¿Por qué el voto negativo? Como no quedó ningún comentario, asumiré que es un "-1, en desacuerdo". :-)
Sean Reifschneider
... pero entonces: ¿en qué parte no está de acuerdo? Aunque quizás sea un poco fuera de tema para la pregunta, esto me parece sólido. Así que espero que el voto negativo sea por "no responder a la pregunta" en lugar de dejarnos inconscientes de algún defecto real en lo anterior ...
Arjan
Esta mañana me di cuenta de que estaba asumiendo que icyrock estaba preguntando debido a las preocupaciones sobre la podredumbre, que era mi preocupación. Pero tal vez sea de alguna manera diferente. Aunque no puedo imaginar cuál sería el caso de uso que cambiaría el contenido del archivo legítimamente sin cambiar los tiempos del archivo.
Sean Reifschneider
Creo que la preocupación del OP era la corrupción de datos en tránsito. Copia un archivo y la copia termina siendo diferente al original.
Jon Bentley
btrfs? que tiene sumas de comprobación y es nativo ...
Dmitry Kudriavtsev
1

Encontré esta utilidad (Linux y Windows) que hace exactamente lo que desea (copia hash + verificación hash con registro): http://sourceforge.net/projects/quickhash/

El único inconveniente es que solo existe como una GUI (sin acceso a la línea de comandos)

Desde v1.5.0, una carpeta de origen seleccionada se puede modificar, luego copiar y reconstruir en una carpeta de destino donde el contenido se vuelve a codificar para su verificación. Desde 1.5.5, también se pueden usar máscaras de archivos seleccionadas (* .doc; * .xls, etc.).

2072
fuente
0

si está copiando el archivo localmente (como implica su referencia en cplugar de scpetc.), entonces solo cmplos archivos de origen y destino ... pero de manera realista, si cpno está emitiendo algún tipo de error (ya sea en la línea de comando o en el valor de retorno de la ejecución), no hay ninguna razón para creer que no está funcionando.

Si realmente desea una copia de seguridad legítimamente redundante, considere una solución remota como Dropbox .

Brad Clawsie
fuente
+1. No está claro por qué esta respuesta fue rechazada, ya que proporciona (lo que me parece) una solución perfectamente válida para el problema, aunque requiere dos comandos en lugar de uno.
Jon Bentley
Realmente necesitará escribir un script con un bucle para usar esta respuesta, ya que no tiene en cuenta varios archivos y carpetas.
Gringo Suave