Was ist der Unterschied zwischen "Inode-Größe" und "Bytes pro Inode"?

18

Die folgenden Informationen stammen aus der Manpage. Ich möchte den Unterschied zwischen Bytes pro Inode und Inode-Größe kennen.

-i bytes-per-inode

Geben Sie das Byte / Inode-Verhältnis an. mke2fs erstellt einen Inode für jedes Byte pro Inode-Byte Speicherplatz auf der Festplatte. Je größer das Byte-pro-Inode-Verhältnis ist, desto weniger Inodes werden erstellt. Dieser Wert sollte im Allgemeinen nicht kleiner als die Blockgröße des Dateisystems sein, da dann zu viele Inodes erstellt werden. Seien Sie gewarnt, dass es nicht möglich ist, die Anzahl der Inodes in einem Dateisystem nach dessen Erstellung zu erhöhen Wert für diesen Parameter.

-I inode-size

Geben Sie die Größe jedes Inodes in bytes an. Mke2fs erstellt standardmäßig 256-Byte-Inodes. In Kerneln nach 2.6.10 und einigen früheren Anbieterkernen ist es möglich, Inodes mit mehr als 128 Byte zu verwenden, um erweiterte Attribute für eine verbesserte Leistung zu speichern. Der Wert für die Inode-Größe muss eine Potenz von 2 größer oder gleich 128 sein. Je größer der Inode -size Je mehr Speicherplatz die Inode-Tabelle belegt, desto geringer ist der nutzbare Speicherplatz im Dateisystem. Dies kann sich auch negativ auf die Leistung auswirken. Erweiterte Attribute, die in großen Inodes gespeichert sind, sind mit älteren Kerneln nicht sichtbar, und solche Dateisysteme können mit 2.4-Kerneln nicht bereitgestellt werden Dieser Wert kann nach der Erstellung des Dateisystems nicht mehr geändert werden.

Akheel Asadi
quelle

Antworten:

13

Was ist eine Inode? In der Unix-Welt ist eine Inode eine Art Dateieintrag. Ein Dateiname in einem Verzeichnis ist nur eine Bezeichnung (ein Link!) Für eine Inode. Ein Inode kann an mehreren Stellen referenziert werden (Hardlinks!).

-i Bytes pro Inode (auch bekannt als inode_ratio)

Aus unbekannten Gründen wird dieser Parameter manchmal als bytes-per- inode und manchmal als inode_ratio dokumentiert . Dies ist laut Dokumentation das Byte / Inode-Verhältnis . Die meisten Menschen werden ein besseres Verständnis haben, wenn sie wie folgt angegeben werden:

  • 1 Inode pro X Byte Speicher (wobei X Byte pro Inode ist).
  • niedrigste durchschnittliche Dateigröße, die Sie anpassen können.

Die Formel (aus dem mke2fs Quellcode entnommen ):

inode_count = (blocks_count * blocksize) / inode_ratio

Oder sogar vereinfacht (vorausgesetzt, "Partitionsgröße" entspricht in etwa blocks_count * blocksize, ich habe die Zuordnung nicht überprüft):

inode_count = (partition_size_in_bytes) / inode_ratio

Hinweis 1: Auch wenn Sie zum Zeitpunkt der FS-Erstellung ( mkfs -N ...) eine feste Anzahl von Inodes angeben , wird der Wert in ein Verhältnis konvertiert, sodass Sie mehr Inode anpassen können, wenn Sie die Größe des Dateisystems erweitern.

Hinweis 2: Wenn Sie dieses Verhältnis optimieren, stellen Sie sicher, dass Sie deutlich mehr Inode zuweisen, als Sie verwenden möchten. Sie möchten Ihr Dateisystem wirklich nicht neu formatieren.

-Ich Inode-Größe

Dies ist die Anzahl der Bytes, die das Dateisystem für jeden Inode des Dateisystems reserviert. In diesem Bereich werden die Attribute des Inodes gespeichert ( siehe Einführung in Inodes ). In Ext3 war die Standardgröße 128. In Ext4 ist die Standardgröße 256 (zum Speichern extra_isizeund Bereitstellen von Speicherplatz für erweiterte Inline-Attribute). Lesen Sie Linux: Warum Inode-Größe ändern?

Anmerkung: X Bytes Disjkspace werden für jeden zugewiesenen Inode zugewiesen, unabhängig davon, ob er frei ist oder verwendet wird, wobei X = Inode-Größe.

Franklin Piat
quelle
5

Bytes-per-Inode legt fest, wie viele Inodes für dieses Dateisystem erstellt werden. Die Inode-Größe bestimmt, wie groß jeder dieser Inodes ist.

Sie benötigen viele Inodes, wenn Sie viele kleine Dateien (& / oder viele Verzeichnisse) auf dem Dateisystem ablegen möchten.

AFAIK, Sie brauchen wirklich nur Inodes, die größer als die Standardgröße von 256 Bytes sind, wenn Sie erweiterte Attribute für Ihre Dateien speichern möchten . psusi sagt in den Kommentaren, dass das nicht stimmt.

