Comprender el comportamiento de uso de metadatos en un sistema de archivos btrfs recién convertido

Comprender el comportamiento de uso de metadatos en un sistema de archivos btrfs recién convertido

Tengo un disco duro de 5 TB con 3,3 TiB (según lo informado por du) de archivos multimedia en archivos y directorios de 119k; el tamaño medio de archivo era de unos 28 MiB. Convertí la partición ext4 en btrfs con btrfs-convert. El proceso tardó 10,4 horas y dependía de la CPU. Inmediatamente después de la conversión:

# btrfs fi df /mnt/btrfs/
Data, single: total=3.03TiB, used=2.21TiB
System, single: total=32.00MiB, used=236.00KiB
Metadata, single: total=1.52TiB, used=1.10TiB

btrfs asignó todo el espacio en el disco duro (3,03 + 1,52 TiB ≈ 5 TB), y aparentemente colocó ~1 TiB de contenido de archivo en fragmentos de metadatos (se utilizaron 1,10 TiB). Esto es inesperado porque muy pocos de mis archivos encajarían en los nodos hoja.

La solución estándar a la enorme asignación de metadatos es reequilibrar los metadatos. btrfs balance start -mtomó 8,0 horas y estaba vinculado a E/S. Posteriormente, parece que btrfs no solo liberó fragmentos de metadatos no utilizados, sino que también movió el contenido del archivo de fragmentos de metadatos a fragmentos de datos.

# btrfs fi df /mnt/btrfs/
Data, single: total=3.32TiB, used=3.31TiB
System, single: total=32.00MiB, used=104.00KiB
Metadata, single: total=3.00GiB, used=2.18GiB

¿Alguien podría explicar qué está pasando? ¿Por qué los "metadatos" consumirían 1,10 TiB inicialmente y por qué el equilibrio los reduciría a 2,18 GiB? ¿ btrfs balanceMueve el contenido del archivo de fragmentos de metadatos a fragmentos de datos?

Usé el kernel de Linux 3.13.0-46. Mis archivos no tienen enlaces físicos, xattrs, contextos SELinux ni ACL. No activé la compresión y no eliminé la imagen de reversión ext4.

Respuesta1

Primero, el proceso de conversión guarda una copia de todos los metadatos del sistema anterior en los nuevos metadatos, lo que puede ocupar una cantidad sustancial de espacio en unidades grandes.

En segundo lugar, el proceso de conversión es complicado, lo que da como resultado extensiones extremadamente grandes, ya que las extensiones en EXT4 también son grandes y BTRFS será inherente a su tamaño.

El tamaño asignado pasa a ser aproximadamente 1,5 veces el tamaño del tamaño de metadatos utilizado. El proceso de desfragmentación reducirá el tamaño de los metadatos utilizados, pero no cambiará la asignación. También existe una opción de extensiones reducidas para reducir aún más los metadatos, pero es más útil en sistemas con grandes cantidades de archivos pequeños; su asignación de metadatos es inferior a una décima parte por ciento, lo cual es muy pequeño.

Se supone que el comando de equilibrio reduce el tamaño de la asignación a un nuevo valor en función del uso actual de metadatos, lo que parece haber hecho correctamente. Se supone que el comando de equilibrio no debe pasar de metadatos a datos, pero eso puede tener algo que ver con que la copia de la imagen de metadatos EXT4 original esté en la asignación de metadatos original y ahora se haya movido a datos (subvolumen ext2_saved). Verifique el tamaño de la imagen EXT4 para ver si es de 1,1 TB. De todos modos, desfragmentaría el sistema de archivos.

Cabe señalar que ejecutar Balance sin desfragmentar puede provocar errores. Se recomiendan versiones más nuevas del kernel para evitar problemas con el sistema de archivos, específicamente la 3.17 y posteriores.

información relacionada