Wo werden Dateinamen in einem Dateisystem gespeichert?

44

Wo werden Dateinamen in einem Dateisystem gespeichert?

Es ist nicht in Inode oder mit dem tatsächlichen Dateiinhalt, da wir eine feste Verknüpfung haben, dass zwei Dateinamen auf den gleichen Inode verweisen können.

Yegle
quelle
4
Genau genommen hängt das ganz davon ab, von welchem Dateisystem Sie sprechen. Nicht alle von ihnen haben Inodes (oder sogar Verzeichnisse).
Michael Borgwardt
NTFS oder FAT12 / 16/32 und viele andere Dateisysteme haben keinen Inode
phuclv
Viele Dateien haben mehr als einen Namen in mehr als einem Verzeichnis. Alle Dateien des Typverzeichnisses haben mindestens 2 Namen, von denen einer .für sich alleine ist.
Stéphane Chazelas
@ LưuVĩnhPhúc, ntfs tut es. Es nennt es nur einen MFT-Datensatz, aber es ist so ziemlich eine Inode.
Psusi

Antworten:

61

Ich habe kein passendes Duplikat gefunden. Hier ist eine Antwort auf Ihre Frage.

Dateinamen und Verzeichnisse

Auszug

Dateinamen und Verzeichnisauswirkungen:

  • Inodes enthalten keine Dateinamen, nur andere Dateimetadaten.
  • Unix-Verzeichnisse sind Listen von Zuordnungsstrukturen, die jeweils einen Dateinamen und eine Inode-Nummer enthalten.
  • Der Dateisystemtreiber muss ein Verzeichnis nach einem bestimmten Dateinamen durchsuchen und dann den Dateinamen in die richtige entsprechende Inode-Nummer konvertieren.

Quelle: Wikipedia-Seite zu Inode

Der Name der Datei wird also in der Informationsstruktur der Verzeichnisse gespeichert. Zum Beispiel:

                         ss von fs

Verzeichnisstruktur

Auszug

Im EXT2-Dateisystem sind Verzeichnisse spezielle Dateien, mit denen Zugriffspfade zu den Dateien im Dateisystem erstellt und gespeichert werden. Abbildung 9.3 zeigt das Layout eines Verzeichniseintrags im Speicher.

Eine Verzeichnisdatei ist eine Liste von Verzeichniseinträgen, die jeweils die folgenden Informationen enthalten:

  • Inode - Der Inode für diesen Verzeichniseintrag. Dies ist ein Index für das Array von Inodes in der Inode-Tabelle der Blockgruppe. In Abbildung 9.3 hat der Verzeichniseintrag für die aufgerufene Datei einen Verweis auf die Inode-Nummer i1.
  • name length - Die Länge dieses Verzeichniseintrags in Bytes.
  • name - Der Name dieses Verzeichniseintrags.

Die ersten beiden Einträge für jedes Verzeichnis sind immer der Standard .und ..Einträge, die "dieses Verzeichnis" bzw. "das übergeordnete Verzeichnis" bedeuten.

Hier sind die Referenzen in Abbildung 9.3 oben:

                 ss # 2

Quelle: Das Linux-Dokumentationsprojekt: Dateisystem

Verweise

slm
quelle
9

Der Dateiname wird im jeweiligen Verzeichnis ("Verzeichnisdatei") gespeichert. Dieser Eintrag verweist auf eine Inode.

Hauke ​​Laging
quelle
1
Ich kann nicht sehen, wie Symlink-Ziele in Verzeichniseinträgen landen können. Das Symlink-Ziel befindet sich möglicherweise im Inode des Symlinks, aber nicht in (einem der) Verzeichniseinträge, mit denen Symlink verknüpft ist, was keinen Sinn ergibt.
Stéphane Chazelas
@ StéphaneChazelas, der Symlink selbst enthält einfach einen anderen Namen, der stattdessen geöffnet werden sollte. Die Namenssuche beginnt erneut mit dem neuen Namen, der (falls überhaupt vorhanden) irgendwo ein Verzeichniseintrag ist.
Psusi
1

Der Dateiname wird in der Datenstruktur "Verzeichnis" gespeichert, die den Dateinamen "(Zeichenfolge)" und den entsprechenden Inode "(int)" enthält. Verzeichnis ist verantwortlich für die Zuordnung Dateiname -> Inode. und in ode ist verantwortlich für das Mapping von inode -> sector on disk.

JustVirtually
quelle