GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wofür sind Inodes gut?

Ich frage mich, ob das Speichern der Informationen über Dateien in Inodes statt direkt im Verzeichnis den zusätzlichen Aufwand wert ist. Es kann gut sein, dass ich den Aufwand überschätze oder etwas Wichtiges übersehe, aber deshalb frage ich.

Ich sehe, dass so etwas wie „Inodes“ für Hardlinks notwendig ist, aber falls der Overhead wirklich so groß ist, wie ich denke, frage ich mich, ob einer der Gründe dies rechtfertigt:

  • Die Verwendung von Hardlinks für Backups ist clever, aber die Effizienz von Backups ist nicht wichtig genug im Vergleich zur Effizienz des normalen Betriebs
  • Weder Geschwindigkeits- noch Größennachteile für Hardlinks zu haben, kann wirklich eine Rolle spielen, da dieser Vorteil nur für die wenigen Dateien gilt Verwendung von Hardlinks beim Zugriff auf alle Dateien leidet unter dem Overhead
  • Spart etwas Platz für ein paar gleichnamige Binärdateien wie bunzip2 und bcat ist vernachlässigbar

Ich sage nicht, dass Inodes/Hardlinks schlecht oder nutzlos sind, aber kann es die Kosten der zusätzlichen Indirektion rechtfertigen (Caching hilft sicherlich sehr, ist aber keine Wunderwaffe)?

Akzeptierte Antwort:

Harte Links sind nebensächlich. Sie sind nicht der Grund, Inodes zu haben. Sie sind ein Nebenprodukt:Im Grunde hat jedes vernünftige Unix-ähnliche Dateisystemdesign (und sogar NTFS ist in diesem Punkt nah genug dran) kostenlose Hardlinks.

Im Inode werden alle Metadaten einer Datei gespeichert:ihre Änderungszeit, ihre Berechtigungen und so weiter. Hier wird auch der Speicherort der Dateidaten auf der Festplatte gespeichert. Diese Daten müssen irgendwo gespeichert werden.

Das Speichern der Inode-Daten innerhalb des Verzeichnisses bringt seinen eigenen Overhead mit sich. Dadurch wird das Verzeichnis größer, sodass das Abrufen einer Verzeichnisliste langsamer ist. Sie sparen sich eine Suche für jeden Dateizugriff, aber jeder Verzeichnisdurchlauf (von dem mehrere benötigt werden, um auf eine Datei zuzugreifen, einer pro Verzeichnis auf dem Dateipfad) kostet etwas mehr. Am wichtigsten ist, dass es viel schwieriger wird, eine Datei von einem Verzeichnis in ein anderes zu verschieben:Anstatt nur einen Zeiger auf den Inode zu verschieben, müssen Sie alle Metadaten verschieben.

Unix-Systeme erlauben Ihnen immer, eine Datei umzubenennen oder zu löschen, selbst wenn sie in einem Prozess geöffnet ist. (Bei einigen Unix-Varianten machen Sie das fast immer.) Dies ist eine sehr wichtige Eigenschaft in der Praxis:Sie bedeutet, dass eine Anwendung eine Datei nicht „kapern“ kann. Das Umbenennen oder Entfernen der Datei wirkt sich nicht auf die Anwendung aus, sie kann weiterhin in die Datei lesen und schreiben. Wenn die Datei gelöscht wird, bleiben die Daten erhalten, bis kein Prozess die Datei mehr geöffnet hat. Dies wird erleichtert, indem der Prozess dem Inode zugeordnet wird. Der Prozess kann nicht mit dem Dateinamen in Verbindung gebracht werden, da sich dieser jederzeit ändern oder sogar verschwinden kann.

Verwandte Themen:Was ist ein gutes Tool zum Visualisieren von SQL-Agent-Jobs?
Linux
  1. Wofür steht „rc“ in .bashrc?

  2. Was sind gute Linux/Unix-Bücher für fortgeschrittene Benutzer?

  3. Benötigen Sie einen guten Hex-Editor für Linux

  4. Was ist ein guter Ansatz, um Sprachteile aus einer beliebigen Audiodatei zu extrahieren?

  5. Was ist eine .so.2-Datei?

Was ist ZFS? Warum sind die Leute verrückt danach?

Gute Kombination aus Befehlszeile und grafischem Dateibrowser?

Was sind Inodes unter Linux?

Was ist eine verteilte Datenbank und wozu dienen verteilte Datensysteme?

Was ist eine .sh-Datei?

Wozu dient Linux test -a command test?