Otimizando arquivos compactados para desduplicação em nível de bloco

Otimizando arquivos compactados para desduplicação em nível de bloco

Tenho cerca de 100TiB de dados gzip compactados em volumes de nuvem. No meu caminho para executar uma desduplicação em nível de bloco (duperemove para btrfs), descobri que ela foi compactada sem -n, o que causa diferença em nível de bloco da saída compactada para arquivos idênticos.

Além de recomprimir tudo com gzip -n, existe algum outro atalho para fazer com que centenas de milhões de arquivos compactados "perdam" esse cabeçalho? e se eu já precisar recompactar todos eles, devo procurar outras otimizações também, para --rsyncablemaximizar as chances de desduplicação?

(Os dados têm chances muito altas de conter muitos idiotas, estamos falando de dumps completos diários de grandes tabelas de banco de dados)

Responder1

Você poderia usar zcat para extrair os arquivos e calcular uma soma de verificação para cada arquivo:

for x in *.gz
do
    zcat $x | sha256sum > $x.sum
done

em seguida, verifique se há ingênuos nos arquivos *.gz.sum. Cada vez que você remover um idiota chamado "something.gz.sum", remova também o "something.gz" correspondente

Responder2

Respondendo à primeira metade da minha pergunta sobre: ​​cortar o carimbo de data/nome de um arquivo gzip. não, ainda não encontrei um trecho de código pronto, mas encontrei tempo para instalar o vbindiff, uma ferramenta visual de comparação binária, e descobri que o cabeçalho não estava compactado e, portanto, o fluxo compactado real é idêntico a gzipe gzip -n, e tudo o que resta é manipular alguns bytes logo no início dos arquivos compactados para obter a versão unificada. um pequeno programa C resolverá meu problema, a menos que alguém conheça sedbinários :-)

Quanto à segunda parte, terei apenas que experimentar vários dados. Se eu tiver algum resultado definitivo, postarei aqui.

informação relacionada