Hoffentlich kann ich das so beantworten, dass es für Sie Sinn macht. Ein Dateisystem unter Linux besteht im Allgemeinen aus einer Partition, die auf eine der folgenden Arten formatiert ist (das muss man sich aussuchen!), Auf der Sie Ihre Dateien speichern. Sei es Ihre Systemdateien oder Ihre persönlichen Dateien ... alle werden auf einem Dateisystem gespeichert. Diesen Teil scheinen Sie zu verstehen.
Aber was ist, wenn Sie Ihre Festplatte so partitionieren, dass mehr als eine Partition vorhanden ist (denken Sie, Apple Pie ist in Stücke geschnitten), oder eine zusätzliche Festplatte hinzufügen (möglicherweise einen USB-Stick?). Aus Gründen der Argumentation haben alle auch Dateisysteme.
Wenn Sie sich die Dateien auf Ihrem Computer ansehen, sehen Sie eine visuelle Darstellung der Daten im Dateisystem Ihrer Partition. Jeder Dateiname entspricht einer sogenannten Inode, in der Ihre Daten im Hintergrund wirklich leben. Ein fester Link lässt Sie mehrere "Dateinamen" (mangels einer besseren Beschreibung) haben, die auf denselben Inode verweisen. Dies funktioniert nur, wenn sich diese festen Links im selben Dateisystem befinden. Eine symbolische Verknüpfung verweist stattdessen auf den "Dateinamen", der dann mit dem Inode verknüpft ist, der Ihre Daten enthält. Verzeihen Sie meine rohen Kunstwerke, aber das erklärt sich hoffentlich besser.
image.jpg image2.jpg
\ /
[your data]
Hier verweisen image.jpg und image2.jpg direkt auf Ihre Daten. Sie sind beide Hardlinks. Jedoch...
image.jpg <----------- image2.jpg
\
[your data]
In diesem (groben) Beispiel verweist die Datei image2.jpg nicht auf Ihre Daten, sondern auf die Datei image.jpg ..., die einen Link zu Ihren Daten darstellt.
Symbolische Links können über Dateisystemgrenzen hinweg funktionieren (vorausgesetzt, das Dateisystem ist wie Ihr USB-Stick angehängt und gemountet). Ein fester Link kann dies jedoch nicht. Es weiß nichts darüber, was sich auf Ihrem anderen Dateisystem befindet oder wo Ihre Daten dort gespeichert sind.
Hoffentlich ergibt das einen besseren Sinn.
chroot(2)
oder realer Containerisierung können Sie mehrere Hierarchien haben, die möglicherweise überhaupt nichts miteinander zu tun haben.chroot
isoliert einen Teil der Hierarchie für einen Prozess und seine Nachkommen, der übergeordnete Teil verfügt jedoch weiterhin über eine vollständige Hierarchie. Die Containerisierung kann dies tun, je nachdem, wie nah eine VM ist. Aber wie viel Detail kann man in einen Kommentar packen? Danke,Das Dateisystem besteht aus einer Verzeichnisstruktur für Verzeichniseinträge zum Organisieren von Dateien. Jeder Verzeichniseintrag ordnet einem Inode einen Dateinamen zu .
Softlinks ( symbolisch ) sind Verzeichniseinträge, die keine Daten enthalten. Sie verweisen lediglich auf einen anderen Eintrag (eine Datei oder ein Verzeichnis im selben Dateisystem oder einem anderen Dateisystem). Und wenn Sie die angezeigte Datei löschen, wird die symbolische Verknüpfung unbrauchbar.
Hardlinks sind Verzeichniseinträge, die den Dateinamen und die Inode- Nummer enthalten. Wenn Sie den letzten festen Link entfernen, können Sie nicht mehr auf die Datei zugreifen.
Fazit:
Da der Inode eine Datenstruktur ist, die zur Darstellung eines Dateisystemobjekts verwendet wird, ist sie im Dateisystem intern und Sie können nicht auf einen Inode verweisen eines anderen Dateisystems .
Somit sind Hardlinks nur innerhalb desselben Dateisystems gültig, aber Softlinks (symbolische Links) können sich über Dateisysteme erstrecken, da sie einfach auf einen anderen Verzeichniseintrag verweisen (Die Schnittstelle des Dateisystems und kein internes Objekt).
quelle
/mnt/myfile
. Wenn Sie ein anderes Dateisystem anhängen/mnt/
. Der Softlink würde zu einem Eintrag des gemounteten Dateisystems unter aufgelöst/mnt/
. Wenn Sie also das Dateisystem von Ihrem USB-Gerät aus anhängen/mnt
, wird der Softlink zu einem Eintrag in diesem Dateisystem aufgelöst.Das Root-Dateisystem kann aus mehreren Dateisystemen bestehen.
/usr/local
befindet sich möglicherweise auf einer separaten Partition und/home
auf einer anderen Partition auf einer Netzwerkfestplatte an einem anderen Ort. In diesem Fall kann ein fester Link für/usr/local/bin/git
(zum Beispiel) nicht außerhalb von erstellt werden/usr/local
, da er sich über Dateisysteme erstrecken würde .Der Grund dafür ist , dass der I - Knoten separat für zugeordnet ist
/
,/usr/local
und/home
(wieder, in diesem Beispiel), und wenn Sie eine feste Verknüpfung erstellen Sie wirklich nur einen zusätzlichen Namen für einen Inode machen.quelle
Harte Links bewirken, dass das Ziel am Leben bleibt. Solange ein fester Link erreichbar ist, stellt das System sicher, dass sein Ziel nicht freigegeben wird. Es ist daher erforderlich, dass alle Medien, die feste Verknüpfungen zu einem bestimmten Inode enthalten könnten, jedes Mal gemountet werden, wenn das System versuchen würde, festzustellen, ob Verweise darauf vorhanden sind.
Angesichts der Tatsache, dass die Inode-Lebensdauer in der Regel durch Aufrechterhaltung der Referenzanzahl und nicht durch Suchen nach Referenzen bestimmt wird, können möglicherweise zwei oder mehr Dateisysteme, die über Links miteinander verbunden sind, unabhängig voneinander verwendet werden, vorausgesetzt, dass keine Links verwendet werden müssen überbrückt zwischen den Systemen und vorausgesetzt, es war nicht erforderlich, fsck auf einem der beiden zu verwenden. Wenn die Anzahl der Inodes auf einem der Systeme gestört ist, besteht die einzige Möglichkeit, dieses System wieder nutzbar zu machen, darin, eine Form der fsck-Operation zu verwenden, mit der beide Dateisysteme nach Verweisen durchsucht werden können. Aufgrund dieser Einschränkung ist es zwar möglich, zwei miteinander verknüpfte Dateisysteme unabhängig voneinander verwenden zu können, die Vorteile wären jedoch wahrscheinlich zu gering, um dies sinnvoll zu machen.
quelle
Eine einzelne Inode- Nummer zur Darstellung der Datei in jedem Dateisystem. Alle Hardlinks basieren auf der Inode-Nummer. Dateisystem-Referenzlink hier .
quelle