Erkennen von Hardlinks unter XP Prof
Hi Leute
Hab mal wieder eine Frage: Ich brauche teilweise in unterschiedlichen Verzeichnissen Zugriff auf die selbe Datei, beispielsweise bei der Kategorisierung meiner Downloads.
Dazu verwende ich Hardlinks (Befehl: fsutil hardlink create <new> <old>) um den Effekt zu erzielen, dass ich an allen Orten alle Möglichkeiten habe, ohne die Einschränkungen die z.B. Verknüpfungen mit sich bringen und aber auch ohne zusätzlich Speicherplatz zu verbrauchen.
So weit, so gut; bis hierher ist mal alles klar. Allerdings bin ich vor meinem Urlaub mit dem Erstellen der Hardlinks nicht fertig geworden und weiß mittlerweile leider nicht mehr wie weit ich gekommen bin, daher bin ich auf der Suche nach einem Tool, Skript oä, das die Daten auf Dateisystemebene prüft, ob es sich tatsächlich um den selben Speicherbereich und nicht eine Kopie handelt (also erkennt ob es sich um einen Hardlink handelt oder nichtl...)
Betriebssystem ist XP Prof, Dateisystem NTFS
Schon im Vorhinein danke für die Hilfe
Hab mal wieder eine Frage: Ich brauche teilweise in unterschiedlichen Verzeichnissen Zugriff auf die selbe Datei, beispielsweise bei der Kategorisierung meiner Downloads.
Dazu verwende ich Hardlinks (Befehl: fsutil hardlink create <new> <old>) um den Effekt zu erzielen, dass ich an allen Orten alle Möglichkeiten habe, ohne die Einschränkungen die z.B. Verknüpfungen mit sich bringen und aber auch ohne zusätzlich Speicherplatz zu verbrauchen.
So weit, so gut; bis hierher ist mal alles klar. Allerdings bin ich vor meinem Urlaub mit dem Erstellen der Hardlinks nicht fertig geworden und weiß mittlerweile leider nicht mehr wie weit ich gekommen bin, daher bin ich auf der Suche nach einem Tool, Skript oä, das die Daten auf Dateisystemebene prüft, ob es sich tatsächlich um den selben Speicherbereich und nicht eine Kopie handelt (also erkennt ob es sich um einen Hardlink handelt oder nichtl...)
Betriebssystem ist XP Prof, Dateisystem NTFS
Schon im Vorhinein danke für die Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 38300
Url: https://administrator.de/contentid/38300
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
8 Kommentare
Neuester Kommentar
Na, Shadow377,
nu mal keine Panik - sooo unlösbar ist das ja nun auch nicht.
Wenn Du nicht selber scripten oder bätchen willst, dann lade Dir von Mark Russinovich's Sysinternals-Seite das Junction-Tool herunter.
Dann kannst mit
..alle Datei/Verzeichnisverknüpfungen auf Laufwerk C:\ anzeigen lassen am CMD-Prompt.
Was ich bei manchen Problemen hier nicht vollständig verstehe....
Wie können solche Situationen entstehen, dass zuerst Hardlinks angelegt werden, bevor bekannt ist, wie man/frau die wiederfindet oder wieso jemand mit C# ein paar Registrykeys schreibt und dann hier im Forum fragt, wie er RegKeys lesen kann.
Der 2. Fall war grad gestern hier im Forum.
Ich hoffe, solche Erlebnisse sind lehrreich..
Biber,
der natürlich auch schon Programme aufgerufen hat, die er gar nicht allein beenden konnte...*gg
nu mal keine Panik - sooo unlösbar ist das ja nun auch nicht.
Wenn Du nicht selber scripten oder bätchen willst, dann lade Dir von Mark Russinovich's Sysinternals-Seite das Junction-Tool herunter.
Dann kannst mit
junction c:\*.* /s
Was ich bei manchen Problemen hier nicht vollständig verstehe....
Wie können solche Situationen entstehen, dass zuerst Hardlinks angelegt werden, bevor bekannt ist, wie man/frau die wiederfindet oder wieso jemand mit C# ein paar Registrykeys schreibt und dann hier im Forum fragt, wie er RegKeys lesen kann.
Der 2. Fall war grad gestern hier im Forum.
Ich hoffe, solche Erlebnisse sind lehrreich..
Biber,
der natürlich auch schon Programme aufgerufen hat, die er gar nicht allein beenden konnte...*gg
Nein, Shadow377,
da hatte ich zu voreilig losgeplappert - ich war wirklich auf der falschen Schiene.
Nämlich bei Junctions/Soft- und Symbolic Links, die ich auch gelegentlich verwende.
Für diese Hardlinks schätze ich, dass Du es mit zwei, dreizeilen Batch und vor allen dem ln.exe-Utility aus dem Windows-ResKitz hinbekommen kannst.
Wäre ja nicht so schlimm - lässt ja schnell etwas zusammenschroten.
Aber da schreckt mich die Theorie:
Da ein HardLink ja ein ganz normaler Eintrag im NTFS-Dateisystem/in der MFT ist, kann es nur eine Möglichkeit geben, einen Hardlink zu lokalisieren.
Du musst bei der Original-Datei, also der vorher vorhandenen "Source"-Datei, und auch bei der Schein-Datei prüfen und feststellen, dass dort nicht nur eine Referenz auf dieses "Datei-Objekt" verweist, sondern zwei oder mehr.
Das wiederum hieße, Du müsstest für jede gottverdammte Drömeldatei auf Deinem 2700-TeraByte-Rechner einzeln prüfen, ob auf diesen MasterFileTable-Eintrag ein oder mehr Referenzen verweisen.
Und für alle Dateien mit 2 oder mehr Referenzen wiederum danach eine Suche nach deren Datei-Index (also der eindeutigen Dateiobjekt-Referenz machen.
Nö.
Da warte ich lieber mit ab, bis M$ da ein Utility nachliefert
Skizze mit ln.exe wäre:
Schritt 1 ALLE ALLE ALLE Dateien mit ln.exe prüfen, ob die Anzahl Refernenzen >1 ist.
Beispiel in meinem Temp-Verzeichnis:
Wie zu erkennen ist, ist nur bei der Datei BEISPIEL.txt der Anzahl-der Referenzen (die zweite Spalte) größer 1.
Und in der ersten Spalte steht der so genannte Datei-Index (0001-00C4).
Wenn Du den ermittelt hast, dann kannst Du damit loslaufen und gezielt rekursiv anch diesem Datei-index suchen.
Das ergibt dann (vom Root-Verzeichnis ausführen!):
Da wittu bekloppt, wenn Du das mit Deinen 300000 Dateien machen willst.
Oder lass mal einen HardLinkScan.bat über Nacht laufen.
Eventuell über eine Polarnacht.
Sorry
Biber
da hatte ich zu voreilig losgeplappert - ich war wirklich auf der falschen Schiene.
Nämlich bei Junctions/Soft- und Symbolic Links, die ich auch gelegentlich verwende.
Für diese Hardlinks schätze ich, dass Du es mit zwei, dreizeilen Batch und vor allen dem ln.exe-Utility aus dem Windows-ResKitz hinbekommen kannst.
Wäre ja nicht so schlimm - lässt ja schnell etwas zusammenschroten.
Aber da schreckt mich die Theorie:
Da ein HardLink ja ein ganz normaler Eintrag im NTFS-Dateisystem/in der MFT ist, kann es nur eine Möglichkeit geben, einen Hardlink zu lokalisieren.
Du musst bei der Original-Datei, also der vorher vorhandenen "Source"-Datei, und auch bei der Schein-Datei prüfen und feststellen, dass dort nicht nur eine Referenz auf dieses "Datei-Objekt" verweist, sondern zwei oder mehr.
Das wiederum hieße, Du müsstest für jede gottverdammte Drömeldatei auf Deinem 2700-TeraByte-Rechner einzeln prüfen, ob auf diesen MasterFileTable-Eintrag ein oder mehr Referenzen verweisen.
Und für alle Dateien mit 2 oder mehr Referenzen wiederum danach eine Suche nach deren Datei-Index (also der eindeutigen Dateiobjekt-Referenz machen.
Nö.
Da warte ich lieber mit ab, bis M$ da ein Utility nachliefert
Skizze mit ln.exe wäre:
Schritt 1 ALLE ALLE ALLE Dateien mit ln.exe prüfen, ob die Anzahl Refernenzen >1 ist.
Beispiel in meinem Temp-Verzeichnis:
(=17:56:18 D:\temp=)
>ln -l *.txt
0001-00C4 2 BEISPIEL.TXT
0002-C140 1 benutzer1.txt
0002-C13F 1 benutzer2.txt
0014-997F 1 datetime.txt
0018-A5AA 1 findstrhelp.txt
0001-00D8 1 ipconfig.txt
000D-95E9 1 MessSub.txt
0001-00E3 1 passwds.txt
0023-C14D 1 RevInfo.txt
0001-00EF 1 rsmoutput.txt
0007-79CE 1 werte.txt
Wie zu erkennen ist, ist nur bei der Datei BEISPIEL.txt der Anzahl-der Referenzen (die zweite Spalte) größer 1.
Und in der ersten Spalte steht der so genannte Datei-Index (0001-00C4).
Wenn Du den ermittelt hast, dann kannst Du damit loslaufen und gezielt rekursiv anch diesem Datei-index suchen.
Das ergibt dann (vom Root-Verzeichnis ausführen!):
(=17:59:16 D:\=)
>ln -x -r 0001-00c4 2>nul
0001-00C4 2 Biber\thisIsAlinkedFile.txt
0001-00C4 2 temp\BEISPIEL.TXT
Da wittu bekloppt, wenn Du das mit Deinen 300000 Dateien machen willst.
Oder lass mal einen HardLinkScan.bat über Nacht laufen.
Eventuell über eine Polarnacht.
Sorry
Biber
Jepp, shadow377,
Deine Datenmenge ist noch handelbar...
Du müsstest dann also eigentlich nur
- ins Verzeichnis d:\Downloads wechseln,
- dort am CMD-Prompt eingeben:
..Dann solltest Du alle Hardlinks [d.h. eine Hälfte davon] haben.
Schreib mal, wie es lief.
Gruß
Biber
Deine Datenmenge ist noch handelbar...
Du müsstest dann also eigentlich nur
- ins Verzeichnis d:\Downloads wechseln,
- dort am CMD-Prompt eingeben:
for /f "tokens=1-3,*" %i in ('ln -l *.*') Do @if %j GEQ 2 Echo %i %j %k
Schreib mal, wie es lief.
Gruß
Biber
...Du weißt doch - Windows ist ein intuitiv bedienbares Betriebssystem...
Also einfach in der FireFox-Addressleiste eingeben:
http://Reskit.com
Alle ab Win2000 aufwärts sollten das haben.
Gruß
Biber
Also einfach in der FireFox-Addressleiste eingeben:
http://Reskit.com
Alle ab Win2000 aufwärts sollten das haben.
Gruß
Biber