Inodes, Speicherplatzvergleich für viele kleine Dateien (xfs, btrfs, ext4)


9

Ich habe eine ext4-Partition (LVM auf einer VM) mit einer großen Anzahl kleiner Dateien , die ich alle 3-4 Monate erweitern muss.

In Bezug auf den von den Inodes verwendeten Speicherplatz.

Verwendet eines der Dateisysteme xfs, btrfs oder ext4 weniger Speicherplatz?

Mit anderen Worten, wird das Wechseln zu btrfs oder xfs dazu führen, dass eine Partition langsamer mit Inodes gefüllt wird als mit ext4?


Wenn Sie ext4 verwenden und davon ausgehen, dass hauptsächlich kleine Typen gespeichert werden, sollten Sie es mit erstellen, mkfs.ext4 -t newsum optimale Ergebnisse zu erzielen. Außerdem würde ich vorschlagen, jedes der Dateisysteme nacheinander zu testen (z. B. auf einem lvm- oder Loopback-Gerät) und Ihre realen Dateien darauf zu kopieren, bis es voll ist. Wenn es voll ist, tun Sie df -i(oder find | wc -l), um herauszufinden, welche die meisten Ihrer Dateien gespeichert hat - auf diese Weise wissen Sie es mit Sicherheit.
Matija Nalis

1
@ MatijaNalis, -Tmit einem Großbuchstaben T. Die Konfigurationsdatei hat auch einige andere nützliche Optionen
ilkkachu

@ilkkachu richtig, danke. Es sollte seinmkfs.ext4 -T news
Matija Nalis

Wie klein sind die Dateien?
Drudru

Antworten:


5

Zunächst Ihre erste Frage: Ja, eines dieser Dateisysteme benötigt weniger Speicherplatz. Selbst ohne weitere Details wäre es unwahrscheinlich, dass alle genau den gleichen Speicherplatz belegen, da sie unterschiedliche Implementierungen haben. Man muss also weniger Platz beanspruchen als alle anderen.

Btrfs verfügt über eine dynamische Inode-Zuordnung, sodass Sie nicht wie bei den Inode-Tabellen für ext4 (deren Größe zum Zeitpunkt der Erstellung des ext4-Dateisystems festgelegt ist) voll sind.

XFS ist in ähnlicher Weise dynamisch, hat jedoch ein Limit (Prozentsatz des Dateisystems, das für Inodes verwendet werden kann). Ob Sie also Ihre Inode-Berechtigung auffüllen, hängt vom festgelegten Prozentsatz sowie von der Anzahl der Dateien / Dateigrößen ab


Danke für die schnelle Antwort! XFS ist derzeit die sicherste Wahl. Kann dieser Prozentsatz der Inode-Nutzung dynamisch geändert werden? und wenn nicht, gibt es eine Möglichkeit, vorherzusagen, wie viel benötigt wird?
Abadys

1
Sie sollten in der Lage sein, das mitxfs_growfs -m XX
Anthon

3

Ja, und beachten Sie, dass alles von Ihren Bedürfnissen abhängt:

Btrfs (ausgesprochen als Butter FS, Better FS oder B-Tree FS)

In Anbetracht der Tatsache, dass das btrfs mehrere Festplatten überspannen kann, ist es ein sehr guter Punkt, dass es 16-mal mehr Speicherplatz als das ext4 unterstützt . Eine maximale Partitionsgröße des btrfs-Dateisystems beträgt 16 Exbibyte, und die maximale Dateigröße beträgt ebenfalls 16 Exbibyte.

Maximale Anzahl von Dateien: 2 ** 64

XFS

Das XFS ist ein leistungsstarkes 64-Bit-Journaling-Dateisystem. XFS unterstützt eine maximale Dateisystemgröße von 8 Exbibyte für das 64-Bit-Dateisystem. Jetzt verwendet RHEL 7.0 XFS als Standarddateisystem, einschließlich der Unterstützung für die Verwendung von XFS für die /bootPartition.

Maximale Anzahl von Dateien: 2 ** 64

EXT4

Der ext4 ist bekannt dafür, dass er die Geschwindigkeit gegenüber ext3 verbessert. Die ext4 hat einige Grenzen. Die maximale Dateigröße beträgt 16 Tebibyte (was ungefähr 17,6 Terabyte entspricht). Das größte Volume / die größte Partition, die Sie mit ext4 haben können, ist 1 Exbibyte. Wie in den modernsten Dateisystemen handelt es sich um ein Journal-Dateisystem, das ein Journal darüber führt, wo sich die Dateien hauptsächlich auf der Festplatte befinden und über alle anderen Änderungen, die an der Festplatte vorgenommen werden. Unabhängig von all seinen Funktionen wird die transparente Komprimierung, die transparente Verschlüsselung oder die Datendeduplizierung nicht unterstützt. Die Schnappschüsse werden technisch unterstützt, aber diese Funktion ist bestenfalls experimentell.

