Pode tar arquivar arquivos em paralelo?

3

Estou tentando mover partes de um diretório grande (~ 40 GiB e ~ 8 milhões de arquivos) em várias máquinas por meio do Amazon S3 e, devido à necessidade de preservar links simbólicos, estou atrasando o diretório e carregando o arquivo resultante , em vez de sincronizar diretamente com o S3.

A maioria dos arquivos já está compactada, então não estou compactando o arquivo com gzip ou bzip. Meu comando é ao longo das linhas de

tar --create --exclude='*.large-files' --exclude='unimportant-directory-with-many-files' --file /tmp/archive.tar /directory/to/archive

Ao executar isso, observei que tar parece usar apenas um núcleo na máquina de oito núcleos. Minha impressão, baseada na identificação desse núcleo, na média de carga baixa (~ 1) e nas estatísticas que estou vendo de iostat é que essa operação é realmente vinculada a cpu, em vez de vinculada a disco, como eu d esperar. Como é lento (~ 90 minutos), estou interessado em tentar paralelizar o tar para usar os núcleos adicionais.

Outras questões sobre este tópico concentram-se em compactação ou criam vários arquivos (que, devido à estrutura de diretórios , não é fácil na minha situação). Parece que a maioria das pessoas esquece que você pode até criar um tarball sem comprimi-lo.

    
por Xiong Chiamiov 08.07.2016 / 22:38

1 resposta

6

Devido à natureza de um tar archive que armazena sequencialmente os arquivos na saída, não há como paralelizar o processo, a menos que você faça mais de um archive.

Observe que o gargalo da operação provavelmente seria o disco rígido. Por esse motivo, mesmo que você dividisse a tarefa em dois ou mais processos, ela não seria mais rápida, a menos que operasse em unidades diferentes.

    
por 08.07.2016 / 22:54