Hardlinks unter GNU/Linux löschen und die Geschichte der Inodes
Hallo, ich bin inkompetent.
Als ich nach langer Zeit versuchte, einen Link mit dem ln-Befehl zu erstellen, vergaß ich versehentlich, die Option -s zu entfernen, und ein Hardlink wurde erstellt. Daher werde ich den unnötigen Hardlink löschen.
Einen Hardlink erstellen
Wenn Sie den Befehl ln ohne Optionen ausführen, wird ein Hardlink erstellt.
alleycat:[haturatu]:~/git/hardlink$ ls
alleycat:[haturatu]:~/git/hardlink$ touch hardlink1
alleycat:[haturatu]:~/git/hardlink$ echo "You are an idiot" >> hardlink1
alleycat:[haturatu]:~/git/hardlink$ cat hardlink1
You are an idiot
alleycat:[haturatu]:~/git/hardlink$ ls -la
合計 12
drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:00 .
drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
-rw-r--r-- 1 haturatu haturatu 17 1月 12 15:01 hardlink1
Ich habe eine Datei wie oben gezeigt erstellt.
alleycat:[haturatu]:~/git/hardlink$ ln hardlink1 hardlink2
alleycat:[haturatu]:~/git/hardlink$ ls -la
合計 16
drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:02 .
drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
Damit wurde ein Hardlink erstellt.
Und jetzt schauen wir uns die folgende Standardausgabe an:
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
Die 2 in -rw-r--r-- 2 ist die Anzahl der Hardlinks. Sie können sehen, dass der Wert im Vergleich zu vor der Erstellung des Hardlinks gestiegen ist.
Und da dies nur ein Link ist, wird der Speicherplatz selbst nicht beansprucht. Es speichert eine einzelne Datenmenge, und die inode-Nummer ist identisch und verweist auf dieselbe Datei.
Wir überprüfen die inode-Nummer mit der Option -i.
alleycat:[haturatu]:~/git/hardlink$ ls -lia
合計 16
13238408 drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:02 .
11406555 drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
13265123 -rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
13265123 -rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
Was ist ein Inode?
Dies hängt vom Dateisystem ab, daher bezieht sich das Obige auf eine GNU/Linux-Umgebung. In BSD-basierten Dateisystemen könnte es vnode sein, und in ZFS znode usw., was sich etwas unterscheidet, aber historisch gesehen kann man es sich als Erweiterung des ursprünglichen UNIX-Dateisystems vorstellen.
Und im Gegensatz zu symbolischen Links bleibt bei Hardlinks hardlink2 bestehen, wenn Sie hardlink1 löschen, und hardlink1 bleibt bestehen, wenn Sie hardlink2 löschen. In dieser Hinsicht scheint es so zu sein, dass das Dateisystem die Datei selbst verwaltet, aber es ist immer noch etwas schwer zu verstehen, nicht wahr?
Betrachtet man es jedoch so, sind Hardlinks praktisch, aber während symbolische Links auf Dateien auf verschiedenen Festplatten verweisen können, können Hardlinks nicht auf verschiedenen Festplatten erstellt werden.
Einfach ausgedrückt, basierend auf der vorherigen Erklärung, handelt es sich beim Dateisystem um eine inode-basierte Angelegenheit auf einer einzelnen Festplatte, sodass eine andere Festplatte außerhalb der Zuständigkeit des Dateisystems liegt und in Bezug auf die Schichtstruktur nicht referenziert werden kann.
Daher ist es notwendig, einen symbolischen Link zu erstellen, wenn die Datei auf einer anderen Festplatte existiert.
Und aus Sicht des Dateisystems wird dies häufig bei der Wiederherstellung von Festplatten verwendet, um anhand früherer inode-Informationen zu identifizieren, welche Dateien mit welcher inode-Nummer erstellt oder gelöscht wurden.
Hier ist eine Falle: Wenn eine Datei überschrieben wird, wird auch diese inode-Nummer aktualisiert. Das bedeutet, dass Sie beim Erstellen von Backup-Skripten möglicherweise darauf achten müssen, Skripte zu erstellen, die keine Überschreibungsprozesse enthalten. (Ich habe das einmal vermasselt).
Dateien mit derselben Inode-Nummer identifizieren
Sie können dies mit dem Befehl find überprüfen.
alleycat:[haturatu]:~/git/hardlink$ find . -inum 13265123
./hardlink2
./hardlink1
Also, lassen Sie uns hardlink1 löschen.
alleycat:[haturatu]:~/git/hardlink$ rm -i hardlink1
rm: 通常ファイル 'hardlink1' を削除しますか? y
alleycat:[haturatu]:~/git/hardlink$ ls -lai
合計 12
13238408 drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:23 .
11406555 drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
13265123 -rw-r--r-- 1 haturatu haturatu 17 1月 12 15:01 hardlink2
alleycat:[haturatu]:~/git/hardlink$ cat hardlink2
You are an idiot
Damit ist der Wert des Hardlinks ebenfalls 1, und es wurde bestätigt, dass hardlink2, das ursprünglich mit ln hardlink1 hardlink2 als Link zu hardlink1 erstellt wurde und dieselben Informationen wie hardlink1 enthält, existiert und dieselben Daten besitzt.
In der Praxis
Ich habe mich nach langer Zeit wieder damit beschäftigt, aber wenn Sie große Dateien auf derselben Festplatte kopieren möchten, aber den Festplattenverbrauch reduzieren möchten, scheint Hardlinking die bessere Option zu sein.
Nun, es ist vielleicht nichts, was man bewusst oft benutzt, aber es ist interessant, da es hilft, die Struktur des Dateisystems ein wenig zu verstehen.
Bis zum nächsten Mal.
Mit freundlichen Grüßen.