PM 2Ring
quelle
4
Tatsächlich werden erweiterte Attribute in einem eigenen Block und nicht im Inode gespeichert, sodass Sie keinen größeren Inode für sie benötigen. In letzter Zeit gab es einige Patches auf den Mailinglisten, um endlich die Möglichkeit zu schaffen, erweiterte Attribute in der Inode zu speichern, wenn sie klein genug sind, um zu passen, aber wenn sie die Hauptzeile noch nicht erreicht haben, wäre dies erst kürzlich geschehen.
Psusi
1

Extrem grobes Dateisystemschema:

|_|__inodes__|_______________________DATA_________________________________|
  • Inode-Ratio / Bytes-per-Inode = Anzahl der Inodes für den DATA- Bereich
  • Inode-Größe = Größe jedes Inodes im Inodes- Bereich
sjas
quelle
0

Die Antwort von sjas hat mir sehr gut gefallen, es gibt den Kern des Unterschieds.

Dies ist nur meine eigene Erweiterung (da ich nicht kommentieren oder abstimmen kann, sondern nur mit diesem Stapelaustausch beginne), und ich wollte eine Antwort für mich, die für den Benutzer, der die Entscheidung während des Datenvolumens treffen muss, in nicht-technischen Begriffen verständlich ist Setup, aber nicht unbedingt alle Details hinter der Implementierung kennen.

Personen / Objekte: - Datenträger auf Speichergeräten - Dateien auf Datenträgern - Speichergeräte, sie sind formatiert und enthalten Byteblöcke und deren Adressen - Speicherorte für Dateien im Speicher

Aktionen: Erstellen / Löschen / Umbenennen von Dateien und Ordnern durch das Betriebssystem im Speicher, Lesen / Schreiben / Verschieben von Dateien, Ändern von Berechtigungen usw.

Eine Datei mit einer Größe von N Bytes muss in "Chunks" (Blöcken) erstellt werden. Obwohl theoretisch angenommen werden kann, dass die Dateien als Sequenzen von einzelnen Bytes verwaltet werden können (logischerweise können sie dies), wäre alles, was wir zum Verwalten von Dateien im Space benötigen, ein ausgewiesener Index, der einige Dateieigenschaften (Name usw.) und den Anfang jeder Datei angibt der Speicher. Aufgrund der Art und Weise, wie die Hardware mit den "Bussen" und "Blöcken" und Leistungsaspekten ausgelegt ist, haben diese "Blöcke" eine bestimmte Größe und ein Vielfaches der Blockgröße des Mediums (z. B. 512 Bytes, 4096 Bytes) Verwaltet von der Inodes-Ebene, die der nächsten Ebene Informationen über die Speicherorte der Dateien und darüber gibt, wie die Blöcke aneinander gereiht werden, wenn sie gefunden, in den Speicher geladen usw. werden müssen.

Wenn man eine große Rolle Papier (Volumen) hatte und einen Informationsspeicher für Dokumente aus Seiten (von Zeichen oder Bits von Informationen) zum Speichern von mehrseitigen Dokumenten entwerfen musste, ist ein Index (zum Auffinden von Dokumenten) erforderlich, Speicherplatz für die Seiten (mit einigen einfachen Positionen von Seiten). In Unix-Kollatierungsmechanismus (Inodes) und eigentliches Schneiden in Seiten. Inode-Größe ist die Indexeintragsgröße (mehr oder weniger). Bytes pro Inode ist die Seitengröße

Auswirkungen der Änderung der beiden fraglichen Einstellungen:

Inode-Größe ändern - in der Regel müssen keine Änderungen vorgenommen werden. Die Standardeinstellung wird beibehalten (siehe Link in der vorherigen Antwort auf eine Diskussion).

Bytes-per-Inode - Beeinflusst die maximale Anzahl von Dateien, die möglicherweise auf dem Volume erstellt werden können (möglicherweise Leistung und "Verschwendung" nicht verwendeter Bytes).

Zurück zur Papierrollen-Analogie: Stellen Sie sich vor, Sie müssten ein Dokument einer bestimmten Größe (eine Datei) in einem solchen System (oder viele Dokumente verschiedener Größe) schreiben und speichern - und zwar mit der Seitengröße, die beim "Schreib- und Speichersystem" vorgegeben wird "Definition und nicht flexibel, ist sehr dasselbe Dokument kann viele Seiten erfordern. Wenn das" System "-Seitenformat sehr groß und das Dokumentenformat klein ist, kann möglicherweise viel Papier verschwendet werden, indem Leerzeichen und kleine Dateien auf einer Seite abgelegt werden. Wenn die Seite groß ist, müssen weniger Seiten für das Dokument verwendet werden. Auf der zuletzt verwendeten Seite ist jedoch möglicherweise viel "Leerzeichenverschwendung" vorhanden. Es hängt also alles davon ab, wie viele Dateien verwendet werden und wie viele. Die andere Überlegung ist die Geschwindigkeit des Findens und Bringens des Dokuments von vielen Seiten.

Hoffe, es macht Sinn (es macht für mich) und bitte kommentieren Sie, wenn ich einen Teil des ext-Designs oder der mkfs-Optionen ernsthaft missbraucht habe.

predmod
quelle