cpio
(o mais antigo dos dois utilitários contando o envio com UNIX) costumava ter suporte de link físico para a opção -p
(ou seja, copiando do sistema de arquivos para o sistema de arquivos), mas o formato de saída newc
padrão um cpio
uses) também suporta hard links no arquivo de saída.
(% GNU) tar
suporta links físicos sem nenhuma opção especial. Uma comparação pode ser encontrada aqui .
Então, se você executar um teste com um arquivo grande e vinculado e 100 arquivos pequenos:
$ mkdir tmp
$ dd if=/dev/urandom of=tmp/blabla bs=1k count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1,0 MB) copied, 0,0764345 s, 13,7 MB/s
$ ln tmp/blabla tmp/hardlink
$ tar cvf tmp.tar tmp
$ find tmp -print0 | cpio -0o > out.cpio
4104 blocks
$ find tmp -print0 | cpio -0o --format=newc > outnewc.cpio
2074 blocks
$ xz -9k out.tar outnewc.cpio
$ bzip2 -9k out.tar outnewc.cpio
$ ls -l out*
-rw-rw-r-- 1 anthon users 2101248 Nov 23 12:30 out.cpio
-rw-rw-r-- 1 anthon users 1061888 Nov 23 12:30 outnewc.cpio
-rw-rw-r-- 1 anthon users 1055935 Nov 23 12:30 outnewc.cpio.bz2
-rw-rw-r-- 1 anthon users 1050652 Nov 23 12:30 outnewc.cpio.xz
-rw-rw-r-- 1 anthon users 1157120 Nov 23 12:30 out.tar
-rw-rw-r-- 1 anthon users 1055402 Nov 23 12:30 out.tar.bz2
-rw-rw-r-- 1 anthon users 1050928 Nov 23 12:30 out.tar.xz
Você vê que as versões não compactadas ( outnewc.cpio
e out.tar
) dão ao cpio uma vantagem e que compactá-las com xz -9
fornece resultados melhores que bzip2 -9
( gzip
é geralmente muito pior que qualquer um). E essa compactação com xz
minimiza a tar
e a cpio
diferença de saída . No entanto, a compactação depende muito dos dados e também da ordenação dos dados nos arquivos, portanto você deve realmente testar isso (uma amostra de) seus dados reais.
Se você quiser compactar em paralelo, consulte o meu artigo aqui