Il filesystem XFS appena creato mostra 78 GB usati


18

Abbiamo un array RAID 6 da 12 TB che dovrebbe essere impostato come singola partizione con un file system XFS . Durante la creazione del nuovo file system, dice che ha 78 GB in uso, ma non ci sono file sull'unità.

[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

Ho fatto qualcosa di male? Questo è di progettazione?

Sembra che il registro del file system occupi solo circa 2 GB e non riesco a capire cos'altro potrebbe usare lo spazio.

[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

Informazioni sulla partizione:

[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

Questo è un Dell FX2 con quattro nodi di calcolo FC430 e due nodi di archiviazione FD332, con Red Hat Enterprise Linux 8 ( Ootpa ).


È davvero vuoto? Tentare di riprodurre (con un'immagine da 12 TB, impostazioni mkfs predefinite bsize=4096 blocks=2929687500) il df -hrisultato è Size 11T, Used 12G, non 78Gcome nell'esempio. xfsdumpproduce un file di 21 KB ... ;-)
frostschutz,

2
Ah, ho notato che hai avuto, reflink=1ma l'impostazione predefinita per me era reflink=0. Con reflink=1, dice anche 78Gusato per me, quindi posso riprodurlo ora.
frostschutz,

Quindi sembra che questo sia di progettazione, ma se sei sicuro che i reflink non faranno nulla per il tuo caso d'uso, puoi considerare di disattivarlo.
frostschutz,

Non lo so. L'unica cosa qui saranno i file qcow2 per le macchine virtuali.
yakatz,

Sembra che alcuni strumenti di libvirt supportino il reflink, ma probabilmente non vale la pena: stackoverflow.com/a/41968000/597234 Probabilmente posso inserire un'intera VM aggiuntiva nello spazio risparmiato.
yakatz,

Risposte:


2

Per XFS, il file system vuoto "Dimensione utilizzata", come mostrato da, df -hsembra dipendere molto dalle caratteristiche dei metadati che abiliti in quel mkfs.xfsmomento.

Test con un file vuoto da 12 TB:

# truncate -s 12TB xfstest.img

Impostazioni predefinite (sul mio attuale sistema ArchLinux):

# 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/

Utilizzando 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

Utilizzando crc=0, reflink=0: (per qualche ragione, che si trasforma anche 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

In 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)

Quindi lo spazio "usato" su un nuovo filesystem da 12 TB è 78G, 12G o fino a 33M a seconda delle caratteristiche dei metadati abilitate al momento di mkfs.


RedHat 8 ha reflinks=1di default
yakatz

24

Tutti i filesystem hanno un sovraccarico per le proprie strutture di dati interne. Queste informazioni interne vengono utilizzate per il filesystem per creare file e directory in futuro e per tenere traccia di dove viene allocato tutto. Questi dati sono noti collettivamente come "metadati". Sono i dati "circa" i dati sul filesystem. I metadati sono considerati un sovraccarico, in quanto occupano spazio ma non sono dati dell'utente. Questo sovraccarico è un inevitabile effetto collaterale dell'utilizzo di qualsiasi filesystem.

Secondo questo post del blog , XFS ha un sovraccarico di circa lo 0,5% dello spazio totale su disco. (Nota che questo post è del 2009, ma non c'è motivo per cui questo avrebbe dovuto cambiare drasticamente). Ha ottenuto quel risultato testando l'overhead del filesystem di oltre una dozzina di filesystem diversi usando guestfish.

Lo 0,5% dello spazio di 12 TB è di 60 GB, quindi sembra che sia abbastanza vicino all'uso previsto. Sospetto che il suo numero avrebbe dovuto essere leggermente superiore allo 0,5%, ma che era arrotondato.


9
Vale la pena notare che alcuni filesystem riportano l'intera dimensione allocata e quindi caricano le spese generali di contabilità sullo spazio utilizzato, mentre altri sottraggono la contabilità dalle dimensioni complete e riportano solo lo spazio dei file come "usato".
Chrylis

3
Sovraccarico del filesystem ... facendo sì che le persone chiedano perché i loro dischi rigidi non riportano cosa c'è sull'adesivo dal 1983.
J ...

3
@J ... In realtà, il disco rigido spesso commercializza lì dimensioni utilizzando 1 GB = 1000 MB anziché 1024 MB. Quindi un HD commercializzato a 512 GB è in realtà 12 GB più piccolo delle dimensioni elencate. Peggiora ancora di più con la TB poiché usano 1 TB = 1000 GB = 1000 * 1000 MB. Un HD da 1 TB è in realtà un 976 GB anziché 1024 GB. Un enorme 48GB perso da TB.
Justin Lessard,

4
La differenza nella misurazione dei gigabyte (base 10) rispetto ai gibibyte (base 2) non viene visualizzata come spazio utilizzato in df.
yakatz,

1
@JustinLessard Hai dimenticato l'overhead a livello di MiB e KiB. Un disco rigido da 512 GB è in realtà più di 32 GiB più piccolo di un vero disco da 512 GiB. E su questo, un'unità da 1 TB è davvero più simile a 0.909 TiB quando tiene conto del sovraccarico di TiB, GiB, MiB e KiB. (1 * 1000 ^ 4/1024 ^ 4) = 0.90949
penguin359
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.