Verzeichnislinks: symlinkd oder junction verwenden

    VMware Workstation ist eine der Anwendungen, die mit symbolischen Verzeichnislinks nicht zurecht kommenBei Links auf Datei­system­ebene bietet NTFS für Ver­zeichnisse zwei auf den ersten Blick gleiche Varianten an: symbo­lische Links (symlinkd) oder Ver­zeichnis­verknüpfungen (junction).

    Beide werden in einer Eingabe­aufforderung mit dem Tool mklink.exe erstellt – mit einem Unterschied: Verzeichnis­verknüpfungen (junction) benötigen keine Administrator­rechte, das Erstellen eines symbolischen Links (symlinkd) dagegen schon. Es stellt sich die Frage, was man konkret verwenden soll, etwa wenn man den Inhalt eines Verzeichnisses wegen Überfüllung des Volumes auf einen anderen Datenträger auslagert und per Verzeichnis­link dafür sorgen will, dass sie über den alten Pfad erreichbar sind.

    Schnelle Korrektur: Aus dem symbolischen Link wird eine JunctionMark Russinovich erklärt die Unterschiede zwischen beiden Link-Arten in einem TechNet-Artikel: Verzeichnisverknüpfungen gibt es schon länger, und der Unterschied zu symbolischen Links liegt in deren Auflösung, wenn sich die Ziele auf Remote-Maschinen befinden. Dies erfolgt bei symbolischen Links auf der Client-Maschine, bei Verzeichnisverknüpfungen auf dem Server. Dazu macht er aber die wichtige Anmerkung, dass nicht alle Anwendungen mit symbolischen Links umgehen können.

    Obwohl der Artikel bereits von 2007 ist, trifft dies auch heute noch zu: So kann man bei VMware Workstation im Datei-Dialog für Festplatten- oder DVD-Images keinen symbolischen Links folgen, deren Ziele auf einem anderen Volume liegen – trägt man sie manuell in die entsprechende VMX-Datei ein, funktionieren sie allerdings durchaus. Um Komplikationen zu vermeiden, sollte man deshalb allgemein auf Verzeichnisverknüpfungen statt auf symbolische Verzeichnislinks zurückgreifen.

    6 Kommentare

    Bernhard Busley sagt:
    29. April 2014 - 20:49

    Im Zusammenhang mit mehreren XP-Win7-Migrationen beschäftige ich mich nun seit einigen Wochen mit Symbolischen Links und Junctions und versuche, die wesentlichen Unterschiede für mich heraus zu finden. Dieser Artikel - obwohl schon über 3 Jahre alt - war der erste, der mich auf die richtige Spur gebracht hat. Um es kurz zu machen: Nach der Trennung von System und Daten und einer "Verlinkung" über einen "symbolic link" (mklink /d) funktionierte mein iTunes nur noch eingeschränkt bzw. produzierte viele Fehler, sobald ein iPhone mit dem PC verbunden war.

    Aufgrund des Hinweises (Zitat: M. Russinovich) "Dazu macht er aber die wichtige Anmerkung, dass nicht alle Anwendungen mit symbolischen Links umgehen können" habe ich auf "junctions" (mklink /j) umgestellt.

    Und siehe da: iTunes läuft jetzt absolut fehlerfrei mit angesteckten "iDevices".

    merci BB

    Günter Gehrke sagt:
    22. Februar 2019 - 17:38

    Mit solchen Verlinkungen wie Juction habe ich zuvor noch nie gearbeitet.
    Da sehe ich auch keine Vorteile.
    Ich bin besser gefahren, wenn ich ganze Verzeichisse mit langem Parameter einem Laufwerk virtuell zugeordnet habe.

    Mit Subst Laufwerk: und Pfad habe ich einfach einen Laufwerksbuchstabe zugefügt, der im Explorer wie eine Festplatte angezeigt wird.
    In der Eingabeaufforderung einfach subst /? eingeben und schon sieht man die Hilfe.

    Beispiel
    subst z: d:\dokumente und einstellungen\guenter\eigene dateien\

    Jetzt ist eigene Dateien im Laufwerk Z: zu sehen

    Anon sagt:
    31. März 2019 - 0:20

    @Günter Gehrke

    Der Grundgedanke ist ein anderer. Junctions weden im Regelfall nicht benutzt, um dem Nutzer das Leben leichter zu machen. Dies ist mit virtuellen Laufwerken sicherlich einfacher.
    Der Nutzen von Junctions liegt zum Beispiel darin, dass man Daten auf anderen Partitionen/Festplatten/Computern speichern kann, ohne dass das lesende/schreibende Programm das weiß. Zum Beispiel sehr nützlich, wenn ein Programm sich auf die Systempartition installiert oder Daten dort speichert, aber diese fast voll ist.
    MfG

    Dreifels sagt:
    15. Februar 2020 - 23:17

    Junction benutze ich schon seit vielen Jahren. Ist z.B. sinnvoll, wenn man /Downloads/ nicht auf C: haben will, weil z.B C: halt begrenzt ist aber z.B. als E: eine 1TB liegt, mit viel Platz. Windows hat ja als default immer alles auf dasselbe Laufwerk gepackt, was z.B. auch das tägliche Backup unnötig aufbläht und, schlimmer noch, bei einigen Anwendungen schlichtweg Mist macht (Backup packt alles in .zip-Dateien, die auf /tmp erstellt werden. Bei einem Backup von Anwendungen mit sehr langen Verzeichnisnamen wird dann aber der verzeichnisname am Ende abgeschnitten, was dazu führt, dass Files gegenseitig überschrieben wrden. - meine negative Erfahrung bei backups von Oblivion und Skyrim, wo Mods mit Pfadnamen bis zu 254 Zeichen bestanden, also 254 + /tmp = 257 also abgeschnitten und WIederherstellung unbrauchbar.

    Ebenso habe ich "Krempel", wie Bilder, Viodeos, etc. alle weg von C:, und /tmp (aber in dem Fall mittels Envirement-Änderung) auf E: gelegt, weil ich darauf Momentum Cache habe, was die immer wiederkehrenden massigen Schreib-Lesezugriffe von temp-Files im RAM verwaltet, also die SSD schützt und gleichzeitig schneller ist. (7000 KB/s gegenüber 150 kb/s)

    Also: ohne Junktion hätte ich echt Probleme.
    Der Unterschied zwischen (junction) und (symlinkd) ist mir aber nie recht bewusst gewesen. Mal testens, wie das bei Programmen ist, ob und wie der komplett verlegt werden können, ohne den Zugriff durch weitetere Programme zu unterbinden. (z.B. Launcher bei Spielen, oder STEAM)

    Dreifels sagt:
    15. Februar 2020 - 23:29

    Nachtrag:
    Dieser Satz verwirrt: "Beide werden in einer Eingabeaufforderung mit dem Tool mklink.exe erstellt"
    Was is tmit Junction.exe bzw. Junction64.ese von Mark Russinovich
    https://docs.microsoft.com/en-us/sysinternals/downloads/junction
    ???
    Die Unterschiede bedrüfen einer Erläuterung, die auch nicht-Informatiker verstehen.

    Dave sagt:
    26. November 2020 - 12:44

    Unter Windows 2000 und XP gab es mklink noch nicht, dafür brauchte man die junction.exe von Mark Russinovich. Diese kann aber, wie der name schon sagt. Nur Verzeichnisverbindungen erstellen, jedoch keine symbolischen Verknüpfungen. mit mklink wurde das Tool de facto abgelöst.