Tutoriel Linux

Comprimir um arquivo com xz no Linux sem perder o original

Débutant7 min de lecture

Você deve compactar uma imagem de disco, um dump SQL, uma exportação CSV ou um backup bruto antes da transferência. xz geralmente reduz melhor o tamanho do que gzip, mas consome mais CPU e pode exigir muita memória com níveis altos.

Use xz para um único arquivo grande e pouco compactado. Evite-o para uma foto JPEG, um vídeo MP4, um arquivo .zip, um pacote .deb ou um arquivo que já termina com .gz, .xz ou .zst.

As etapas abaixo abrangem a criação de um arquivo .xz, a preservação do arquivo fonte, o teste de integridade, a escolha do nível de compressão e a verificação de uma cópia remota.

Arquivo Linux compactado com xz e Tux na frente de um servidor
Compressão de um arquivo Linux com xz antes da transferência ou armazenamento.

Verifique se xz está disponível

A maioria das distribuições instala xz por padrão através do pacote xz-utils ou xz. Verifique o comando antes de integrá-lo a um procedimento de backup.

xz --version

No Debian, Ubuntu e Linux Mint, instale o pacote se o comando estiver ausente.

sudo apt update
sudo apt install xz-utils

No Fedora, AlmaLinux ou Rocky Linux, instale o pacote com dnf.

sudo dnf install xz

Escolher xz, gzip ou zip

xz compacta um único arquivo com LZMA2. Ele é adequado para um dump SQL, uma exportação de texto, uma imagem de disco não compactada, um arquivo de log consolidado ou um arquivo .tar já criado.

  • Escolha xz quando a redução de tamanho for mais importante que a velocidade.
  • Escolha gzip quando quiser uma compressão rápida em um script, pipeline ou rotação de logs.
  • Escolha zip quando precisar agrupar vários arquivos em um formato fácil de abrir no Windows.
  • Escolha tar antes de xz quando precisar preservar uma estrutura Linux com seus diretórios, nomes e permissões.

xz sozinho não agrupa vários arquivos. Para compactar uma pasta, primeiro crie um arquivo tar e depois compacte-o com xz.

tar -cf projeto.tar projeto/
xz -k projeto.tar

O comando tar também pode criar diretamente projeto.tar.xz.

tar -cJf projeto.tar.xz projeto/

Controlar o arquivo antes da compressão

Verifique o tipo e o tamanho do arquivo antes de uma compressão longa. Um arquivo já compactado pode monopolizar o processador para um ganho quase nulo.

file sauvegarde.sql
ls -lh sauvegarde.sql

Se file indicar gzip compressed data, XZ compressed data, Zip archive data, JPEG image data ou ISO Media, teste primeiro em uma pequena amostra.

Compactar mantendo o arquivo fonte

Sem opção, xz sauvegarde.sql substitui sauvegarde.sql por sauvegarde.sql.xz. Adicione -k para preservar o original durante os testes.

xz -k sauvegarde.sql

Adicione -v para mostrar o progresso, a taxa e informações úteis durante a execução.

xz -k -v sauvegarde.sql

Verifique então se os dois arquivos existem e compare seu tamanho.

ls -lh sauvegarde.sql sauvegarde.sql.xz

Não exclua o original porque o arquivo .xz existe. Teste o arquivo e valide a restauração antes de qualquer exclusão.

Escolher um nível de compressão

O nível padrão de xz é -6. Ele geralmente oferece uma boa taxa, mas nem sempre é adequado para uma máquina pouco poderosa ou para uma restauração urgente.

  • Use -1 a -3 quando a velocidade contar e o ganho máximo não for prioritário.
  • Mantenha -6 para uso geral em uma máquina confortável.
  • Reserve -7 a -9 para arquivos grandes que você archive raramente e que também possam ser descompactados em uma máquina suficientemente equipada.
xz -3 -k export.csv
xz -6 -k sauvegarde.sql
xz -9 -k archive.img

Níveis altos podem aumentar a memória necessária para a compressão e descompressão. Evite -9 para um arquivo que deverá ser aberto em um pequeno VPS, uma máquina antiga ou um sistema de recuperação mínimo.

Limitar o uso de CPU em um servidor

A opção -T define o número de threads. -T0 usa todos os núcleos disponíveis, o que pode desacelerar um banco de dados, um servidor web ou contêineres ativos.

