El sistema de archivos XFS recién creado muestra 78 GB utilizados

18

Tenemos una matriz RAID 6 de 12 TB que se supone que debe configurarse como una partición única con un sistema de archivos XFS . Al crear el nuevo sistema de archivos, dice que tiene 78 GB en uso, pero no hay archivos en la unidad.

[root@i00a ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         32G     0   32G   0% /dev
tmpfs            32G     0   32G   0% /dev/shm
tmpfs            32G   11M   32G   1% /run
tmpfs            32G     0   32G   0% /sys/fs/cgroup
/dev/sdb3       154G  3.9G  150G   3% /
/dev/sdb2      1014M  153M  862M  16% /boot
/dev/sdb1       599M  6.7M  593M   2% /boot/efi
/dev/sdc1       187G  1.6G  185G   1% /var
tmpfs           6.3G     0  6.3G   0% /run/user/0
/dev/sda1        11T   78G   11T   1% /export/libvirt

¿Hice algo mal? ¿Es esto por diseño?

Parece que el registro del sistema de archivos solo toma alrededor de 2 GB, y no puedo entender qué más podría estar usando el espacio.

[root@i00a ~]# xfs_info /export/libvirt/
meta-data=/dev/sda1              isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2929458688, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Información de partición:

[root@irb00a ~]# parted /dev/sda1
GNU Parted 3.2
Using /dev/sda1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Unknown (unknown)
Disk /dev/sda1: 12.0TB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system  Flags
 1      0.00B  12.0TB  12.0TB  xfs

Este es un Dell FX2 con cuatro nodos informáticos FC430 y dos nodos de almacenamiento FD332, que ejecuta Red Hat Enterprise Linux 8 ( Ootpa ).

yakatz
fuente
¿Está realmente vacío? Intentando reproducir (con una imagen de 12TB, configuración predeterminada de mkfs bsize=4096 blocks=2929687500) , el df -hresultado es Size 11T, Used 12G, no 78Gsegún su ejemplo. xfsdumpproduce un archivo de 21 KB ... ;-)
frostschutz
2
Ah, me di cuenta de que sí, reflink=1pero el valor predeterminado para mí fue reflink=0. Con reflink=1, también dice 78Gusado para mí, así que puedo reproducirlo ahora.
frostschutz
Parece que esto es así por diseño, pero si está seguro de que los reflinks no harán nada para su caso de uso, puede considerar desactivarlo.
frostschutz
No lo sé. Lo único aquí será archivos qcow2 para máquinas virtuales.
yakatz
Parece que algunas herramientas de libvirt admiten reflink, pero probablemente no valga la pena: stackoverflow.com/a/41968000/597234 Probablemente pueda ajustar una VM adicional completa en el espacio guardado.
yakatz

Respuestas:

2

Para XFS, el sistema de archivos vacío "Tamaño utilizado", como se muestra en, df -hparece depender mucho de las características de metadatos que habilite en ese mkfs.xfsmomento.

Prueba con un archivo vacío de 12 TB:

# truncate -s 12TB xfstest.img

Configuración predeterminada (en mi sistema ArchLinux actual):

# mkfs.xfs xfstest.img 
meta-data=xfstest.img            isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   12G   11T   1% /dev/shm/loop
# umount loop/

Utilizando reflink=1:

# mkfs.xfs -m reflink=1 -f xfstest.img
meta-data=xfstest.img            isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   78G   11T   1% /dev/shm/loop

Utilizando crc=0, reflink=0: (por alguna razón, que también gira finobt=0, sparse=0)

# mkfs.xfs -m reflink=0 -m crc=0 -f xfstest.img 
meta-data=xfstest.img            isize=256    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0, sparse=0, rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   33M   11T   1% /dev/shm/loop

En breve:

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   78G   11T   1% /dev/shm/loop (reflink=1, crc=1)
/dev/loop0       11T   12G   11T   1% /dev/shm/loop (reflink=0, crc=1)
/dev/loop0       11T   33M   11T   1% /dev/shm/loop (reflink=0, crc=0)

Por lo tanto, el espacio "usado" en un nuevo sistema de archivos de 12TB es 78G, 12G o tan bajo como 33M, dependiendo de las características de metadatos que habilite en el momento mkfs.

Frostschutz
fuente
RedHat 8 tiene reflinks=1por defecto
yakatz
24

Todos los sistemas de archivos tienen una sobrecarga para sus propias estructuras de datos internas. Esta información interna se utiliza para que el sistema de archivos cree archivos y directorios en el futuro, y para realizar un seguimiento de dónde está asignado todo. Estos datos se conocen colectivamente como "metadatos". Son datos "sobre" los datos en el sistema de archivos. Los metadatos se consideran una sobrecarga, ya que ocupa espacio pero no son datos del usuario. Esta sobrecarga es un efecto secundario inevitable del uso de cualquier sistema de archivos.

Según esta publicación de blog , XFS tiene una sobrecarga de alrededor del 0,5% del espacio total en disco. (Tenga en cuenta que esta publicación es de 2009, pero no hay razón para que esto haya cambiado drásticamente). Obtuvo ese resultado al probar la sobrecarga del sistema de archivos de más de una docena de sistemas de archivos diferentes utilizando guestfish.

El 0.5% de su espacio de 12TB es de 60GB, por lo que parece que está muy cerca del uso esperado. Sospecho que su número debería haber sido ligeramente superior al 0,5%, pero que fue redondeado.

Moshe Katz
fuente
99
Vale la pena señalar que algunos sistemas de archivos informan el tamaño completo asignado y luego cobran gastos generales de contabilidad en el espacio utilizado, mientras que otros restan la contabilidad del tamaño completo e informan solo el espacio de archivo como "usado".
Chrylis -on huelga-
3
Sobrecarga del sistema de archivos ... haciendo que la gente pregunte por qué sus discos duros no informan qué hay en la etiqueta desde 1983.
J ...
3
@J ... En realidad, el disco duro a menudo comercializa el tamaño usando 1GB = 1000MB en lugar de 1024MB. Por lo tanto, un HD comercializado a 512 GB es en realidad 12 GB más pequeño que el tamaño indicado. La TB empeora aún más, ya que usan 1TB = 1000 GB = 1000 * 1000 MB. Un HD de 1TB es realmente un 976GB en lugar de 1024GB. A 48 GB perdidos por la tuberculosis.
Justin Lessard
44
La diferencia en la medición de gigabytes (base 10) frente a gibibytes (base 2) no aparece como espacio utilizado en df.
yakatz
1
@JustinLessard Te olvidaste de los gastos generales en los niveles MiB y KiB. Un disco duro de 512 GB es en realidad más de 32 GiB más pequeño que un disco real de 512 GiB. Y en eso, una unidad de 1 TB es realmente más como 0.909 TiB cuando se consideran los gastos generales de TiB, GiB, MiB y KiB. (1 * 1000 ^ 4/1024 ^ 4) = 0.90949
penguin359