¿Hay alguna manera de calcular cuánto espacio liberaría si eliminara uno (o varios) subvolúmenes en un disco Btrfs (sin eliminarlos realmente)? Sé que "actualmente no hay ningún código que haga el cálculo por usted" , pero ¿cómo lo haría?
También me pregunto por qué dicen que sería tan lento. En realidad, tanto eliminar un subvolumen como preguntar sobre el espacio libre es muy rápido, ¿por qué hacer lo mismo hipotéticamente sería mucho más lento?
Respuestas:
Debe echar un vistazo a
btrfs quota
ybtrfs 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 laqgroup
funcionalidad de unbtrfs
sistema de archivos, debeSin 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 laqgroups
conEsto le dará un resultado como este:
(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 deqgroup
. Cada subvolumenqgroup
está en el nivel 0. Además, hay un especialqgroup
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 conLuego asigne el recién creado
qgroup
como padre alqgroups
subvolumen que desea eliminar conEsto activará otra nueva exploración de la información de la cuota que puede demorar un poco. Si está terminado y ahora emite
obtienes una salida como esta:
(Agregué la
-p
bandera para agregar laparent
columna a la salida que muestra la relación padre / hijo delqgroups
.)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.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.
fuente