xz -6 -T2 -k sauvegarde.sql

Em uma máquina de produção, comece com -T1 ou -T2. Monitore a carga e aumente apenas se o servidor continuar responsivo.

uptime
top

Para uma compressão planejada, execute fora do horário de pico e verifique o espaço livre antes do lançamento. A opção -k mantém dois arquivos e requer mais espaço em disco.

df -h .

Testar a integridade do arquivo

Teste sempre o arquivo com xz -t antes de excluir o original ou validar um backup. O comando lê e descompacta os dados na memória, sem criar um arquivo de saída.

xz -t sauvegarde.sql.xz
echo $?

Um código de retorno 0 indica que o teste xz foi bem-sucedido. Outro código sinaliza um erro e impõe a preservação do arquivo fonte.

Em seguida, exiba os metadados do arquivo para verificar o tamanho não compactado, o tamanho compactado, a taxa e o tipo de controle de integridade.

xz -l sauvegarde.sql.xz

xz -t verifica se o arquivo pode ser lido. Ele não prova que uma cópia remota é idêntica ao arquivo local.

Verificar uma transferência com SHA-256

Calcule uma impressão SHA-256 antes da transferência, copie o arquivo, e depois recalcule a impressão no destino. As duas linhas devem exibir o mesmo valor.

sha256sum sauvegarde.sql.xz
scp sauvegarde.sql.xz admin@servidor:/srv/archives/
ssh admin@servidor 'sha256sum /srv/archives/sauvegarde.sql.xz'

Mantenha a impressão com o arquivo se ele for enviado para um disco externo, armazenamento de objetos ou outro servidor.

sha256sum sauvegarde.sql.xz > sauvegarde.sql.xz.sha256

Para verificar mais tarde a partir da mesma pasta, use o arquivo .sha256.

sha256sum -c sauvegarde.sql.xz.sha256

Descompactar sem perder o arquivo

unxz sauvegarde.sql.xz exclui o arquivo após a extração. Adicione -k para manter o arquivo .xz enquanto você não tiver verificado o conteúdo restaurado.

unxz -k sauvegarde.sql.xz
ls -lh sauvegarde.sql sauvegarde.sql.xz

O comando equivalente com xz é útil em scripts que já chamam esse binário.

xz -d -k sauvegarde.sql.xz

Se o arquivo de saída já existir, xz se recusa a sobrescrevê-lo sem -f. Não force a extração antes de ter comparado o caminho, a data, o tamanho e a real necessidade de substituição.

ls -lh sauvegarde.sql sauvegarde.sql.xz
stat sauvegarde.sql

Para uma restauração cuidadosa, descompacte em uma pasta separada e compare o arquivo obtido antes de substituir um arquivo de produção.

mkdir -p /tmp/test-xz
cp sauvegarde.sql.xz /tmp/test-xz/
cd /tmp/test-xz
unxz -k sauvegarde.sql.xz
ls -lh sauvegarde.sql

Ler um arquivo sem criar um arquivo

Para inspecionar rapidamente um arquivo de texto compactado, envie o conteúdo descompactado para a saída padrão com xzcat. Esse método evita escrever um arquivo temporário grande.

xzcat sauvegarde.sql.xz | head -20

Para procurar uma string em um arquivo de texto compactado, use xzgrep em vez de descompactar todo o arquivo.

xzgrep -n "CREATE TABLE" sauvegarde.sql.xz

Não use esses comandos em um dump confidencial se seu terminal registrar a saída ou se você estiver trabalhando em uma sessão compartilhada.

Procedimento recomendado para um backup

  • Verifique o tipo do arquivo com file e seu tamanho com ls -lh.
  • Verifique o espaço disponível com df -h . antes de usar -k.
  • Comprime com xz -k -v e um nível adequado à máquina.
  • Limite as threads com -T1 ou -T2 em um servidor ativo.
  • Teste o arquivo com xz -t e exija um código de retorno 0.
  • Calcule uma impressão sha256sum antes e depois de cada transferência.
  • Teste a extração em uma pasta separada antes de substituir um arquivo importante.

xz é útil quando o espaço em disco ou a largura de banda custam mais caro do que o tempo de CPU. Não substitui uma estratégia de backup, uma impressão mantida com o arquivo e um teste de restauração realizado antes de um incidente.