cpio VS tar - qual a melhor solução de arquivo para comprimir centenas de diretórios para um arquivo

3

Eu tenho centenas de diretórios em /var/Recording , e cada diretório terá subdiretórios, incluindo arquivos, hard links e links suaves.

Eu quero compactar todos os diretórios em /var/Recording para criar um único arquivo compactado.

Qual comando me daria a melhor compactação? tar ou cpio (especialmente considerando o fato de que eu tenho arquivos de link hard e soft).

Além disso, qual é a sintaxe correta do comando tar / cpio ?

  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1034
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1033
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1038
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1037
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1036
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1041
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1040
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1039
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1044
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1043
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1042
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1047
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1046
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1045
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1049
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1048
  .
  .
  .
  .
  .
    
por maihabunash 23.11.2014 / 10:14

1 resposta

5

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

    
por 23.11.2014 / 12:35