2016-04-22 17 views
0

Ich versuche zu verstehen, wie das UNIX-Dateisystem in Bezug auf Inodes funktioniert. Soweit ich weiß, wird ein Verzeichnis einfach als Tabelle mit einem Eintrag der Form [name: inode] für jedes Unterverzeichnis oder jede Datei dargestellt.Wie das UNIX-Dateisystem eine Struktur mit Knoten bildet

Wo ich verwirrt bin, ist, wie diese Verzeichnisse eine Struktur bilden. Wenn ich ein Verzeichnis 'root' hätte, das ein Unterverzeichnis 'home' enthält, das eine Datei 'file.txt' enthält, dann glaube ich, dass das root-Verzeichnis einen Eintrag ['home' :(home associated inode)] hätte in die "Home" -Verzeichnistabelle?

Jede mögliche Hilfe oder Anleitung sehr geschätzt werden, Ben

Antwort

2

ist Ihr Verständnis meist richtig. Hier ist ein Bild, das helfen könnte. Ich gehe davon aus, dass das Root-Verzeichnis sein inode bekannt ist 1. So könnten wir haben:

inode 1:

type: directory 
contents: 
    usr  17 
    etc  49 
    home  57 

inode 57:

type: directory 
contents: 
    dmr  201 
    scs  857 
    ben  981 

Inode 981:

type: directory 
contents: 
    .bashrc 1045 
    projects 1191 
    file.txt 2043 

Inode 2043:

type: file 
contents: 
    This is 
    my text file. 

Hier habe ich die Situation gezeigt, dass der vollständige Pfad (oder zumindest ein vollständiger Pfad) Ihrer Textdatei /home/ben/file.txt ist.

(ich gemacht habe auch eine große Vereinfachung. In der Regel Inhalt einer Datei sind nicht im Inode gespeichert, sondern in anderen Plattenblöcke, mit der Inode-Zeiger auf die anderen Blöcke. Enthält)

+0

Danke das ist sehr hilfreich! Sie erwähnen, dass die Inhalte über Zeiger auf Plattenblöcke gespeichert werden, sind die Inode-Nummern auch Zeiger auf andere Inode-Positionen auf der Festplatte oder werden sie auf andere Weise verwaltet? – BenJacob

+0

@BenJacob Ich bin mir weniger sicher, und ich denke, verschiedene Dateisystem-Implementierungen machen es auf verschiedene Arten. Ich denke, es gibt normalerweise eine strukturierte Zuordnung zwischen Inoden und Plattenblöcken. Beispielsweise könnte der Plattenblock 100 die Inoden 10 bis 19 enthalten, der Plattenblock 200 könnte die Inoden 20 bis 29 usw. enthalten. Verzeichniseinträge in Verzeichnisinoden werden Inodennummern zugeordnet, Plattenblockzeiger in Inoden zeigen auf Plattenblocknummern. Um eine Inode-Nummer "i" in einen Plattenblock umzuwandeln, nimm '(i/10) * 100' und schaue dann auf den '(i% 10)' 'ten Inode in diesem Block. Oder etwas ähnliches. –

+0

Ich sehe so in dieser Konfiguration bin ich richtig in der Annahme, dass die Anzahl der Inodes und Blöcke sind fixiert und wenn wir ein Verzeichnis erstellen füllen wir einfach eine leere Inode mit den neuen Informationen? – BenJacob