Unix-Dateisysteme haben normalerweise eine Inode-Tabelle, und die Anzahl der Einträge in dieser Tabelle wird normalerweise zum Zeitpunkt der Erstellung des Dateisystems festgelegt. Dies führt manchmal dazu, dass Benutzer mit viel Speicherplatz verwirrende Fehlermeldungen zu fehlendem Speicherplatz erhalten, und selbst wenn sie das Problem erkannt haben, gibt es keine einfache Lösung dafür.
Es scheint mir jedoch sehr wünschenswert zu sein, dieses Durcheinander zu vermeiden, indem man den Benutzern und Systemadministratoren bei Bedarf völlig transparent Inodes zuweist. Wenn Sie auf nette Hacks stehen, können Sie sogar die Inode-Tabelle selbst zu einer Datei machen und so den Code wiederverwenden, den Sie bereits haben und der freien Speicherplatz auf der Festplatte findet. Wenn Sie Glück haben, könnten Sie sogar die Inodes in der Nähe der Dateien selbst finden, ohne explizit zu versuchen, dieses Ergebnis zu erzielen.
Aber niemand (von dem ich weiß) macht das wirklich, also gibt es wahrscheinlich einen Haken, den ich vermisse. Irgendeine Idee woran es liegen könnte?
quelle
Antworten:
Angenommen, Sie haben die Inode-Tabelle zu einer Datei gemacht. dann ist die nächste Frage ... wo speichern Sie Informationen zu dieser Datei? Sie benötigen also "echte" Inodes und "erweiterte" Inodes, wie eine MS-DOS-Partitionstabelle. Vorausgesetzt, Sie benötigen nur eine (oder möglicherweise einige - z. B. um Ihr Tagebuch auch als Datei zu speichern). Aber Sie hätten eigentlich Sonderfälle, anderen Code. Jede Beschädigung dieser Datei wäre ebenfalls katastrophal. Bedenken Sie, dass es vor dem Aufzeichnen häufig vorkam, dass Dateien geschrieben wurden, z. B. wenn der Strom ausfiel und stark beschädigt wurde. Ihre Dateivorgänge müssten viel robuster sein als Stromausfall / Absturz / etc. als sie waren, zB ext2.
Herkömmliche Unix-Dateisysteme haben eine einfachere (und robustere) Lösung gefunden: Setzen Sie alle X Blöcke einen Inode-Block (oder eine Gruppe von Blöcken). Dann finden Sie sie durch einfache Arithmetik. Dann ist es natürlich nicht möglich, mehr hinzuzufügen (ohne das gesamte Dateisystem neu zu strukturieren). Und selbst wenn Sie den Inode-Block verlieren / beschädigen, in den Sie bei einem Stromausfall geschrieben haben, gehen nur wenige Inodes verloren - weitaus besser als ein wesentlicher Teil des Dateisystems.
Modernere Designs verwenden Dinge wie B-Baum- Varianten. Moderne Dateisysteme wie btrfs, XFS und ZFS unterliegen keinen Inode-Beschränkungen.
quelle
df
, sondern kann auch nicht durch Löschen von Dateien behoben werden, da für das Löschen einer Datei Metadaten zugewiesen werden müssen.Viele Dateisysteme haben eine dynamisch zuweisbare Inode-Tabelle (oder deren moralische Entsprechung) (XFS, BTRFS, ZFS, VxFS ...)
Das ursprüngliche Unix-UFS hatte jedoch Inodes, die zum Zeitpunkt der Dateisystemerstellung behoben wurden, und davon abgeleitete Dateisysteme (Linux EXT, Solaris UFS) setzten das Schema häufig fort. Es ist robust und einfacher zu implementieren. So viele Anwendungsfälle passen gut zusammen, dass das Entwerfen eines neuen Dateisystems, um zu vermeiden, dass ein Problem nicht einfach zu rechtfertigen ist.
quelle
Es gibt Dateisysteme, die Inodes dynamisch zuweisen: Auf Anhieb funktionieren mindestens Veritas VxFS (= das Standarddateisystem von HP-UX und eine der unter Solaris verfügbaren Optionen) und XFS (der Standarddateisystemtyp unter RHEL 7) dieser Weg. Btrfs und IBMs JFS auch.
quelle