Em que situação um tarball (.tgz) teria quase o mesmo tamanho que o original?

3

Eu apenas fiz um dump de alguns sites (configs, diretório de imagens, diretório css e conteúdo do site (arquivos html etc)) usando tar czf sitedump.tgz backup_folder/ . O original "backup_folder" foi de cerca de 600MB e assim foi o tarball, apenas um pouco menor.

Qual cenário apresenta um desafio para esses formatos de compactação e qual é a provável causa da redução mínima de tamanho nesse caso? Tar versão 1.23

    
por Gregg Leventhal 02.09.2014 / 15:48

2 respostas

2

Se você tem um site moderadamente grande, a menos que tenha muito conteúdo contribuído pelo usuário, ele provavelmente tem alguns megabytes de HTML, CSS, JavaScript, PHP etc. Esse material pode ser muito bem compactado.

O que significa que as imagens são algo como 99% do tarball. As imagens já estão compactadas, portanto, compactá-las novamente não reduzirá o tamanho (ou apenas um pouco, se forem algoritmos de compactação diferentes - compactar uma imagem JPEG com um fator de qualidade muito alto pode reduzir um pouco o tamanho).

Digamos que você tenha 5 MB de texto e código com uma taxa de compactação de 1: 3 e 600 MB de imagens com uma taxa de compactação de 1: 1,01. O resultado é um arquivo de 595MB.

Em um sistema Linux, você pode executar du --exclude='*.jpg' --exclude='*.png' --exclude='*.gif' para adicionar o tamanho dos arquivos em um diretório, excluindo os formatos de imagem comuns.

    
por 03.09.2014 / 01:23
3

Esta é uma questão de compactação de dados sem perdas , a saber, a de uma limitations . Geralmente, quanto mais aleatórios forem os dados, mais difícil será compactar, porque a compactação é basicamente encontrar padrões e representá-los com menos informações (você pode pensar nisso como sendo capaz de prever as seguintes palavras desde o início de uma frase). Assim, um ruído seria (quase) totalmente incompressível, enquanto as sequências longas de repetição podem ser muito bem compactadas. Se você quiser mais do que este aceno de mão, os links fornecidos acima podem ser um bom ponto de partida.

Quanto aos tarballs - além dos dados em os arquivos, arquivos de fita (que é o que "tar" originalmente significava aqui) contêm metadados de arquivos (geralmente um ou mais blocos de 512B por arquivo, dependendo do sabor exato do piche) que também é comprimido. Assim, se você realmente quisesse torná-lo o mais incompreensível possível, você precisaria usar nomes de arquivo aleatórios, IDs / nomes de usuário / grupos aleatórios, modos de arquivo, garantir que os arquivos contendo ruído e os metadados tivessem tamanhos de múltiplos inteiros de Blocos de 512B (para evitar qualquer preenchimento com zeros).

Outra razão para o arquivo ser surpreendentemente grande pode ser o baixo nível de compactação em gzip - para% standalonegzip, isso é dado por -0 (sem compactação) até -9 (compactação máxima), com o padrão -6 .

Se você realmente quiser compactá-lo tão bem quanto possível, provavelmente desejará usar um algoritmo diferente (e, portanto, um programa de compactação). xz é geralmente considerado o melhor intérprete.

    
por 02.09.2014 / 17:17