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

banner

Indice


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

ElementoDescrizioneAccumulo tipico
ImmaginiImmagini scaricate con podman pull o create con podman buildAlto
Immagini danglingImmagini intermedie senza tag (<none>) da build ripetuteMolto alto
Container fermatiContainer in stato “exited” che mantengono il loro layer scrivibileMedio
Volumi orfaniVolumi non più associati a nessun containerMedio
Cache di buildLayer intermedi cachati durante le build multi-stageAlto

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:

MetricaPrimaDopo
Spazio logico recuperato (prune)23,27 GB
Dimensione VHDX188,96 GB31,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).

Riferimenti utili

Bio autore

Serena Sensini - Ciao! Mi chiamo Serena Sensini e sono la creatrice di @ TheRedCode.

TheRedCode.it - Il mondo #tech a piccoli #bit

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Welyk
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls Italy
Logo di Improove
Logo de Il Libro Open Source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di DevDojo

Vuoi diventare tech content creator? 🖊️

Se ti va di raccontare la tua esperienza nel mondo tech, questo è il posto giusto.

Cerchiamo voci autentiche, esempi pratici e punti di vista utili per chi legge.

Scrivici a collaborazioni[at]theredcode.it con una proposta: idea, taglio del contenuto e una breve presentazione. Non vediamo l'ora di leggere la tua esperienza!

Invia la tua idea