Das neu erstellte XFS-Dateisystem zeigt 78 GB an

18

Wir haben ein RAID 6-Array mit 12 TB, das als einzelne Partition mit einem XFS- Dateisystem eingerichtet werden soll. Beim Erstellen des neuen Dateisystems werden 78 GB verwendet, es befinden sich jedoch keine Dateien auf dem Laufwerk.

[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

Habe ich etwas falsch gemacht? Ist das beabsichtigt?

Es sieht so aus, als würde das Dateisystemprotokoll nur etwa 2 GB belegen, und ich kann nicht herausfinden, was den Speicherplatz sonst noch belegen könnte.

[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

Partitionsinformationen:

[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

Dies ist ein Dell FX2 mit vier FC430-Rechenknoten und zwei FD332-Speicherknoten, auf denen Red Hat Enterprise Linux 8 ( Ootpa ) ausgeführt wird.

Yakatz
quelle
Ist es wirklich leer? Beim Versuch, ein Bild mit 12 TB zu reproduzieren (Standardeinstellung für mkfs bsize=4096 blocks=2929687500), ist das df -hErgebnis Size 11T, Used 12Gnicht 78Gwie in Ihrem Beispiel. xfsdumperzeugt eine 21KB Datei ... ;-)
frostschutz
2
Ah, ich merke du hattest reflink=1aber der Standard für mich war reflink=0. Mit reflink=1, heißt es auch 78Ggebraucht für mich, damit ich es jetzt reproduzieren kann.
Frostschutz
Es scheint also so, als ob dies beabsichtigt wäre. Wenn Sie jedoch sicher sind, dass Rückverknüpfungen nichts für Ihren Anwendungsfall bewirken, können Sie es deaktivieren.
Frostschutz
Ich weiß es nicht. Das einzige, was hier zu sehen ist, sind qcow2-Dateien für virtuelle Maschinen.
Yakatz
Es sieht so aus, als ob einige libvirt-Tools das erneute Verknüpfen unterstützen, aber das ist die Mühe wahrscheinlich nicht wert: stackoverflow.com/a/41968000/597234 Ich kann wahrscheinlich eine ganze zusätzliche VM in den gesparten Speicherplatz einbauen .
Yakatz

Antworten:

2

Für XFS df -hscheint das von angezeigte leere Dateisystem "Verwendete Größe" in hohem Maße davon abhängig zu sein, welche Metadatenfunktionen Sie zur mkfs.xfsZeit aktivieren .

Testen mit einer leeren 12-TB-Datei:

# truncate -s 12TB xfstest.img

Standardeinstellungen (auf meinem aktuellen ArchLinux-System):

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

Verwenden von 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

Unter Verwendung crc=0, reflink=0(aus irgendeinem Grund, dass auch dreht 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

Zusamenfassend:

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

"Verwendeter" Speicherplatz auf einem neuen 12-TB-Dateisystem ist also 78G, 12G oder nur 33M, abhängig davon, welche Metadaten-Features Sie zur Zeit von mkfs aktivieren.

Frostschutz
quelle
RedHat 8 hat reflinks=1standardmäßig
Yakatz
24

Alle Dateisysteme haben einen Overhead für ihre eigenen internen Datenstrukturen. Diese internen Informationen werden für das Dateisystem verwendet, um künftig Dateien und Verzeichnisse zu erstellen und zu verfolgen, wo alles zugeordnet ist. Diese Daten werden zusammenfassend als "Metadaten" bezeichnet. Es sind Daten "über" die Daten im Dateisystem. Die Metadaten werden als Overhead betrachtet, da sie Speicherplatz beanspruchen, aber keine Benutzerdaten sind. Dieser Overhead ist ein unvermeidbarer Nebeneffekt bei der Verwendung eines Dateisystems.

Laut diesem Blogbeitrag hat XFS einen Overhead von rund 0,5% des gesamten Festplattenspeichers. (Beachten Sie, dass dieser Beitrag aus dem Jahr 2009 stammt, aber es gibt keinen Grund, warum dies drastisch geändert werden sollte.) Zu diesem Ergebnis kam er beim Testen des Dateisystem-Overheads von über einem Dutzend verschiedener Dateisysteme guestfish.

0,5% Ihres 12-TB-Speicherplatzes sind 60 GB groß. Dies scheint also ziemlich nahe an der erwarteten Nutzung zu liegen. Ich vermute, dass seine Zahl etwas höher als 0,5% gewesen sein sollte, aber dass es gerundet wurde.

Moshe Katz
quelle
9
Es ist zu beachten, dass einige Dateisysteme die volle zugewiesene Größe melden und dann den Buchhaltungsaufwand für den verwendeten Speicherplatz berechnen, während andere die Buchhaltung von der vollen Größe abziehen und nur den Dateispeicherplatz als "verwendet" melden.
chrylis -on strike-
3
Overhead des Dateisystems ... die Leute fragen, warum ihre Festplatten seit 1983 nicht mehr melden, was auf dem Aufkleber steht.
J ...
3
@J ... Tatsächlich vermarktet die Festplatte häufig eine Größe von 1 GB = 1000 MB anstelle von 1024 MB. Eine mit 512 GB auf den Markt gebrachte Festplatte ist also tatsächlich 12 GB kleiner als die angegebene Größe. Bei TB wird es noch schlimmer, da 1 TB = 1000 GB = 1000 * 1000 MB verwendet werden. Eine 1 TB HD ist wirklich eine 976 GB anstelle von 1024 GB. A whooping 48 GB durch TB verloren.
Justin Lessard
4
Der Unterschied zwischen Gigabyte (Basis 10) und Gibibyte (Basis 2) wird nicht als belegter Speicherplatz in angezeigt df.
Yakatz
1
@JustinLessard Sie haben den Overhead auf MiB- und KiB-Ebene vergessen. Eine 512-GB-Festplatte ist tatsächlich mehr als 32 GiB kleiner als eine echte 512-GiB-Festplatte. In diesem Fall entspricht ein 1-TB-Laufwerk eher 0,909 TiB, wenn der Gesamtaufwand für TiB, GiB, MiB und KiB berücksichtigt wird. (1 * 1000 ^ 4/1024 ^ 4) = 0,90949
Pinguin359