Arquive dados grandes em várias partes

3

Estou trabalhando em big data e preciso arquivar um diretório maior que 64 terabytes. Não consigo criar um arquivo tão grande (arquivo) no meu sistema de arquivos. Infelizmente, todas as soluções propostas para criar um arquivo de várias partes no Linux sugerem criar primeiro um arquivo e, em seguida, dividi-lo em arquivos menores com o comando split .

Eu sei que isso é possível com f.e. 7zip, mas infelizmente sou forçado a usar ferramentas construídas no RedHat 6 - tar, gzip, bzip2 ...

Eu queria saber como criar um script que pedisse ao usuário o tamanho máximo do volume. Ele iria arquivar todos os arquivos com gzip, dividir esses arquivos, que são muito grandes e, em seguida, mesclá-los manualmente em muitos tars com o tamanho escolhido. É uma boa ideia?

Existe alguma outra possibilidade de conseguir uma grande divisão de arquivos com comandos básicos do Linux?

ATUALIZAÇÃO:

Eu testei a solução no sistema de arquivos com o tamanho máximo de arquivo restrito e funcionou. O pipe que redireciona o comando tar diretamente para o comando split funcionou como esperado:

tar -czf - HugeDirectory | split --bytes=100GB - MyArchive.tgz.

Os arquivos criados já são pequenos e, ao mesclá-los, não são criados arquivos supersos:

cat MyArchive.tgz* | tar -xzf -

    
por JoshThunar 28.06.2018 / 17:43

2 respostas

2

Se você tiver espaço suficiente para armazenar o arquivo compactado, o arquivo poderá ser criado e dividido de uma só vez (assumindo o GNU split ):

tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G

Isso criaria arquivos chamados xaa.gz.part , xab.gz.part etc., sendo cada arquivo um bit compactado de 1G do arquivo tar .

Para extrair o arquivo:

cat x*.gz.part | tar -x -vz -f -

Se o sistema de arquivos não puder armazenar o arquivo compactado, as partes do arquivo precisam ser gravadas em outro sistema de arquivos, alternativa a algum local remoto.

Na localização remota, por exemplo:

ssh user@serverwithfiles tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G

Isso transferiria o archive compactado sobre ssh da máquina com o diretório grande para a máquina local e o dividiria.

    
por 29.06.2018 / 09:04
-1

Com o comando básico do UNIX, não vejo outra maneira senão dividir um arquivo existente.

Mas que tal instalar star e usar o recurso de vários volumes de star ?

Isso tem a vantagem de verificar se as peças são fornecidas na ordem correta.

    
por 29.06.2018 / 01:34