Unterscheiden sich symbolische Verknüpfungen tatsächlich in der Datenträgernutzung?

21

Ich habe in so vielen Websites gelesen, dass symbolische Links (Softlinks, Symlinks) in Linux genauso sind wie Zeiger , die auf eine andere Datei verweisen, die sich möglicherweise irgendwo befindet (wie Windows-Verknüpfungen). Wenn ich jedoch die Datenträgerverwendung eines Ordners überprüfe, in dem symbolische Verknüpfungen vorhanden sind, stimmen die duAngaben meines Dateimanagers und die Berichte nicht überein. Wenn ich jedoch du -L( -L, --dereference; dereference all symbolic linksvon der Manpage) eingebe, sind die Ausgabe von du -Lund die Größe, die mein Dateimanager meldet, gleich .

Meine Frage ist : Wenn ich einen Softlink zu einer großen Datei in meiner separatenhomePartition habe, habe ich dann Probleme?

Beispiel :

Mein /var/tmpOrdner ist jetzt leer. Lassen Sie uns eine Datei erstellen:

$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total

Und mein Dateimanager (in diesem Fall Thunar) berichtet

Größe: 1 Stück, insgesamt 163,0 kB

Gut. Jetzt erstellen wir eine wirklich große Datei /tmpund einen Symlink dazu:

$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0   ./heavy.txt
168 .
168 total

Alles ist in Ordnung für jetzt. Aber wenn ich meinen Dateimanager öffne:

Größe: 2 Elemente, insgesamt 570,3 kB

Und schlussendlich:

$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total

Wenn die Partition, in der /var/tmpsich die Partition befindet, 1 GB groß ist und ich darin einen Link zu einer 1 GB-Datei erstelle, wird meine Festplatte sterben? Ich weiß, dass du168 und Thunar 1 GiB ausgegeben werden, aber ich weiß nicht, welches richtig ist.

Astrojuanlu
quelle
Sind Sie sicher, dass ein Programm nicht beispielsweise in Mib und ein anderes in MB meldet?
HandyGandy
Nein, es ist kein Einheitenproblem.
Astrojuanlu

Antworten:

34

Symbolische Verknüpfungen nehmen natürlich Platz ein, aber nur den Platz, der zum Speichern des Namens und des Ziels sowie einiger Bytes für andere Metadaten benötigt wird. Der Platz, den ein symbolischer Link einnimmt, hängt nicht vom Platz ab, den das Ziel einnimmt (schließlich muss das Ziel nicht einmal existieren).

Plain gibt duden von einem Verzeichnisbaum auf der Festplatte belegten Speicherplatz an. du -Lgibt den Speicherplatz an, der von einem Verzeichnisbaum belegt würde, wenn alle symbolischen Links durch ihr Ziel ersetzt würden. Ersteres ist normalerweise die nützliche Information; Dies ist beispielsweise der Speicherplatz, den Sie wiederherstellen würden, wenn Sie den Baum gelöscht hätten, und (ungefähr) der Speicherplatz, den Sie zum Sichern des Baums benötigen.

duIn einem Verzeichnisbaum wird (normalerweise) etwas mehr als die Summe der Dateigrößen angezeigt. Das liegt an zwei Dingen. Erstens werden duauch Verzeichnisse gezählt, die etwas Platz zum Speichern von Dateinamen und Metadaten benötigen. Zweitens wird duder von einer Datei belegte Speicherplatz gezählt, der sich von der Dateigröße unterscheiden kann. Der häufigste Effekt besteht darin, dass Dateien eine ganzzahlige Anzahl von Blöcken belegen (4 KB bei einer typischen Linux-Installation), also eine 1-Byte-Datei zeige als 4kB in du output; Durch die Komprimierung (z. B. der primitiven Form, die von spärlichen Dateien auf nahezu jedem Unix-Dateisystem bereitgestellt wird ) kann die Dateigröße jedoch über die Festplattenbelegung hinausgehen.

Aus den von Ihnen angegebenen Zahlen geht hervor, dass Thunar die Summe der Dateigrößen im Verzeichnisbaum unter Verwendung symbolischer Links angibt . Das wird auf subtile Weise gesagt - es wird behauptet, dass die Gesamtgröße 570,3 kB beträgt, nicht, dass die Festplattennutzung 570,3 kB beträgt. Aus der Benutzeroberfläche oder Dokumentation geht überhaupt nicht hervor, dass Thunar bei der Berechnung der Größe symbolischen Verknüpfungen folgt.

Welches „richtig“ ist, ist eine subjektive Angelegenheit. dumeldet die Datenträgernutzung. Thunar meldet die Gesamtgröße nach symbolischen Links. Das Erstellen einer symbolischen Verknüpfung hat keine nennenswerten Auswirkungen auf die Datenträgernutzung. Per Definition ändert sich jedoch die Gesamtgröße der symbolischen Verknüpfungen, die Thunar meldet.

Gilles 'SO - hör auf böse zu sein'
quelle
Ich habe meine Frage so bearbeitet, dass ich denke, dass sie jetzt ziemlich klar ist, aber ich danke Ihnen für die Antwort.
Astrojuanlu
@ Juanlu001: Ich habe meine Antwort entsprechend aktualisiert. Kurz gesagt, duzeigt die Festplattennutzung, während Thunar etwas anderes anzeigt.
Gilles 'SO- hör auf böse zu sein'
Der Unterschied ist wichtig, wenn Sie Backups erstellen, die Symlinks auflösen. Möglicherweise möchten Sie dies tun, wenn Sie wissen, dass Sie mehrere Symlinks unter einem Baum haben, die zu Positionen außerhalb eines Baums aufgelöst werden. Der Rest des Materials außerhalb dieses Baums ist für Sie jedoch nicht wichtig.
Mel
3

Ich denke, dass Ihr Dateimanager standardmäßig versucht, die Größe der Dateien zu ermitteln, auf die die Softlinks verweisen, wohingegen duSie die Größe des Verzeichnisses und der Softlinks selbst angeben, aber nicht die Dateien, auf die sie verweisen.

Zu klären,

`du`    -> size of directory + size of all the softlinks  
`du -L` -> size of directory + size of all the files that the softlinks are pointing to.

Ich bin mir nicht sicher, ob Sie dies gefragt haben, aber wenn ja, dann glaube ich, könnte dies die Antwort auf Ihre Frage sein.

Jay
quelle
Entschuldigung, das hat meine Frage nicht beantwortet: Was du gesagt hast, habe ich bereits herausgefunden. Ich habe es gerade bearbeitet.
Astrojuanlu