Maximale Anzahl von Dateien: 4 Milliarden

XFS vs Btrfs

XFS hat kein RAID, während Btrfs RAID noch nicht vollständig stabil ist und sich in den Anfängen befindet. XFS ist immer ausgereifter als Btrfs , aber wir können nicht leugnen, dass Btrfs leistungsstark und ein gut wachsendes Dateisystem ist.

Im Moment ist XFS meine Wahl - zumal es das Standard-FS unter RHEL 7 ist - es sei denn, ich brauche wirklich Btrfs.


1
Dies hat einige gute Hintergrundinformationen zu den Dateisystemen im Allgemeinen, aber ich sehe nicht das spezifische Problem, dass kleine Dateien hier erwähnt werden.
Ilkkachu

@ilkkachu "große Menge kleiner Dateien" was bedeutet das? Es dreht sich alles um Inodes, da alle Dateien über Inodes erstellt werden und der Inode eine Datenstruktur ist, die zur Darstellung eines Dateisystemobjekts verwendet wird. Ich glaube, ich habe alle Bedürfnisse des Autors erklärt und die maximale Anzahl von Dateien erwähnt.
FarazX

2

Ich nehme an, das Problem, das Sie haben, ist nicht, dass sich die Partition per se mit Inodes füllt, sondern dass die Anzahl der Inodes im Dateisystem ausgeht. ext4 reserviert die Inodes statisch, wenn das Dateisystem erstellt wird. Sie können die Nummer jedoch mit den folgenden Optionenmkfs.ext4 festlegen :

-i Bytes pro Inode
Geben Sie das Verhältnis Bytes / Inode an. mke2fs erstellt einen Inode für jedes Byte pro Inode Speicherplatz auf der Festplatte. Je größer das Byte-pro-Inode-Verhältnis ist, desto weniger Inodes werden erstellt.

-N Anzahl der Inodes
Überschreibt die Standardberechnung der Anzahl der Inodes, die für das Dateisystem reserviert werden sollen (basierend auf der Anzahl der Blöcke und dem Verhältnis von Bytes pro Inode). Dadurch kann der Benutzer die Anzahl der gewünschten Inodes direkt angeben.

Das Handbuch gibt ausdrücklich an, dass das Verhältnis von Bytes pro Inode nach dem Erstellen des FS nicht geändert werden kann. Die Gesamtzahl wird jedoch skaliert, um das Verhältnis zu erreichen, wenn die Größe des FS geändert wird.

Sie können auch die Größe jedes Inodes festlegen . Der Standardwert beträgt 256 Byte auf "den meisten" Dateisystemen, kann jedoch auf 128 Byte reduziert werden (der Standardwert für "kleine" Dateisysteme). Der zusätzliche Speicherplatz wird zum Speichern erweiterter Attribute (z. B. SELinux-Labels) verwendet. Wenn Sie diese also nicht benötigen, sollte es sicher sein, die Größe auf ein Minimum zu reduzieren.

-I Inode-Größe
Geben Sie die Größe jedes Inodes in Byte an. Der Wert für die Inode-Größe muss eine Potenz von 2 größer oder gleich 128 sein.

df -isollte die Anzahl der zugewiesenen und verwendeten Inodes anzeigen. Mit den Standardoptionen hatte eine 30-GB-Partition, die ich mir angesehen habe, einen Inode pro 16 KB. Wenn Ihre Dateien jedoch sehr klein sind, können Sie -i 4096beispielsweise einen Inode für jeden Datenblock im System festlegen .

Wenn Ihre Dateien kleiner als 4096 sind, können Sie auch die Blockgröße des Dateisystems reduzieren, da für alle regulären Dateien ohnehin ein vollständiger Datenblock erforderlich ist. (Das heißt, auf ext4. Ich weiß nicht, ob andere aktuelle Dateisysteme kleine Dateien packen.)

-b Blockgröße
Geben Sie die Größe der Blöcke in Bytes an. Gültige Werte für die Blockgröße sind 1024, 2048 und 4096 Byte pro Block. Wenn nicht angegeben, wird die Blockgröße heuristisch durch die Dateisystemgröße und die erwartete Verwendung des Dateisystems bestimmt (siehe Option -T).

mkfs.ext4hat auch die -T <type>Option, die als Abkürzung für einige oder alle von diesen verwendet werden kann. Die Einstellungen sind in /etc/mke2fs.conf, was auf meinem Debian zB mkfs.ext4 -T smallgleichbedeutend ist mit

mkfs.ext4 -b 1024 -I 128 -i 4096

Dies ist möglicherweise keine schlechte Auswahl an Optionen für viele kleine Dateien (und keine xattrs).

Wenn Ihre Dateien noch kleiner als 1 KB sind, ist ein Dateisystem möglicherweise nicht der beste Weg, um die Daten zu speichern. Möglicherweise sollte jedoch eine Datenbank oder ein anwendungsspezifisches System in Betracht gezogen werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.