Combinando vários arquivos sem tar

0

Eu tenho um diretório que contém 400 milhões de arquivos. Usando find, eu criei uma lista de todos os arquivos, que se parece com isso:

/output/custom/31/7/31767937
/output/custom/31/7/317537a
/output/custom/31/7/317537
/output/custom/31/7/317ab
/output/custom/31/7/317bo
/output/custom/31/7/317je
/output/custom/31/7/317ma
/output/custom/31/7/31763

Eu então divido o arquivo em 20 arquivos diferentes e executei um script para criar 20 tarballs diferentes:

for i in $(ls x*)
do
    tar -cf /tar/$i.tar -T $i &
done

Os arquivos de entrada estão em uma unidade diferente do ponto de montagem /tar . O script já está em execução há 2 dias e é cerca de 1/4 do caminho concluído. Eu provavelmente vou deixar isso em execução neste momento. No entanto, para referência futura, estou me perguntando se existe uma maneira melhor de fazer isso do que usando tar ?

Meu objetivo final aqui é mover esses tarballs para 20 servidores diferentes, descompactá-los e executar alguns scripts nos arquivos. Ah, e como eu tenho os tarballs, também os colocarei no armazenamento S3.

    
por Franz Kafka 13.09.2017 / 16:05

1 resposta

1

Em termos de facilidade de transferência, sugiro rsync .

Vantagens

  • Um comando para fazer tudo, um comando para encontrá-los
  • Restartable quando a rede cai no meio da transferência
  • Menos esforço - você não precisa dividir / tar e depois transferir / untar
  • O servidor de origem pode se concentrar na leitura de arquivos, deixando os servidores de destino para lidar com gravações (menos conflitos potenciais de I / O de sistema de arquivos, atualização de metadados, etc.)

Desvantagens

  • Você descarta todo o esforço que fez até agora
  • É uma solução diferente da que você considerou
  • Requer uma conexão direta entre os dois sistemas (bem, na verdade isso não acontece, mas você precisa fornecer um túnel ssh)

Soluções propostas

  1. todos os arquivos na árvore de diretórios

    cd /path/to/top/source/directory
    rsync -avPR -e ssh . remoteuser@remotehost:/path/to/top/destination/directory
    
  2. nomes de arquivos listados em um arquivo

    cd /path/to/top/source/directory
    rsync -avPR -e ssh --files-from=/path/to/filelist . remoteuser@remotehost:/path/to/top/destination/directory
    

    Esta segunda solução requer que os nomes dos arquivos sejam listados em relação ao topo do diretório de origem, porque os nomes dos arquivos obtidos a partir do arquivo filelist também serão aplicados no sistema de arquivos de destino.

Se você for fazer um desses como root, você certamente precisará copiar um certificado ssh do servidor de origem para o destino, para que você possa efetuar login como o usuário root.

    
por 13.09.2017 / 19:39