Devi comprimere un’immagine disco, un dump SQL, un’esportazione CSV o un backup grezzo prima di un trasferimento. xz riduce spesso meglio la dimensione rispetto a gzip, ma consuma più CPU e può richiedere molta memoria con i livelli elevati.
Utilizza xz per un singolo file, grande e poco compresso. Evitalo per una foto JPEG, un video MP4, un archivio .zip, un pacchetto .deb o un file il cui nome termina già con .gz, .xz o .zst.
Le fasi di seguito coprono la creazione di un archivio .xz, la conservazione del file sorgente, il test di integrità, la scelta del livello di compressione e la verifica di una copia remota.

Controllare che xz sia disponibile
La maggior parte delle distribuzioni installa xz di default tramite il pacchetto xz-utils o xz. Controlla il comando prima di integrarlo in una procedura di backup.
xz --version
Su Debian, Ubuntu e Linux Mint, installa il pacchetto se il comando è assente.
sudo apt update
sudo apt install xz-utils
Su Fedora, AlmaLinux o Rocky Linux, installa il pacchetto con dnf.
sudo dnf install xz
Scegliere xz, gzip o zip
xz comprime un file singolo con LZMA2. È adatto per un dump SQL, un’esportazione di testo, un’immagine disco non compressa, un file di log consolidato o un archivio .tar già creato.
- Scegli xz quando il guadagno in dimensione conta più della velocità.
- Scegli gzip quando desideri una compressione rapida in uno script, in una pipeline o in una rotazione dei log.
- Scegli zip quando devi raggruppare più file in un formato facile da aprire su Windows.
- Scegli tar prima di xz quando devi preservare una struttura Linux con le sue directory, nomi e permessi.
xz da solo non raggruppa più file. Per comprimere una cartella, crea prima un archivio tar, quindi comprimi con xz.
tar -cf progetto.tar progetto/
xz -k progetto.tar
Il comando tar può anche creare direttamente progetto.tar.xz.
tar -cJf progetto.tar.xz progetto/
Controllare il file prima della compressione
Controlla il tipo e la dimensione del file prima di una compressione lunga. Un file già compresso può monopolizzare la CPU per un guadagno quasi nullo.
file backup.sql
ls -lh backup.sql
Se file indica gzip compressed data, XZ compressed data, Zip archive data, JPEG image data o ISO Media, prova prima su un piccolo campione.
Comprimere mantenendo il file sorgente
Senzo opzione, xz backup.sql sostituisce backup.sql con backup.sql.xz. Aggiungi -k per mantenere l’originale durante i controlli.
xz -k backup.sql
Aggiungi -v per visualizzare il progresso, il rapporto e le informazioni utili durante l’esecuzione.
xz -k -v backup.sql
Controlla quindi che entrambi i file esistano e confronta la loro dimensione.
ls -lh backup.sql backup.sql.xz
Non eliminare l’originale solo perché il file .xz esiste. Prova l’archivio e valida il ripristino prima di qualsiasi eliminazione.
Scegliere un livello di compressione
Il livello predefinito di xz è -6. Spesso offre un buon rapporto, ma non è sempre adatto a una macchina poco potente o a un ripristino urgente.
- Utilizza
-1a-3quando la velocità conta e il guadagno massimo non è una priorità. - Mantieni
-6per un uso generale su una macchina confortevole. - Riserva
-7a-9ai file voluminosi che archivi raramente e che potrai anche decomprimere su una macchina sufficientemente equipaggiata.
xz -3 -k export.csv
xz -6 -k backup.sql
xz -9 -k archive.img
I livelli elevati possono aumentare la memoria necessaria per la compressione e la decompressione. Evita -9 per un archivio che dovrà essere aperto su un piccolo VPS, una macchina vecchia o un sistema di emergenza minimo.
Limitare l’uso della CPU su un server
L’opzione -T fissa il numero di thread. -T0 utilizza tutti i core disponibili, il che può rallentare un database, un server web o contenitori attivi.
xz -6 -T2 -k backup.sql
Su una macchina di produzione, inizia con -T1 o -T2. Monitora il carico, quindi aumenta solo se il server rimane reattivo.
uptime
top
Per una compressione programmata, eseguila al di fuori delle ore di punta e controlla lo spazio libero prima di iniziare. L’opzione -k mantiene due file e richiede più spazio su disco.
df -h .
Testare l’integrità dell’archivio
Testa sempre l’archivio con xz -t prima di eliminare l’originale o di convalidare un backup. Il comando legge e decompattura i dati in memoria senza creare un file di output.
xz -t backup.sql.xz
echo $?
Un codice di ritorno 0 indica che il test xz è riuscito. Un altro codice segnala un errore e impone di conservare il file sorgente.
Successivamente, visualizza le metadati dell’archivio per controllare la dimensione non compressa, la dimensione compressa, il rapporto e il tipo di controllo di integrità.
xz -l backup.sql.xz
xz -t verifica che l’archivio possa essere letto. Non prova che una copia remota sia identica al file locale.
Controllare un trasferimento con SHA-256
Calcola un’impronta SHA-256 prima del trasferimento, copia l’archivio, quindi ricalcola l’impronta sulla destinazione. Le due righe devono visualizzare lo stesso valore.
sha256sum backup.sql.xz
scp backup.sql.xz admin@server:/srv/archives/
ssh admin@server 'sha256sum /srv/archives/backup.sql.xz'
Conserva l’impronta con l’archivio se viene inviata su un disco esterno, uno storage oggetto o un altro server.
sha256sum backup.sql.xz > backup.sql.xz.sha256
Per controllare in seguito dalla stessa cartella, utilizza il file .sha256.
sha256sum -c backup.sql.xz.sha256
Decomprimere senza perdere l’archivio
unxz backup.sql.xz elimina l’archivio dopo l’estrazione. Aggiungi -k per mantenere il file .xz finché non hai controllato il contenuto ripristinato.
unxz -k backup.sql.xz
ls -lh backup.sql backup.sql.xz
Il comando equivalente con xz è utile negli script che già chiamano questo binario.
xz -d -k backup.sql.xz
Se il file di output esiste già, xz si rifiuta di sovrascriverlo senza -f. Non forzare l’estrazione prima di aver confrontato il percorso, la data, la dimensione e il reale bisogno di sostituzione.
ls -lh backup.sql backup.sql.xz
stat backup.sql
Per un ripristino prudente, decomprimi in una cartella separata e confronta il file ottenuto prima di sostituire un file di produzione.
mkdir -p /tmp/test-xz
cp backup.sql.xz /tmp/test-xz/
cd /tmp/test-xz
unxz -k backup.sql.xz
ls -lh backup.sql
Leggere un archivio senza creare un file
Per ispezionare rapidamente un file di testo compresso, invia il contenuto decompresso verso l’output standard con xzcat. Questo metodo evita di scrivere un file temporaneo voluminoso.
xzcat backup.sql.xz | head -20
Per cercare una stringa in un file di testo compresso, utilizza xzgrep invece di decomprimere l’intero archivio.
xzgrep -n "CREATE TABLE" backup.sql.xz
Non utilizzare questi comandi su un dump confidenziale se il tuo terminale registra l’output o se lavori in una sessione condivisa.
Procedura raccomandata per un backup
- Controlla il tipo del file con
filee la sua dimensione conls -lh. - Controlla lo spazio disponibile con
df -h .prima di usare-k. - Comprimi con
xz -k -ve un livello adatto alla macchina. - Limita i thread con
-T1o-T2su un server attivo. - Testa l’archivio con
xz -te richiedi un codice di ritorno0. - Calcola un’impronta
sha256sumprima e dopo ogni trasferimento. - Testa l’estrazione in una cartella separata prima di sostituire un file importante.
xz è utile quando lo spazio su disco o la larghezza di banda costa più del tempo della CPU. Non sostituisce una strategia di backup, un’impronta conservata con l’archivio e un test di ripristino eseguito prima di un incidente.