Welche Dateiattribute werden in den Verzeichniseinträgen und welche in den Inodes gespeichert?

953
ShadSterling

Ich möchte eine Deduplizierung alter Dateien durchführen und Duplikate durch Hardlinks ersetzen.

Um den Verlust von Metadaten zu minimieren, möchte ich die Verzeichniseintragsattribute jedes neuen Hardlinks auf die Attribute des Duplikats setzen, das er ersetzt, jedoch keine Inode-Attribute des Inodes, der die neuen Links abruft.

Welche Eigenschaften sollte ich einstellen und nicht einstellen?

Idealerweise würde ich gerne eine Tabelle sehen, die zeigt, was wo in so vielen Dateisystemen wie möglich ist. Ich interessiere mich besonders für ext3, ext4, HFS +, XFS und Btrfs.

1

1 Antwort auf die Frage

1
Bob

Das, wonach Sie fragen, ist in keinem der mir bekannten Dateisysteme möglich, da sie wie hier beschrieben implementiert werden. Und ich verstehe nicht, warum Sie sich anfangs um die Metadaten kümmern?

Erstens sind die einzigen Daten im Verzeichniseintrag der Dateiname und die Inode-Nummer.

Zweitens wird eine feste Verknüpfung hergestellt, wenn Sie zwei oder mehr Dateinamen mit derselben Inode-Nummer erstellen .

Der Inode speichert alles andere, z. B. atime und mtime, und andere Metadaten, einschließlich "Zeiger" auf die Datenblöcke der Datei.

Wenn Sie zwei Dateien mit gleichem Inhalt haben, die Inodes jedoch unterschiedlich sind, unterscheiden sich die meisten Metadaten in den Inodes. Beispiel: atime und mtime unterscheiden sich, wie auch alle Datenblockzeiger.

Um eine feste Verknüpfung zu verwenden, um die Speicherbelegung zu reduzieren, würden Sie die eine oder andere der duplizierten Dateien löschen, wodurch auch der Inode "geschlossen" wird und alle Metadaten verloren gehen. Sie erstellen dann eine Verknüpfung zu der verbleibenden vorhandenen Datei, und verwenden Sie dabei den Namen und den Verzeichnispfad der gerade gelöschten Datei.

Der „neue“ Dateilink hat nun alle die gleichen Inode Informationen wie die, die Sie gerade verbunden ist . Die einzigen Unterschiede sind der Ort in der Verzeichnishierarchie und der verwendete Name, die im Verzeichniseintrag gespeichert sind, nicht der Inode.

All dies wird über die Systemaufrufe abgewickelt, die zum Erstellen von Dateien, Links und Verzeichnissen verwendet werden, und kann von keinem Benutzer oder keiner Software, einschließlich "root", direkt geändert werden. Sie könnten es lesen und die Daten in einer separaten Datei speichern, aber die einfache Zuordnung einer Verzeichnishierarchie geht verloren.

Wenn ich Sie richtig verstanden habe, beträgt Ihre Antwort "nur die Namen werden in den Verzeichniseinträgen gespeichert, alle anderen Eigenschaften werden in den Inodes gespeichert". Meinst Du das? Das entspricht den Ergebnissen meines einfachen empirischen Tests zu ext3 und HFS +; Wissen Sie, was andere Dateisysteme auf diese Weise funktionieren? (Es sind nicht alle Dateisysteme, insbesondere nicht NTFS.) Wissen Sie, ob dazu xattrs und / oder ACLs gehören? Kannst du auf die Dokumentation verlinken? ShadSterling vor 10 Jahren 0
Wie ich in dem Beitrag sagte, hat der Verzeichniseintrag auch die Inode-Nummer, damit das System die Dateidaten und andere Metadaten finden kann. Bob vor 10 Jahren 0
Ja, alles andere befindet sich im Inode (siehe die Manpage stat (2) auf einem Linux- oder UNIX-System). Ich weiß nicht, wie NTFS oder andere M $ -Dateisysteme funktionieren. Ihre Frage war, so wie ich sie verstanden hatte, über Linux / UNIX-Dateisysteme. Soweit ich weiß, funktionieren alle nativen Linux- und UNIX-Dateisysteme auf diese Weise. Beachten Sie, dass die NTFS-Unterstützung in Linux je nach Ihrer Distribution möglicherweise eingeschränkt ist. Bob vor 10 Jahren 0
Könnten Sie erklären, was in den Metadaten aufbewahrt werden muss? Bob vor 10 Jahren 0