Dovresti dare un'occhiata a btrfs quota
e btrfs qgroups
(gruppi di quote).
Fondamentalmente qgroups
fanno esattamente quello che hai richiesto, tengono traccia di quanto spazio è allocato dai sottovolumi. Per abilitare la qgroup
funzionalità per un btrfs
filesystem è necessario
# btrfs quota enable /path/to/btrfs/filesystem
Tuttavia, prima di farlo, tieni presente che ciò innesca un completo ricalcolo dei qgroup
dati che richiederà del tempo, specialmente per i filesystem di grandi dimensioni con molti sottovolumi. Questo processo viene eseguito in modo asincrono in background. Puoi già controllare lo stato di qgroups
con
# btrfs qgroup show /path/to/btrfs/filesystem
Questo ti darà un output come questo:
WARNING: rescan is running, qgroup data may be incorrect
qgroupid rfer excl
-------- ---- ----
0/5 843.69GiB 61.91MiB
0/4881 811.06GiB 9.34GiB
0/7990 867.32GiB 329.91MiB
0/8400 867.17GiB 37.64MiB
(L'avviso nella prima riga è presente fino a quando il rescan è ancora in esecuzione.)
Btrfs crea automaticamente a qgroup
per ogni sottovolume. In questo caso ci sono tre sottovolumi con ID sottovolume 4881, 7990 e 8400. La parte prima della barra è il livello di qgroup
. Ogni sottovolume si qgroup
trova al livello 0. Inoltre c'è uno speciale qgroup
al livello 0 che ha sempre ID 5 e corrisponde alla radice del filesystem btrfs.
Per ognuno qgroup
l'output sopra mostra quanto spazio fa riferimento a esso. Ciò significa che il sottovolume corrispondente contiene file la cui dimensione totale è uguale al numero mostrato.
Tuttavia, a causa di istantanee e la natura copia su scrittura dei sottovolumi btrfs possono condividere file. Ciò significa che il contenuto (o effettivamente l'estensione) dei file può essere referenziato da più sottovolumi. Questo è espresso dal secondo numero che mostra quanto spazio è allocato esclusivamente da ciascun sottovolume e non è condiviso con nessun altro sottovolume. Nel caso in cui si elimini un sottovolume questo è lo spazio che verrà effettivamente liberato.
Se vuoi scoprire quanto spazio verrebbe liberato se elimini più sottovolumi, puoi usare i livelli sopra menzionati. qgroups
sono organizzati in una gerarchia e gruppi di livello superiore (superiore a 0) aggregano le informazioni di livello inferiore.
Quindi, per scoprire quanto spazio verrebbe liberato se i sottovolumi 4881 e 7990 (nell'esempio precedente) venissero eliminati creane uno nuovo qgroup
(arbitrariamente con ID 0, ma puoi scegliere quello che ti piace qui) al livello 1 con
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
Quindi assegnare il nuovo creato qgroup
come genitore al qgroups
sottovolume che si desidera eliminare
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
Ciò attiverà un'altra nuova scansione delle informazioni sulla quota che potrebbe richiedere del tempo. Se è finito e ora emetti
# btrfs qgroup show -p /path/to/btrfs/filesystem
ottieni un output come questo:
qgroupid rfer excl parent
-------- ---- ---- ------
0/5 1.38TiB 2.51GiB ---
0/4881 1.11TiB 10.86GiB 1/0
0/7990 1.23TiB 502.41MiB 1/0
0/8400 1.34TiB 1.69GiB 1/0
1/0 1.51TiB 132.23GiB ---
(Ho aggiunto il -p
flag per aggiungere la parent
colonna all'output che mostra la relazione padre / figlio del qgroups
.)
Ora la linea con qgroup
1/0
ti dice quanto spazio fa riferimento a entrambi i sottovolumi che vuoi eliminare e, cosa ancora più importante, ti dice quanto spazio è allocato da loro esclusivamente . Questa è la quantità di spazio che verrà liberata se si eliminano entrambi i volumi secondari.
Mi chiedo anche perché stiano dicendo che sarebbe così lento?
Ciò è dovuto alla natura copy-on-write di btrfs insieme alle istantanee. Se si crea un'istantanea in btrfs (normalmente) tutti i dati effettivi nel sottovolume appena creato che contiene l'istantanea vengono condivisi con l'origine dell'istantanea. Solo quando un file viene modificato o sostituito nell'origine punta a contenuti diversi (estensioni). Ciò rende molto difficile valutare la quantità di spazio che verrebbe effettivamente liberata se un sottovolume viene eliminato perché è necessario tenere conto di tutto lo spazio condiviso con altri sottovolumi.