A maneira mais rápida de combinar muitos arquivos em um (o tar czf é muito lento)

23

Atualmente, estou executando tar czfpara combinar arquivos de backup. Os arquivos estão em um diretório específico.

Mas o número de arquivos está aumentando. O uso tzr czfleva muito tempo (mais de 20 minutos e contando).

Preciso combinar os arquivos mais rapidamente e de forma escalável.

Eu encontrei genisoimage, readome mkisofs. Mas não sei qual é o mais rápido e quais são as limitações para cada um deles.

Najib-botak Chin
fonte
Duvido que tarintroduza uma sobrecarga significativa, ler os arquivos é a operação cara aqui. Você deve modificar a maneira como seus arquivos são armazenados ou usar uma abordagem radicalmente diferente (copie o sistema de arquivos como um todo). Não podemos ajudá-lo muito sem saber como seus arquivos estão organizados.
Gilles 'SO- stop be evil'
5
Monte seu FS com a opção "noatime", talvez acelere as operações de E / S.
Rufo El Magufo
2
+1 para noatime, realmente faz uma diferença significativa. Especialmente para discos rígidos regulares e também apenas para reduzir gravações estranhas.
JM Becker #

Respostas:

25

Você deve verificar se a maior parte do seu tempo está sendo gasta na CPU ou na E / S. De qualquer maneira, existem maneiras de melhorá-lo:

A: não comprima

Você não mencionou "compressão" em sua lista de requisitos de modo a tentar deixar cair o "z" de sua lista de argumentos: tar cf. Isso pode acelerar um pouco as coisas.

Existem outras técnicas para acelerar o processo, como usar "-N" para ignorar arquivos dos quais você já fez backup anteriormente.

B: faça backup de toda a partição com dd

Como alternativa, se você estiver fazendo backup de uma partição inteira, faça uma cópia de toda a imagem do disco. Isso economizaria o processamento e muito tempo de busca da cabeça do disco. tare qualquer outro programa que esteja trabalhando em um nível superior tem a sobrecarga de ter que ler e processar entradas e inodes de diretórios para descobrir onde está o conteúdo do arquivo e fazer mais buscas no disco principal , lendo cada arquivo de um local diferente do disco.

Para fazer backup dos dados subjacentes muito mais rapidamente, use:

dd bs=16M if=/dev/sda1 of=/another/filesystem

(Isso pressupõe que você não esteja usando RAID, o que pode mudar um pouco as coisas)

Yves Junqueira
fonte
2
não comprima : ou use, pigzse existir no sistema, mais de um processador.
Rufo El Magufo
Os algoritmos de compactação LZ4 / zstd e similarmente rápidos ainda valem a pena verificar se eles podem acelerar um processo apenas escrevendo menos dados (se os dados são compactáveis), sendo uma ordem de magnitude mais rápida na compactação, mas menos eficiente, dependendo da nível e algoritmo, também o man gzip diz "O nível de compactação padrão é -6", para que haja espaço para melhorias.
LiveWireBT
8

Para repetir o que outros disseram: precisamos saber mais sobre os arquivos que estão sendo copiados. Eu vou com algumas suposições aqui.

Anexar ao arquivo tar

Se os arquivos estiverem sendo adicionados apenas aos diretórios (ou seja, nenhum arquivo está sendo excluído), verifique se você está anexando ao arquivo tar existente, em vez de recriá-lo sempre. Você pode fazer isso especificando o nome do arquivo existente no seu tarcomando, em vez de um novo (ou excluindo o antigo).

Grave em um disco diferente

Ler do mesmo disco em que você está gravando pode estar prejudicando o desempenho. Tente gravar em um disco diferente para distribuir a carga de E / S. Se o arquivo morto precisar estar no mesmo disco que os arquivos originais, mova-o posteriormente.

Não comprima

Apenas repetindo o que @Yves disse. Se seus arquivos de backup já estiverem compactados, não há muita necessidade de compactar novamente. Você só estará desperdiçando ciclos da CPU.

Barry Brown
fonte
4

Usando tar com czpression lz4 como em

tar cvf - myFolder | lz4 > myFolder.tar.lz4

oferece o melhor dos dois mundos (boa compressão e velocidade). Espere uma taxa de compactação de cerca de 3, mesmo que seus dados contenham arquivos binários.

Leitura adicional: comparação de algoritmos de compactação Como tar com lz4

StefanQ
fonte
1
O que a StefanQ está mantendo é que você precisa escolher o seu compressor, dependendo de onde está o seu gargalo. Além disso: lembre-se de que você pode salvar a saída em um dispositivo de armazenamento físico diferente ou mesmo em uma máquina remota!
Lester Cheung
2

Estou surpreso que ninguém mencione despejo e restauração. Será muito mais rápido que o dd se você tiver espaço livre no sistema de arquivos.

Observe que, dependendo do sistema de arquivos em questão, você pode precisar de ferramentas diferentes:

  • ext2 / 3/4 - despejo e restauração ( despejo de pacote no RH / Debian)
  • XFS - xfsdump e xfsrestore (pacote xfsdump no RH / Debian)
  • ZFS - zfs send e zfs recv
  • BTRFS - btrfs envia e btrfs recebe

Observe que alguns programas não possuem compactação embutida (todos, exceto dump) - canalize para stdout e use pigz conforme necessário. ;-)

Lester Cheung
fonte