{"id":314,"date":"2006-12-01T20:03:14","date_gmt":"2006-12-01T18:03:14","guid":{"rendered":"http:\/\/www.glorf.it\/blog\/2006\/12\/01\/windows-tools\/harte-links"},"modified":"2006-12-20T21:58:49","modified_gmt":"2006-12-20T20:58:49","slug":"harte-links","status":"publish","type":"post","link":"http:\/\/www.glorf.it\/blog\/2006\/12\/01\/windows-tools\/harte-links","title":{"rendered":"Harte Links"},"content":{"rendered":"<p>Heute hatte ich wieder das Problem, dass ich unter zwei verschiedenen Pfaden die gleiche Ausgabe einer Datei ben&#246;tigte. Es ging um die INI-Datei von zwei Instanzen des gleichen Programmes. Als ich schon fast den Copy-Batch fertig hatte, um die eine Datei immer wieder &#252;ber die andere zu kopieren, damit ich die &#196;nderungen nicht doppelt pflegen muss, fiel mir eine bessere Alternative ein:<\/p>\n<p><strong>Hardlinks anlegen<\/strong><\/p>\n<p>Wenn man NTFS als Dateisystem einsetzt, dann kann man sogenannte Hardlinks anlegen. Das bedeutet, dass man auf die gleiche Datei einen echten Link legt. Man kann dann unter dem Pfad des Links und dem originalen Pfad auf die Datei zugreifen. Die Programme merken gar nicht, ob das ein Hardlink ist oder das Original, weil einfach ein echter Eintrag im Verzeichnis angelegt wurde.<br \/>\nHier die Syntax:<br \/>\n<code>fsutil hardlink create &lt;neuer Dateinname&gt; &lt;vorhandener Dateiname&gt;<\/code><\/p>\n<p>Hier ein Beispiel:<br \/>\nAngenommen es existiert die Datei &quot;E:\\temp\\dir1\\MyOriginal.ini&quot; und ich will auf die gleiche Datei auch unter dem Pfad &quot;E:\\temp\\dir2\\MyCopy.ini&quot; zugreifen, dann kann man den Hardlink so anlegen:<\/p>\n<p><code>C:\\&gt;fsutil hardlink create E:\\temp\\dir2\\MyCopy.ini E:\\temp\\dir1\\MyOriginal.ini<br \/>\nHardlink erstellt f&#252;r E:\\temp\\dir2\\MyCopy.ini &lt;&lt;===&gt;&gt; E:\\temp\\dir1\\MyOriginal.ini<\/code><\/p>\n<p>Wenn man eher visuell orientiert ist, dann kann man nat&#252;rlich auch <a href=\"http:\/\/www.google.de\/search?hl=de&#038;q=ntfs+hardlink+shell+utility+download&#038;btnG=Google-Suche&#038;meta=\" target=\"_blank\">Shell-Utilities<\/a> verwenden. Ich habe von denen aber noch keines ausprobiert.<\/p>\n<p><strong>Hardlinks entfernen<\/strong><\/p>\n<p>Wenn man Hardlinks entfernen will, dann l&#246;scht man sie einfach, als seien sie Dateien. Dabei wird aber nur der Eintrag aus dem Verzeichnis gel&#246;scht. Erst mit dem letzten Verweis wird auch die Datei gel&#246;scht. Das gilt auch, wenn man das urspr&#252;ngliche Original zuerst l&#246;scht. Die &quot;Kopie&quot; bleibt erhalten.<\/p>\n<p>Beispiel: l&#246;sche zuerst die urspr&#252;ngliche Datei und sehe trotzdem noch den Hardlink:<\/p>\n<p><code>E:\\temp&gt;dir \/B dir1<br \/>\nMyOriginal.ini<\/p>\n<p>E:\\temp&gt;del dir1\\MyOriginal.ini<\/p>\n<p>E:\\temp&gt;dir \/B dir2<br \/>\nMyCopy.ini<\/code><\/p>\n<p>Erst wenn ich auch den letzten Verweis auf die Datei l&#246;sche, dann ist sie weg:<\/p>\n<p><code>E:\\temp&gt;del dir2\\MyCopy.ini<\/p>\n<p>E:\\temp&gt;dir \/B dir2<\/code><\/p>\n<p>Hinweis: Hardlinks k&#246;nnen leider nur auf Dateien in der gleichen Partition verweisen. Das gilt auch f&#252;r Junction-Points&#8230;<\/p>\n<p><strong>Junction-Points (Abzweigungspunkte)<\/strong><\/p>\n<p>Leider geht das mit Verzeichnissen nicht. Hier bietet NTFS Junction-Points (Abzweigungspunkte) an. Sie arbeiten intern aber leider anders. Es werden wieder echte Links gelegt. Von Verzeichnis A nach Verzeichnis B. Unter B sehe ich also genau die Dateien, die unter A stehen. Deswegen die Warnung vorab: Wenn ich also eine Datei aus B l&#246;sche, dann ist sie auch aus A gel&#246;scht. <\/p>\n<p>Dazu ben&#246;tigt man das Tool LinkD aus dem <a href=\"http:\/\/www.microsoft.com\/downloads\/details.aspx?displaylang=en&#038;familyid=9D467A69-57FF-4AE7-96EE-B18C4790CFFD\">Windows Server Ressource Kit<\/a>. So sieht die Syntax aus:<\/p>\n<p><code>LINKD &lt;Link-Verzeichnis&gt; &lt;originales Verzeichnis&gt;<\/code><\/p>\n<p>Beispiel:<\/p>\n<p><code>E:\\temp&gt;dir \/B dir1<br \/>\nfile1.txt<br \/>\nfile2.txt<\/p>\n<p>E:\\temp&gt;linkd linkdir dir1<br \/>\nLink created at: linkdir<\/p>\n<p>E:\\temp&gt;dir \/B linkdir<br \/>\nfile1.txt<br \/>\nfile2.txt<\/code><\/p>\n<p>Aber Vorsicht: Es ist in beiden F&#228;llen jetzt das gleiche Verzeichnis. <\/p>\n<p><code>E:\\temp&gt;dir \/B dir1<br \/>\nfile1.txt<br \/>\nfile2.txt<\/p>\n<p>E:\\temp&gt;del linkdir\\file1.txt<\/p>\n<p>E:\\temp&gt;dir \/B dir1<br \/>\nfile2.txt<\/code><\/p>\n<p>Wenn man den Junction-Point wieder los sein will, dann geht das so:<\/p>\n<p><code>E:\\temp&gt;linkd linkdir \/D<br \/>\nThe delete operation succeeded.<\/code><\/p>\n<p>Das originale Verzeichnis ist dann mit samt Inhalt noch da.<\/p>\n<p>Die Wikipedia listet <a href=\"http:\/\/en.wikipedia.org\/wiki\/NTFS_junction_point\">ein paar Risiken und Nebenwirkungen<\/a>, die interessant sind. Microsoft stellt auch  <a href=\"http:\/\/support.microsoft.com\/?kbid=205524\">ein paar weiterf&#252;hrende Infos<\/a> bereit. <\/p>\n<p><strong>Und wie geht es weiter?<\/strong><\/p>\n<p>Diese netten Features wurden offenbar unter Vista aufgewertet. Wissenswertes dazu hat <a href=\"http:\/\/blogs.technet.com\/dmelanchthon\/archive\/2006\/11\/24\/kein-zugriff-auf-verzeichnisse-unter-windows-vista.aspx\">Daniel Melanchthon<\/a> zusammengestellt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heute hatte ich wieder das Problem, dass ich unter zwei verschiedenen Pfaden die gleiche Ausgabe einer Datei ben&#246;tigte. Es ging um die INI-Datei von zwei Instanzen des gleichen Programmes. Als ich schon fast den Copy-Batch fertig hatte, um die eine Datei immer wieder &#252;ber die andere zu kopieren, damit ich die &#196;nderungen nicht doppelt pflegen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[],"_links":{"self":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/314"}],"collection":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/comments?post=314"}],"version-history":[{"count":0,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/314\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/media?parent=314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/categories?post=314"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/tags?post=314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}