La forma más rápida combina muchos archivos en uno (tar czf es demasiado lento)


23

Actualmente estoy corriendo tar czfpara combinar archivos de respaldo. Los archivos están en un directorio específico.

Pero el número de archivos está creciendo. Usar tzr czftoma demasiado tiempo (más de 20 minutos y contando).

Necesito combinar los archivos más rápidamente y de forma escalable.

He encontrado genisoimage, readomy mkisofs. Pero no sé cuál es el más rápido y cuáles son las limitaciones para cada uno de ellos.


Dudo que tarintroduzca una sobrecarga significativa, leer los archivos es la operación costosa aquí. Debe modificar la forma en que se almacenan sus archivos o utilizar un enfoque radicalmente diferente (copie el sistema de archivos en su conjunto). No podemos ayudarlo mucho sin saber cómo están organizados sus archivos.
Gilles 'SO- deja de ser malvado'

55
Monte su FS con la opción "noatime", quizás acelere las operaciones de E / S.
Rufo El Magufo

2
+1 para noatime, realmente hace una diferencia significativa. Especialmente para discos duros normales, y también solo para reducir escrituras extrañas.
JM Becker

Respuestas:


25

Debe verificar si la mayor parte de su tiempo se gasta en la CPU o en E / S. De cualquier manera, hay formas de mejorarlo:

A: no comprimir

Usted no ha mencionado la "compresión" en su lista de requisitos por lo intente poner la "z" de la lista de argumentos: tar cf. Esto podría acelerar un poco las cosas.

Existen otras técnicas para acelerar el proceso, como usar "-N" para omitir archivos de los que ya realizó una copia de seguridad.

B: copia de seguridad de toda la partición con dd

Alternativamente, si está haciendo una copia de seguridad de una partición completa, tome una copia de toda la imagen del disco. Esto ahorraría procesamiento y mucho tiempo de búsqueda de cabeza de disco. tary cualquier otro programa que trabaje en un nivel superior tiene una sobrecarga de tener que leer y procesar entradas de directorio e inodos para encontrar dónde está el contenido del archivo y hacer más búsquedas de disco principal , leyendo cada archivo desde un lugar diferente del disco.

Para hacer una copia de seguridad de los datos subyacentes mucho más rápido, use:

dd bs=16M if=/dev/sda1 of=/another/filesystem

(Esto supone que no está utilizando RAID, lo que puede cambiar un poco las cosas)


2
no comprima : o use pigzsi existe en el sistema más de un procesador.
Rufo El Magufo

Puede que valga la pena comprobar LZ4 / zstd y algoritmos de compresión igualmente rápidos para ver si pueden acelerar un proceso simplemente escribiendo menos datos (si los datos son comprimibles) mientras que son un orden de magnitud más rápido en compresión pero menos eficiente dependiendo de nivel y algoritmo, también man gzip dice "El nivel de compresión predeterminado es -6", por lo que hay margen de mejora.
LiveWireBT

8

Para repetir lo que otros han dicho: necesitamos saber más sobre los archivos que se están respaldando. Iré con algunas suposiciones aquí.

Agregar al archivo tar

Si los archivos solo se agregan a los directorios (es decir, no se elimina ningún archivo), asegúrese de agregar al archivo tar existente en lugar de volver a crearlo cada vez. Puede hacerlo especificando el nombre de archivo existente en su tarcomando en lugar de uno nuevo (o eliminando el antiguo).

Escribe en un disco diferente

Leer desde el mismo disco en el que está escribiendo puede estar matando el rendimiento. Intente escribir en un disco diferente para distribuir la carga de E / S. Si el archivo debe estar en el mismo disco que los archivos originales, muévalo después.

No comprimir

Solo repito lo que dijo @Yves. Si sus archivos de respaldo ya están comprimidos, no hay mucha necesidad de comprimir nuevamente. Simplemente desperdiciará ciclos de CPU.


4

Usando alquitrán con lz4 crompression como en

tar cvf - myFolder | lz4 > myFolder.tar.lz4

te ofrece lo mejor de ambos mundos (bastante buena compresión Y velocidad). Espere una relación de compresión de aproximadamente 3 incluso si sus datos contienen archivos binarios.

Lectura adicional: comparación de algoritmos de compresión Cómo tar con lz4


1
Lo que StefanQ se queda es que debe elegir su compresor dependiendo de dónde esté su cuello de botella. Además: recuerde que puede guardar la salida en un dispositivo de almacenamiento físico diferente o incluso en una máquina remota.
Lester Cheung

2

Me sorprende que nadie mencione volcado y restauración. Será mucho más rápido que dd si tiene espacio libre en el sistema de archivos.

Tenga en cuenta que, dependiendo del sistema de archivos en cuestión, puede necesitar diferentes herramientas:

  • ext2 / 3/4 - volcado y restauración ( volcado de paquete en RH / Debian)
  • XFS - xfsdump y xfsrestore (paquete xfsdump en RH / Debian)
  • ZFS - zfs send y zfs recv
  • BTRFS - btrfs enviar y btrfs recibir

Tenga en cuenta que algunos programas no tienen compresión incorporada (todos excepto volcado): canalice a stdout y use pigz según sea necesario. ;-)

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.