Gestire lo spazio disco di Podman su Windows (WSL2): guida completa

Indice
- Come funziona l’allocazione dello spazio
- Analisi dello spazio occupato
- Procedura di pulizia e recupero spazio
- Prevenzione
Come funziona l’allocazione dello spazio
Architettura Podman su Windows
Podman su Windows utilizza WSL2 (Windows Subsystem for Linux 2) per eseguire i container. L’architettura è la seguente:
Windows Host
└── WSL2
└── Distribuzione "podman-machine-default"
└── Filesystem ext4 (dentro un file VHDX)
├── Immagini container
├── Layer intermedi (da build)
├── Container (attivi e fermati)
├── Volumi
└── Cache di build
Il file VHDX
Quando lo spazio occupato cresce senza mai diminuire, il cuore del problema risiede nel file VHDX che contiene il filesystem della distribuzione WSL2 usata da Podman. Il percorso di questo file è:
%USERPROFILE%\.local\share\containers\podman\machine\wsl\wsldist\podman-machine-default\ext4.vhdx
Questo è un disco virtuale dinamico (Virtual Hard Disk eXtended) che:
- Cresce automaticamente quando si scrivono dati (pull di immagini, build, creazione container)
- NON si riduce automaticamente quando i dati vengono cancellati
Questo comportamento è by-design di WSL2/Hyper-V: il VHDX alloca nuovi blocchi quando servono, ma non li rilascia quando vengono liberati all’interno del filesystem guest.
Cosa occupa spazio
| Elemento | Descrizione | Accumulo tipico |
|---|---|---|
| Immagini | Immagini scaricate con podman pull o create con podman build | Alto |
| Immagini dangling | Immagini intermedie senza tag (<none>) da build ripetute | Molto alto |
| Container fermati | Container in stato “exited” che mantengono il loro layer scrivibile | Medio |
| Volumi orfani | Volumi non più associati a nessun container | Medio |
| Cache di build | Layer intermedi cachati durante le build multi-stage | Alto |
Struttura della cartella WSL di Podman
Se volessi esplorare manualmente la cartella di Podman su Windows, la struttura è la seguente:
~\.local\share\containers\podman\machine\wsl\
├── wsldist\
│ └── podman-machine-default\
│ └── ext4.vhdx ← IL DISCO VIRTUALE (può crescere enormemente)
├── podman-machine-default-amd64 ← Immagine base della distribuzione (~770 MB)
└── cache\
└── *.tar.zst ← Cache dei download (~230 MB)
Analisi dello spazio occupato
Immagina che il tuo disco di sistema principale sia occupato per 2/3 da Podman, ma non riesci a capire cosa sta occupando tutto quello spazio. Ecco come analizzare la situazione:
1. Verificare la dimensione del VHDX
$vhdx = "$env:USERPROFILE\.local\share\containers\podman\machine\wsl\wsldist\podman-machine-default\ext4.vhdx"
$sizeGB = [math]::Round((Get-Item $vhdx).Length / 1GB, 2)
Write-Host "Dimensione VHDX: $sizeGB GB"
Questo comando ti darà la dimensione attuale del file VHDX, che rappresenta lo spazio fisico occupato su disco. Se è molto grande (es. > 50 GB), è un segnale che c’è molto spazio allocato dentro la VM.
Un’alternativa è quella di usare strumenti come Treesize, che mostrano la dimensione dei file e cartelle su Windows, anche se spesso non riescono a interpretare correttamente i file VHDX, mostrando solo la dimensione del file stesso (es. 200 GB) senza indicare lo spazio effettivamente utilizzato all’interno.
2. Verificare cosa occupa spazio dentro Podman
A questo punto, ci rivolgiamo a Podman: cosa sta occupando spazio dentro la VM? Usiamo i comandi di sistema per analizzare l’occupazione:
# Riepilogo generale dello spazio usato
podman system df
>>>
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B (0%)
Containers 0 0 0B 0B (0%)
Local Volumes 0 0 0B 0B (0%)
# Dettaglio per singola immagine/container/volume
podman system df -v
Nell’esempio, non ci sono immagini o container attivi, ma se ci fossero, potresti vedere la dimensione totale e quanto di essa è recuperabile (reclaimable) cancellando le risorse non più necessarie.
3. Elencare le immagini dangling (senza tag)
Spesso capita che, nell’eseguire la build di un’immagine, vengano creati layer intermedi che non vengono più referenziati da nessuna immagine taggata. Questi layer “dangling” occupano spazio ma non sono visibili con un semplice podman images.
podman images -f "dangling=true"
Questo comando mostrerà tutte le immagini intermedie che non hanno un tag associato e che possono essere rimosse in sicurezza.
4. Elencare i container arrestati
Altrettanto importante è verificare se ci sono container in stato “exited” che occupano spazio. Anche se non sono attivi, mantengono il loro layer scrivibile e possono occupare spazio significativo.
podman ps -a -f "status=exited"
5. Elencare i volumi orfani
Ultimo, ma non ultimo, i volumi “orfani”: sono quelli che non sono più associati a nessun container. Possono essere rimossi in sicurezza se non contengono dati importanti. Per verificarne la presenza:
podman volume ls -f "dangling=true"
Procedura di pulizia e recupero spazio
Ora che abbiamo identificato cosa sta occupando spazio, è il momento di liberarlo. La procedura è divisa in due fasi: una prima dedicata a rimuovere tutto ciò che non è uso, utilizzando il comando podman prune, e una seconda fase dedicata alla compattazione del VHDX per recuperare lo spazio fisico su disco.
Fase 1 — Pulizia logica dentro Podman
Questa fase rimuove i dati non più necessari dall’interno della VM. È un’operazione sicura: non cancella immagini in uso o container attivi. Infatti, rimuove container arrestati, immagini non referenziate, volumi orfani e cache di build.
podman system prune -a -f
Nota: Se vuoi preservare le immagini taggate e rimuovere solo quelle dangling:
podman system prune -f # senza -a
Dopo aver eseguito questo step, verifica lo spazio recuperato:
podman system df
Se il risultato non è soddisfacente, procedi con la Fase 2 per recuperare lo spazio fisico su disco.
Fase 2 — Compattazione del VHDX
Dopo la Fase 1, lo spazio è stato liberato dentro il filesystem della VM, ma il file VHDX su Windows mantiene la stessa dimensione. Bisogna compattarlo esplicitamente.
Prerequisiti
- Arrestare l’esecuzione di tutti i container in esecuzione
- Avere privilegi di amministrazione su Windows
Procedura
# 1. Ferma la macchina Podman
podman machine stop
# 2. Chiudi completamente WSL (rilascia il lock sul VHDX)
wsl --shutdown
# 3. Prepara lo script per diskpart
$vhdxPath = "$env:USERPROFILE\.local\share\containers\podman\machine\wsl\wsldist\podman-machine-default\ext4.vhdx"
@"
select vdisk file="$vhdxPath"
attach vdisk readonly
compact vdisk
detach vdisk
exit
"@ | Set-Content "$env:TEMP\compact_vhdx.txt"
# 4. Esegui diskpart come amministratore
# (Si aprirà una finestra UAC per conferma)
Start-Process -FilePath "diskpart.exe" -ArgumentList "/s $env:TEMP\compact_vhdx.txt" -Verb RunAs -Wait
# 5. Verifica la nuova dimensione
$newSize = [math]::Round((Get-Item $vhdxPath).Length / 1GB, 2)
Write-Host "Nuova dimensione VHDX: $newSize GB"
# 6. Riavvia la macchina Podman
podman machine start
Questa operazione farà sì che il file VHDX venga compattato, liberando lo spazio fisico su disco corrispondente allo spazio logico liberato all’interno della VM. Ci vorrà qualche minuto, a seconda della dimensione del VHDX e della quantità di spazio da recuperare, quindi pazienta!
Il VHDX si ridurrà proporzionalmente allo spazio effettivamente libero all’interno del filesystem. Esempio reale per dare un’idea dell’impatto:
| Metrica | Prima | Dopo |
|---|---|---|
| Spazio logico recuperato (prune) | — | 23,27 GB |
| Dimensione VHDX | 188,96 GB | 31,21 GB |
| Spazio totale recuperato | — | ~158 GB |
Fase 3 (opzionale) — Ricreare la macchina da zero
Se la compattazione non è sufficiente o si vuole ripartire da una situazione pulita, si possono seguire questi passaggi per eliminare completamente la macchina Podman e ricrearla con un disco di dimensione limitata:
# ⚠️ ATTENZIONE: cancella TUTTE le immagini, container e volumi!
podman machine stop
podman machine rm podman-machine-default
podman machine init --disk-size 50 # limita a 50 GB il massimo
podman machine start
Tip: Pulizia aggiuntiva — Cache di download
La cartella cache contiene i file scaricati per creare la VM. Può essere eliminata in sicurezza (~230 MB):
Remove-Item "$env:USERPROFILE\.local\share\containers\podman\machine\wsl\cache" -Recurse -Force
Verrà ricreata automaticamente solo se si inizializza una nuova macchina.
Tip: Abilitare il VHDX sparse (rilascio automatico dello spazio)
Da WSL 2.0+ è disponibile l’opzione sperimentale sparseVhd che rende il disco virtuale in grado di restituire automaticamente lo spazio liberato, eliminando la necessità di compattazione manuale.
⚠Importante: questa opzione deve essere abilitata prima della creazione della distribuzione WSL per avere effetto.
Aggiungere al file %USERPROFILE%\.wslconfig:
[wsl2]
[experimental]
sparseVhd=true
Dopo aver modificato il file:
# Riavviare WSL per applicare la configurazione
wsl --shutdown
# Se necessario, ricreare la macchina Podman per beneficiare del nuovo formato
podman machine stop
podman machine rm podman-machine-default
podman machine init --disk-size 50
podman machine start
Con questa opzione attiva, il VHDX rilascerà automaticamente i blocchi non più utilizzati, rendendo superflua la Fase 2 (compattazione con diskpart).












