Comprimir uma pasta, mas não comprima tipos de arquivo específicos, mas inclua-os no arquivo gz

2

Estou usando tar com pigz para compactar uma pasta e salvar um backup. Tamanho dessa pasta ~ 250 GB ou mais. Esta pasta tem uma variedade de conteúdo, incluindo numerosos arquivos de texto e log, ISOs e arquivos zip em muitas subpastas diferentes. A compactação completa dessa pasta leva cerca de 1 hora (ou mais, às vezes). Neste momento eu uso isso em um script.

tar -cf - <data_folder> | pigz -1 > <output_file>.tar.$

Eu quero reduzir o tempo de compactação excluindo a compactação em ISOs e arquivos zip. Eu quero que eles (ISOs e arquivos zip) sejam incluídos no arquivo gzip (descomprimido).

Minha pergunta é: É possível compactar seletivamente arquivos com base no tipo e ainda incluir arquivos não compactados na saída gzip? Como experimentar isso?

    
por ankit7540 20.05.2016 / 09:13

1 resposta

4

Não, você não pode. Pelo menos não diretamente.

tar não faz nenhuma compactação. Ele meramente lê parte do sistema de arquivos (virtual) e gera um fluxo coeso a partir dele. Em geral, esse fluxo é passado para uma ferramenta / biblioteca de compactação, por exemplo, gzip / libz. A parte de compactação não vê nem sabe sobre arquivos individuais. Apenas comprime o fluxo gerado por tar . Portanto, você não pode adicionar compactação seletiva à sua abordagem atual.

O que você pode fazer é incrementalmente construir o arquivo tar, compactando cada arquivo individualmente e, em seguida, adicionando-o ao arquivo tar. Ao fazer isso, você pode optar por adicionar (por exemplo) imagens iso descompactadas ao arquivo. Note, no entanto, que o próprio arquivo tar não será comprimido. Consequentemente, depois de descompactar, você também teria que descompactar cada arquivo individualmente, onde for apropriado.

Quanto tempo você realmente perde ao compactar isos e arquivos zip? Vendo como tar | pigz > <file> é o processamento de fluxo, eu acho que você não está perdendo tanto tempo. Existem blocos gravados em disco, enquanto os próximos blocos estão sendo compactados, enquanto o fluxo está sendo construído. Está acontecendo em paralelo.

Talvez você possa otimizar sua estratégia:

Você pode colocar todos os arquivos iso e zip em diretórios dedicados e, em seguida, construir seu arquivo em três etapas: tar & compactar o restante, adicionar diretório iso, adicionar diretório zip. O arquivo resultante ainda precisa de um procedimento de extração demorado para descompactar o arquivo externo e, em seguida, descompactar e descompactar o arquivo interno. No entanto, isso é mais viável do que descompactar todos os arquivos individuais.

Ou você ajusta os comandos: Ele precisa ser um arquivo tar de um sistema de arquivos ou você poderia usar dd para fazer o backup de toda a partição? O backup de toda a partição tem a vantagem de leituras contínuas do (s) disco (s), o que pode ser mais rápido do que trabalhar com o sistema de arquivos. Tenho certeza de que você pode ajustar pigz para trabalhar com blocos maiores, o que deve lhe dar uma aceleração, se os arquivos iso e zip forem o seu problema. Além disso, você pode adicionar algum armazenamento em buffer (por exemplo, mbuffer ) antes de gravar o resultado no disco para otimizar ainda mais o acesso à mídia.

    
por 20.05.2016 / 09:39