Approccio comune
C'è un'opzione per il tar
programma:
-I, --use-compress-program PROG
filter through PROG (must accept -d)
È possibile utilizzare la versione multithread dell'utilità di archiviazione o compressore.
Gli archiviatori multithread più popolari sono pigz (anziché gzip) e pbzip2 (anziché bzip2). Per esempio:
$ tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 paths_to_archive
$ tar --use-compress-program=pigz -cf OUTPUT_FILE.tar.gz paths_to_archive
Archiver deve accettare -d. Se l'utilità di sostituzione non ha questo parametro e / o è necessario specificare parametri aggiuntivi, utilizzare i tubi (aggiungere parametri se necessario):
$ tar cf - paths_to_archive | pbzip2 > OUTPUT_FILE.tar.gz
$ tar cf - paths_to_archive | pigz > OUTPUT_FILE.tar.gz
L'ingresso e l'uscita di singlethread e multithread sono compatibili. È possibile comprimere utilizzando la versione multithread e decomprimere utilizzando la versione singlethread e viceversa.
p7zip
Per p7zip per la compressione è necessario uno script di shell piccolo come il seguente:
#!/bin/sh
case $1 in
-d) 7za -txz -si -so e;;
*) 7za -txz -si -so a .;;
esac 2>/dev/null
Salvalo come 7zhelper.sh. Ecco l'esempio di utilizzo:
$ tar -I 7zhelper.sh -cf OUTPUT_FILE.tar.7z paths_to_archive
$ tar -I 7zhelper.sh -xf OUTPUT_FILE.tar.7z
xz
Per quanto riguarda il supporto XZ multithread. Se si esegue la versione 5.2.0 o successiva di XZ Utils, è possibile utilizzare più core per la compressione impostando -T
o --threads
su un valore appropriato tramite la variabile ambientale XZ_DEFAULTS (ad es XZ_DEFAULTS="-T 0"
.).
Questo è un frammento di man per la versione 5.1.0alpha:
La compressione e decompressione multithread non sono ancora implementate, quindi questa opzione non ha alcun effetto per ora.
Tuttavia, ciò non funzionerà per la decompressione di file che non sono stati compressi anche con il threading abilitato. Da man per la versione 5.2.2:
La decompressione filettata non è stata ancora implementata. Funzionerà solo su file che contengono più blocchi con informazioni sulle dimensioni nelle intestazioni dei blocchi. Tutti i file compressi in modalità multi-thread soddisfano questa condizione, ma i file compressi in modalità single-thread non lo fanno nemmeno se si utilizza --block-size = size.
Ricompilazione con sostituzione
Se si crea tar da fonti, è possibile ricompilare con i parametri
--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip
Dopo aver ricompilato tar con queste opzioni è possibile controllare l'output della guida di tar:
$ tar --help | grep "lbzip2\|plzip\|pigz"
-j, --bzip2 filter the archive through lbzip2
--lzip filter the archive through plzip
-z, --gzip, --gunzip, --ungzip filter the archive through pigz