¿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.
performance
tar
archive
supercheetah
fuente
fuente
zip
que puedo manejar directorios: |tar
archivos, y luego comprimir el paquete mediante un compresor de archivos (comogzip
,pigz
, etc.). Puede hacerlo en dos pasos, pero también en un solo paso , ya que pueden trabajar en flujos de datos desde la entrada / salida estándar. Los resultados son muy similareszip
, pero más versátiles.Respuestas:
Creo que estás buscando pbzip2:
Eche un vistazo a la página de inicio del proyecto o consulte su repositorio de paquetes favorito.
fuente
pigz
ypxz
para implementaciones paralelas degzip
yxz
. Puede comprimir usando un comando comotar c dir | pigz -c > dir.tar.gz
y descomprimir usandopigz -cd dir.tar.gz | tar xf -
.tar -cf dir.tar.gz -I pigz dir
ytar -xf dir.tar.gz -I pigz
. Tambiénxz
está roscado: usoXZ_OPT=-T0 tar -cJf dir.tar.gz dir
yXZ_OPT=-T0 tar -xJf dir.tar.gz
.7zip puede ejecutarse en múltiples subprocesos cuando se le da la
-mmt
bandera, 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:fuente
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 volca a 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.
fuente
reemplace
pigz
con su programa de compresión paralela favorito. La razón para usartar
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).fuente
-I
opción, que es la misma que--use-compress-program
. Entonces, por ejemplo,tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."
se puede aplicar a la opción de subprocesos múltiples utilizandopigz
comotar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo..."
. Esta es la mejor respuesta, la más apropiada, en mi humilde opinión. Gracias @ uDude! :)pigz es una implementación paralela de gzip, pero solo puede usar múltiples procesadores para la compresión, no para la descompresión.
fuente
pigz
realidad parece ser capaz de usar múltiples hilos también cuando se descomprime. Intente comparar la salida detime tar xf dir.tar.gz
y detime pigz -cd dir.tar.gz | tar xf -
(en mi CPU de 4 núcleos, toma un poco menos de la mitad del tiempo).time
en una tubería solo cronometrará el primer comando. De lapigz
documentación : "La descompresión no puede ser paralelizada, al menos no sin flujos de desinflado especialmente preparados para ese propósito. Como resultado, pigz usa un solo hilo (el hilo principal) para la descompresión, pero creará otros tres hilos para leer, escribir y verificar el cálculo, lo que puede acelerar la descompresión en algunas circunstancias ".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. Utilizopbzip2
para comprimir los archivos tar que utilizo para las copias de seguridad del sistema con muy buenos resultados.Este comando debería hacer el truco.
pbzip2
se puede reemplazar 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).fuente
Otro contendiente es
lbzip2
. Es bastante similar a pbzip2fuente
En lo que respecta a la compresión,
xz
ya que aproximadamente la versión 5.2 admite la compresión paralela a través de la-T
opción.fuente