Gzip diretório enorme em arquivos .gz separados para transferência ssh

2

Eu tenho um diretório de ~ 200.000 arquivos .npy com tamanho total ~ 100 GB. Todos os arquivos são armazenados diretamente abaixo do diretório principal (ou seja, não há subdiretórios). Eu preciso transferir o diretório e gostaria de fazer isso primeiro compactando-o em um número menor de arquivos gzip que eu transfiro usando o ssh. Eu tentei ingenuamente gzip todo o diretório de uma só vez, o que fez meu servidor congelar, exigindo uma reinicialização difícil.

Como posso facilmente compactar o diretório de arquivos em, digamos, 1000 arquivos .gz que eu possa facilmente transferir e descompactar novamente?

De preferência, gostaria de fazer isso de uma maneira, em que o consumo máximo de recursos no servidor em qualquer ponto (principalmente RAM / IO) seja agnóstico em relação às características do diretório (tamanho total / # de arquivos). Eu estou esperando que eu possa encontrar um método que eu possa usar com diretórios ainda maiores sem fazer meu servidor congelar. A solução deve preferencialmente usar bash ou Python. Obrigado!

    
por pir 03.12.2016 / 08:57

1 resposta

2

Essa parece ser uma boa correspondência para rsync . Ele irá compactar transparentemente o conteúdo, e pode ser dito para limitar o uso da largura de banda, o que serve tanto para evitar o entupimento da rede quanto para evitar uma alta carga de IO no servidor de origem:

rsync -az --bwlimit=1m directory server:/destination/

-a diz a rsync para copiar os metadados do arquivo, como tempos de criação, -z significa usar compactação e --bwlimit limita a largura de banda usada na rede.

Como um bônus adicional quando rsync é usado, se você interromper a operação por qualquer motivo e voltar a executá-la novamente, ela será automaticamente selecionada de onde parou. Se você também precisar excluir arquivos extras no destino, adicione a opção --delete .

    
por 03.12.2016 / 10:46