Normalmente comprimo usando tar zcvf
y descomprimo usando tar zxvf
(usando gzip debido a la costumbre).
Recientemente obtuve una CPU de cuatro núcleos con hyperthreading, por lo que tengo 8 núcleos lógicos, y noto que muchos de los núcleos no se usan durante la compresión / descompresión.
¿Hay alguna forma de utilizar los núcleos no utilizados para hacerlo más rápido?
Respuestas:
Puede usar pigz en lugar de gzip, que hace la compresión gzip en múltiples núcleos. En lugar de usar la opción -z, lo canalizarías a través de pigz:
Por defecto, pigz usa el número de núcleos disponibles, u ocho si no puede consultar eso. Puede pedir más con -pn, por ejemplo, -p 32. pigz tiene las mismas opciones que gzip, por lo que puede solicitar una mejor compresión con -9. P.ej
fuente
También puede usar el indicador tar "--use-compress-program =" para decirle a tar qué programa de compresión usar.
Por ejemplo, use:
fuente
tar - dir_to_zip | pv | pigz > tar.file
pv me ayuda a estimar, puedes omitirlo. Pero aún así es más fácil escribir y recordar.man tar
lo dice, como hace esto .zstd
es la herramienta más rápida para hacer esto. Notable aceleración al comprimir y descomprimir. Se utilizatar -cf --use-compress-program=zstdmt
para hacerlo con subprocesos múltiples.Enfoque común
Hay una opción para el
tar
programa:Puede usar la versión multiproceso del archivador o la utilidad del compresor.
Los archivadores multiproceso más populares son pigz (en lugar de gzip) y pbzip2 (en lugar de bzip2). Por ejemplo:
El archivador debe aceptar -d. Si su utilidad de reemplazo no tiene este parámetro y / o necesita especificar parámetros adicionales, entonces use tuberías (agregue parámetros si es necesario):
La entrada y salida de subprocesos simples y múltiples son compatibles. Puede comprimir usando la versión multiproceso y descomprimir usando la versión de un solo hilo y viceversa.
p7zip
Para p7zip para la compresión, necesita un pequeño script de shell como el siguiente:
Guárdelo como 7zhelper.sh. Aquí el ejemplo de uso:
xz
Respecto al soporte XZ multiproceso. Si está ejecutando la versión 5.2.0 o superior de XZ Utils, puede utilizar múltiples núcleos para la compresión configurando
-T
o--threads
en un valor apropiado a través de la variable de entorno XZ_DEFAULTS (por ejemploXZ_DEFAULTS="-T 0"
).Este es un fragmento de man para la versión 5.1.0alpha:
Sin embargo, esto no funcionará para la descompresión de archivos que tampoco se han comprimido con el subproceso habilitado. Desde man para la versión 5.2.2:
Recompilación con reemplazo
Si crea tar desde las fuentes, puede volver a compilar con parámetros
Después de volver a compilar tar con estas opciones, puede consultar el resultado de la ayuda de tar:
fuente
pigz
) solo está habilitada cuando se lee desde el archivo. El procesamiento de STDIN puede, de hecho, ser más lento.xz
opción. Es el enfoque más simple pero efectivo.export XZ_DEFAULTS="-T 0"
antes de llamartar
con la opción-J
de compresión xz funciona de maravilla.Puede usar el acceso directo
-I
para el--use-compress-program
cambio de tar e invocarpbzip2
para la compresión bzip2 en múltiples núcleos:fuente
tar: home/cc/ziptest: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
`Si desea tener más flexibilidad con los nombres de archivo y las opciones de compresión, puede usar:
Paso 1:
find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
Este comando buscará los archivos que desea archivar, en este caso
/my/path/*.sql
y/my/path/*.log
. Agrega tantos-o -name "pattern"
como quieras.-exec
ejecutará el siguiente comando usando los resultados defind
:tar
Paso 2:
tar
tar -P --transform='s@/my/path/@@g' -cf - {} +
--transform
es un simple parámetro de reemplazo de cadena. Eliminará la ruta de los archivos del archivo para que la raíz del tarball se convierta en el directorio actual cuando se extraiga. Tenga en cuenta que no puede usar la-C
opción para cambiar el directorio, ya que perderá los beneficios defind
: se incluirán todos los archivos del directorio.-P
le indicatar
que use rutas absolutas, por lo que no activa la advertencia "Eliminando los principales '/' de los nombres de los miembros". La '/' inicial se eliminará de--transform
todos modos.-cf -
le dicetar
que use el nombre tarball que especificaremos más adelante{} +
usa todos los archivos quefind
encontraste previamentePaso 3:
pigz
pigz -9 -p 4
Use tantos parámetros como desee. En este caso
-9
es el nivel de compresión y-p 4
es el número de núcleos dedicados a la compresión. Si ejecuta esto en un servidor web cargado, probablemente no quiera usar todos los núcleos disponibles.Paso 4: nombre del archivo
> myarchive.tar.gz
Finalmente.
fuente
Una herramienta de compresión (de) relativamente más nueva que quizás desee considerar es zstandard . Hace un excelente trabajo al utilizar núcleos de repuesto, y ha hecho algunas grandes compensaciones en lo que respecta a la relación de compresión frente al (des) tiempo de compresión. También es altamente modificable dependiendo de sus necesidades de relación de compresión.
fuente