cleaning_services Windows

WSL: liberare spazio disco con apt-get clean e journalctl

calendar_today personTeam EGSOFT schedule5 min di lettura
info

Disclaimer: le informazioni pubblicate in questa sezione hanno finalità di pura divulgazione tecnica. EG Software S.r.l. non si assume alcuna responsabilità per un utilizzo improprio dei contenuti, né per eventuali danni diretti o indiretti derivanti dalla loro applicazione, e non garantisce l'aggiornamento, l'accuratezza o la completezza delle informazioni riportate. Prima di utilizzare in produzione codice o procedure qui descritte, verificane sempre l'adeguatezza al proprio contesto.

Il problema: WSL2 cresce ma non si compatta da solo

WSL2 (Windows Subsystem for Linux versione 2) gira su una macchina virtuale leggera e usa un file di disco virtuale — il VHD (Virtual Hard Disk) — con estensione .vhdx, situato tipicamente in:

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu...\LocalState\ext4.vhdx

Questo file cresce automaticamente man mano che installi pacchetti, aggiorni il sistema e accumuli log. Il problema è che non si riduce da solo: anche dopo aver cancellato file all'interno di WSL, il .vhdx rimane delle stesse dimensioni su Windows.

I due comandi nella citazione iniziale affrontano la prima parte del problema — liberare spazio all'interno del filesystem Linux — ma da soli non bastano.

Comando 1: sudo apt-get clean

APT (Advanced Package Tool), il gestore di pacchetti di Ubuntu/Debian, conserva una copia locale di ogni pacchetto .deb scaricato in:

/var/cache/apt/archives/

Questa cache permette di reinstallare un pacchetto senza riscaricare, ma su WSL è raramente utile. Il comando apt-get clean svuota completamente questa cartella.

sudo apt-get clean

Variante alternativa che mantiene i pacchetti installati di recente:

sudo apt-get autoclean

Quanto spazio libera? Dipende da quanti aggiornamenti hai eseguito senza mai pulire. Può variare da poche decine di MB a oltre 500 MB su sistemi che non vengono puliti da mesi.

Puoi verificare la dimensione della cache prima di pulire con:

du -sh /var/cache/apt/archives/

Comando 2: sudo journalctl --vacuum-time=7d

journalctl è il tool per leggere i log del sistema gestiti da systemd-journald. Il comando --vacuum-time=7d elimina i log più vecchi di 7 giorni.

sudo journalctl --vacuum-time=7d

Nota importante: questo comando è efficace solo se systemd è abilitato in WSL. Per verificarlo:

cat /etc/wsl.conf

Cerca la sezione [boot] con systemd=true. Se non è presente, WSL usa un init minimale e i log journal sono quasi assenti — il comando viene eseguito senza errori ma libera poco o nulla.

Per abilitare systemd in WSL2 (richiede WSL versione 0.67.6+), aggiungi o crea il file:

sudo nano /etc/wsl.conf
[boot]
systemd=true

Poi riavvia WSL: wsl --shutdown da PowerShell, seguito da una nuova apertura del terminale.

Altre varianti utili del vacuum:

# Mantieni al massimo 500 MB di log
sudo journalctl --vacuum-size=500M

# Mantieni al massimo 14 giorni di log
sudo journalctl --vacuum-time=14d

Il passo che molti dimenticano: compattare il VHD

Dopo aver liberato spazio dentro WSL, il file .vhdx su Windows ha ancora la dimensione precedente. Per recuperare effettivamente spazio su disco occorre compattare il VHD.

Metodo 1 — wsl --compact (Windows 11 22H2+)

Il modo più semplice, disponibile nelle versioni recenti di Windows 11:

# In PowerShell (come amministratore)
wsl --shutdown
wsl --compact

Il comando --shutdown è necessario per smontare il VHD prima della compattazione.

Metodo 2 — diskpart (tutte le versioni)

Funziona anche su Windows 10 e versioni precedenti di Windows 11:

# In PowerShell (come amministratore)
wsl --shutdown
diskpart

All'interno di diskpart:

select vdisk file="C:\Users\TuoNome\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu...\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

Sostituisci il percorso con quello effettivo del tuo .vhdx — lo trovi cercando ext4.vhdx in Esplora File o con:

Get-ChildItem "$env:LOCALAPPDATA\Packages" -Recurse -Filter "ext4.vhdx" -ErrorAction SilentlyContinue | Select-Object FullName

Script bash completo: pulizia WSL in un colpo solo

Puoi salvare questo script in WSL come ~/clean-wsl.sh ed eseguirlo periodicamente:

#!/bin/bash
# Pulizia cache apt e log journal in WSL
echo "=== Cache APT ==="
before=$(du -sh /var/cache/apt/archives/ 2>/dev/null | cut -f1)
sudo apt-get clean
echo "Liberato: $before → $(du -sh /var/cache/apt/archives/ 2>/dev/null | cut -f1)"

echo ""
echo "=== Log journal ==="
if systemctl is-active systemd-journald &>/dev/null; then
    sudo journalctl --vacuum-time=7d
else
    echo "systemd non attivo — skip journal vacuum"
fi

echo ""
echo "Pulizia completata. Ricorda di eseguire 'wsl --compact' da PowerShell per recuperare spazio su Windows."

Rendilo eseguibile con: chmod +x ~/clean-wsl.sh

Riepilogo

Azione Dove agisce Spazio recuperato su Windows?
apt-get clean Cache pacchetti deb Solo dopo wsl --compact
journalctl --vacuum-time Log systemd journal Solo dopo wsl --compact
wsl --compact / diskpart File .vhdx su Windows Sì, direttamente

I due comandi Linux preparano il terreno liberando spazio all'interno del filesystem WSL; wsl --compact o diskpart traduce quel guadagno in spazio reale visibile su Windows.

cleaning_servicesAltri articoli su Windows grid_viewTutti gli articoli
Scrivici su WhatsApp