Este es mi problema: necesito archivar en archivos tar muchos (hasta 60 TB) de archivos grandes (generalmente de 30 a 40 GB cada uno). Me gustaría hacer sumas de verificación (md5, sha1, lo que sea) de estos archivos antes de archivarlos; sin embargo, no leer cada archivo dos veces (una para suma de verificación, dos para tar'ing) es más o menos una necesidad para lograr un rendimiento de archivo muy alto (LTO-4 quiere 120 MB / s sostenidos, y la ventana de copia de seguridad es limitada).
Entonces, necesitaría alguna forma de leer un archivo, alimentando una herramienta de suma de verificación en un lado y construyendo un alquitrán para grabar en el otro lado, algo así:
tar cf - files | tee tarfile.tar | md5sum -
Excepto que no quiero la suma de verificación de todo el archivo (este código de shell de muestra hace exactamente esto) sino una suma de verificación para cada archivo individual en el archivo.
He estudiado las opciones de GNU tar, Pax, Star. He mirado la fuente de Archive :: Tar . No veo una manera obvia de lograr esto. Parece que tendré que construir a mano algo en C o similar para lograr lo que necesito. Perl / Python / etc simplemente no lo reducirá en términos de rendimiento, y los diversos programas tar pierden la "arquitectura de complementos" necesaria. ¿Alguien sabe de alguna solución existente para esto antes de comenzar el cambio de código?
tar
si decides escribirlo;)7z
que puede elegir el hash e imprimirlo en una forma quesha1sum
ysha256sum
puede comprender: 7zip.bugaco.com/7zip/7zip_15_09/MANUAL/cmdline/commands/... (y sami-lehtinen.net/blog/... ) Pruébelo:7z h -scrcsha256 mydir/* | sed --regexp-extended 's, +[0-9]+ +, ,g' > mydir.sha256sum ; sha256sum -c mydir.sha256sum
(probado con p7zip versión 15.09 beta)Respuestas:
Antes de continuar y reescribir el alquitrán, es posible que desee perfilar el método rápido y fácil de leer los datos dos veces, ya que puede que no sea mucho más lento que hacerlo de una sola vez.
El método de dos pasos se implementa aquí:
http://www.g-loaded.eu/2007/12/01/veritar-verify-checksums-of-files-within-a-tar-archive/
con el one-liner:
Si bien es cierto que md5sum está leyendo cada archivo del disco en paralelo con tar, en lugar de transmitir los datos a través de la tubería, el almacenamiento en caché del disco de Linux debería hacer que esta segunda lectura sea una lectura simple desde un búfer de memoria, que en realidad no debería ser más lento que Una lectura estándar. Solo necesita asegurarse de tener suficiente espacio en su caché de disco para almacenar suficiente de cada archivo que el segundo lector siempre está leyendo desde el caché y no está lo suficientemente atrás como para tener que recuperar del disco
fuente
Aquí hay un ejemplo de script Python. Calcula la suma de comprobación del archivo a medida que se agrega al archivo. Al final del script, el archivo de suma de verificación se agrega al archivo.
Cuando descomprimas, usa el archivo chksum_file para verificar la suma de comprobación
fuente
Creo que su problema es un problema de diseño de tar, ya que tar no permite el acceso / posicionamiento aleatorio dentro del archivo de almacenamiento a través de una tabla de contenido, por lo tanto, todos los protocolos estarán basados en archivos y no en búfer.
Por lo tanto, puede mirar diferentes formatos como PAX o DAR que permiten el acceso aleatorio.
fuente
Los formatos de archivos recientes generalmente incluyen algo de hash para la verificación de archivos, pero tienen un problema similar: no siempre puede elegir su propia función de hash, ni mantener una copia local de los hash.
Es posible que desee guardar una copia local de los hashes, distinta de la que está incrustada en el archivo en sí: por ejemplo, si el archivo se almacena sin conexión (en cintas o en un centro de datos que es caro de leer) y desea verificar un copia local de un archivo / directorio.
7zip tiene varias opciones, como
7z h
con hash personalizado y7z l -slt
para enumerar todos los hash y otras cosas, pero ¿qué pasa si desea una lista de hash md5 o sha1? Puede usar-bb
y-bs
controlar la verbosidad y reutilizar el método George Notaras mencionado en la respuesta aceptada:fuente