shadow377
Goto Top

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

Content-ID: 38300

Url: https://administrator.de/contentid/38300

Ausgedruckt am: 22.11.2024 um 21:11 Uhr

Shadow377
Shadow377 21.08.2006 um 12:18:37 Uhr
Goto Top
Kann mir denn niemand helfen? Es muss doch ein Tool geben, das sowas kann...
Biber
Biber 21.08.2006 um 13:15:32 Uhr
Goto Top
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
junction c:\*.* /s 
..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..face-wink

Biber,
der natürlich auch schon Programme aufgerufen hat, die er gar nicht allein beenden konnte...*gg
Shadow377
Shadow377 21.08.2006 um 21:46:12 Uhr
Goto Top
Danke für die Antwort, Hardlinks werden allerdings nicht gefunden..Liegt wohl daran, dass das Tool nach reparse points und nicht nach Hardlinks sucht? (sind ja meines wissens unterschiedlich)
Tut mir leid wenn ich möglicherweise was falsch verstehe, aber bei hardlinks bin ich nicht so der Profi; weiß auch erst seit relativ kurzem dass es sie überhaupt (unter windows) gibt..
Biber
Biber 28.08.2006 um 18:04:50 Uhr
Goto Top
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:
(=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. face-big-smile

Sorry
Biber
Shadow377
Shadow377 28.08.2006 um 18:28:38 Uhr
Goto Top
Danke mal für deine Antwort, habe schon fast die Hoffnung aufgegeben eine Lösung zu finden

Ich werde mir das ganze mal morgen oder in den nächsten Tagen genauer ansehen, allerdings glaube ich, dass du mir mehr geholfen haben könntest als du glaubst, denn

1)Musst du ja nicht den ganzen Rechner prüfen, da es meines Wissens nach nicht möglich ist Hardlinks von einer Partition auf eine andere zu erstellen;

2)Das ganze lässt sich ja (zumindest wenn ich das jetzt auf die schnelle richtig durchschaut habe) auch auf einen gewissen Ordnerstamm eingrenzen, was mir erheblich weiterhilft, da ich weiß, dass die Hardlinks beispielsweise irgendwo in D:\downloads liegen müssen (computerspezifisch, gilt nicht generell sondern ich habe sie so erstellt)-->auch damit wird die Menge der zu prüfenden Dateien und folglich auch die Zeit erheblich Verringert

3)Unter Annahme von 2) muss dadurch nur noch eine ungefähre Datenmenge von <20GB und <60.000 Dateien (meist <20.000) geprüft werden (in den zwei für mich wichtigsten Fällen 4,5/7,7 GB mit ~13.000/4.000 Dateien); das sollte meiner Einschätzung nach in einer relativ kurzen Zeitspanne möglich sein, oder?

Werde mir das ganze wie gesagt in den nächsten Tagen genauer ansehen und mich dann (hoffentlich mit Erfolgen) melden
Biber
Biber 28.08.2006 um 18:38:16 Uhr
Goto Top
Jepp, shadow377,

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  
..Dann solltest Du alle Hardlinks [d.h. eine Hälfte davon] haben.

Schreib mal, wie es lief.

Gruß
Biber
Shadow377
Shadow377 28.08.2006 um 22:39:19 Uhr
Goto Top
Wollte das ganze mal ausprobieren, habe allerdings noch eine Frage:
Wo genau kriege ich ln.exe her, welches Resource Kit brauche ich dafür?
Biber
Biber 29.08.2006 um 10:13:00 Uhr
Goto Top
...Du weißt doch - Windows ist ein intuitiv bedienbares Betriebssystem... face-wink

Also einfach in der FireFox-Addressleiste eingeben:
http://Reskit.com

Alle ab Win2000 aufwärts sollten das haben.

Gruß
Biber