Debe echar un vistazo a btrfs quota
y btrfs qgroups
(grupos de cuotas).
Básicamente, qgroups
haga exactamente lo que solicitó, realizan un seguimiento de la cantidad de espacio asignado por subvolúmenes. Para habilitar la qgroup
funcionalidad de un btrfs
sistema de archivos, debe
# btrfs quota enable /path/to/btrfs/filesystem
Sin embargo, antes de hacer esto, tenga en cuenta que esto desencadena un recálculo completo de los qgroup
datos, lo que llevará algún tiempo, especialmente para sistemas de archivos grandes con muchos subvolúmenes. Este proceso se ejecuta de forma asíncrona en segundo plano. Ya puede verificar el estado de la qgroups
con
# btrfs qgroup show /path/to/btrfs/filesystem
Esto le dará un resultado como este:
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
(La advertencia en la primera línea está presente mientras el reescaneo aún se esté ejecutando).
Btrfs crea automáticamente un qgroup
para cada subvolumen. En este caso, hay tres subvolúmenes con ID de subvolumen 4881, 7990 y 8400. La parte anterior a la barra diagonal es el nivel de qgroup
. Cada subvolumen qgroup
está en el nivel 0. Además, hay un especial qgroup
en el nivel 0 que siempre tiene ID 5 y corresponde a la raíz del sistema de archivos btrfs.
Para cada uno, qgroup
el resultado anterior muestra la cantidad de espacio al que hace referencia. Eso significa que el subvolumen correspondiente contiene archivos cuyo tamaño total es igual al número mostrado.
Sin embargo, debido a las instantáneas y la naturaleza de copiar y escribir de los subvolúmenes btrfs pueden compartir archivos. Esto significa que el contenido (o en realidad la extensión) de los archivos puede estar referenciado por más de un subvolumen. Esto se expresa mediante el segundo número que muestra cuánto espacio se asigna exclusivamente a cada subvolumen y no se comparte con ningún otro subvolumen. En caso de que elimine un subvolumen, este es el espacio que realmente se liberará.
Si desea averiguar cuánto espacio se liberaría si elimina varios subvolúmenes, puede usar los niveles antes mencionados. qgroups
están organizados en una jerarquía y los grupos en los niveles superiores (superiores a 0) agregan la información de los niveles inferiores.
Por lo tanto, para averiguar cuánto espacio se liberaría si se eliminaran los subvolúmenes 4881 y 7990 (en el ejemplo anterior), cree un nuevo qgroup
(arbitrariamente con ID 0, pero puede elegir lo que quiera aquí) en el nivel 1 con
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
Luego asigne el recién creado qgroup
como padre al qgroups
subvolumen que desea eliminar con
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
Esto activará otra nueva exploración de la información de la cuota que puede demorar un poco. Si está terminado y ahora emite
# btrfs qgroup show -p /path/to/btrfs/filesystem
obtienes una salida como esta:
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 ---
(Agregué la -p
bandera para agregar la parent
columna a la salida que muestra la relación padre / hijo del qgroups
.)
Ahora la línea con qgroup
1/0
le indica cuánto espacio hace referencia a los dos subvolúmenes que desea eliminar y, lo que es más importante, le indica cuánto espacio le asignan exclusivamente . Esta es la cantidad de espacio que se liberará si elimina ambos subvolúmenes.
También me pregunto por qué dicen que sería tan lento.
Esto se debe a la naturaleza de copia en escritura de btrfs junto con las instantáneas. Si crea una instantánea en btrfs (normalmente), todos los datos reales en el subvolumen recién creado que contiene la instantánea se comparten con la fuente de la instantánea. Solo cuando se cambia o reemplaza un archivo en el origen, señala a contenido diferente (extensiones). Esto hace que sea muy difícil evaluar cuánto espacio se liberaría realmente si se elimina un subvolumen porque debe tener en cuenta todo el espacio que se comparte con otros subvolúmenes.