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 -i
sollte 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 4096
beispielsweise 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.ext4
hat 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 small
gleichbedeutend 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.
mkfs.ext4 -t news
um 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 Siedf -i
(oderfind | wc -l
), um herauszufinden, welche die meisten Ihrer Dateien gespeichert hat - auf diese Weise wissen Sie es mit Sicherheit.