¿Hay algo por ahí para el archivo paralelo de archivos?
Tar es genial, pero no uso archivos de cinta, y es más importante para mí que el archivo se realice rápidamente (con compresión como bzip2) ya que tengo smp.
Creo que estás buscando pbzip2:
PBZIP2 es una implementación paralela del compresor de archivos de clasificación de bloques bzip2 que utiliza pthreads y logra una aceleración casi lineal en máquinas SMP.
Eche un vistazo a página de inicio del proyecto o consulte su repositorio de paquetes favorito.
7Zip puede ejecutarse en múltiples hilos cuando se le da el -mmt
flag, pero solo cuando se comprime en archivos 7z, que ofrecen una gran compresión pero generalmente son más lentos que Zip para crear archivos. Haz algo como esto:
7z a -mmt foo.7z /opt/myhugefile.dat
El OP preguntó sobre el archivo paralelo, no la compresión paralela.
Si el material fuente proviene de un sistema de archivos donde diferentes directorios/archivos pueden estar en diferentes discos, o incluso un solo disco rápido que excede la velocidad de entrada de las herramientas de compresión, entonces podría ser beneficioso tener múltiples flujos de entrada entrando en las capas de compresión.
La pregunta significativa es, ¿cómo se ve la salida de un archivo paralelo? Ya no es solo un descriptor de archivo único/stdout
, sino un descriptor de archivo por hilo.
Un ejemplo de esto hasta ahora es el modo de volcado paralelo de Postgresql pg_dump
, en el que se vuelca en un directorio, con subprocesos trabajando sobre el conjunto de tablas para hacer una copia de seguridad (cola de trabajo con múltiples subprocesos que consumen la cola).
No estoy seguro de ningún archivador paralelo real que sea convencional. Hubo un truco para Solaris Tar para su uso en ZFS: http://www.maier-komor.de/mtwrite.html
Hay algunas herramientas de copia de seguridad dedicadas que ejecutan con éxito múltiples subprocesos, pero muchas más que solo dividen la carga de trabajo por directorio a un alto nivel.
tar --use-compress-program=pigz ....
reemplace pigz
con su programa de compresión paralela favorito. La razón para usar tar
es porque puede almacenar el propietario, el grupo y los permisos. Esos metadatos suelen ser útiles (por ejemplo, restaurar un árbol de directorios en un sistema complejo).
pigz es una implementación paralela de gzip, pero solo puede usar múltiples procesadores para la compresión, no la descompresión.
tar
es simplemente un formato de archivo que es muy bueno para duplicar exactamente los archivos y preservar el árbol de directorios y los atributos del archivo original. TAR es muy bueno para hacer copias de seguridad, porque todo está preservado. Yo suelo pbzip2
para comprimir los archivos tar que uso para las copias de seguridad del sistema con muy buenos resultados.
este comando debería hacer el truco.
tar -cpS "infile" | pbzip2 > "outfile"
pbzip2
puede reemplazarse con una utilidad de compresión diferente, pero tenga en cuenta que la compresión LZMA (como pxz) usa una TONELADA de RAM al comprimir/descomprimir archivos grandes (intenté ejecutar 8 hilos con 8GB) de RAM, y pxz comenzó a cambiar al disco).
Otro contendiente es lbzip2
. Es bastante similar a pbzip2
En lo que respecta a la compresión, xz
ya que aproximadamente la versión 5.2 admite compresión paralela a través de -T
opción.