Problem mit der NTFS-Dateikomprimierung

Problem mit der NTFS-Dateikomprimierung

Ich habe mehrere hundert Fotodateien, die versehentlich von einem komprimierten externen Laufwerk mit Windows NTFS-Format auf ein zweites externes Laufwerk verschoben wurden, das mit Mac OS X formatiert war. Die Verschiebung wurde unter dem Betriebssystem Mac OS X durchgeführt. Leider wurde der Dateiverschiebungsvorgang abgeschlossen, ohne dass alle Originaldateien vom Windows-Dateisystem „dekomprimiert“ wurden.

Kennt jemand einen Wiederherstellungsdienst, eine Anwendung oder eine manuelle Konvertierungsmethode, mit der ich diese Fotodateien wiederherstellen kann, die jetzt alle als „beschädigte“ JPG- und RAW-Dateien angezeigt werden? Ich wäre für jede Hilfe oder jeden Vorschlag, den Sie mir geben können, sehr dankbar.

Antwort1

Die NTFS-Komprimierung wird durch ein Flag in den Dateimetadaten angezeigt, das in der Master File Table (MFT) gespeichert ist. Es ist schwierig, es direkt festzulegen, da der Dateisystemtreiber die Datei normalerweise komprimiert oder dekomprimiert, wenn Sie dieses Flag ändern. Sie könnten dieses Flag wahrscheinlich manuell hinzufügen – es ist nur ein einzelnes Bit im DWORD der Dateiattribute –, aber das direkte Hacken der MFT ist wahrscheinlich nicht der beste Ansatz. Versuchen Sie stattdessen Folgendes:

  1. Erstellen Sie auf einem NTFS-Volume (könnte ein Flash-Laufwerk sein, wenn Sie es mit NTFS formatieren) eine (oder mehrere) komprimierte Dateien (mit Windows). Für diese Anleitung nennen wir diese Dateien rescue1, rescue2, usw.
  2. Schließen Sie das NTFS-Laufwerk an Ihr Mac-System an (ohne die Dateien vorher zu dekomprimieren). Mounten Sie das Volume mit Lese-/Schreibzugriff. Nehmen wir an, es ist gemountet bei /mount/ntfs(ich verwende OS X nicht oft genug, um mir gemerkt zu haben, wo es externe Volumes mountet).
  3. Mithilfe eines Tools zum Kopieren von DateienInhalt, beispielsweise das Befehlszeilenprogramm dd, kopieren Sie den Inhalt Ihrer komprimierten Dateien ohne Metadaten in den Inhalt der komprimierten Dateien auf dem NTFS-Volume. Der Befehl würde etwa so aussehen dd if=/path/to/bad/file of=/mount/ntfs/rescue1 bs=4M: .
  4. Schließen Sie das Laufwerk erneut an Windows an und prüfen Sie, ob die komprimierten Dateien jetzt korrekt geöffnet werden können. Wenn dies möglich ist, können Sie sie problemlos von Windows dekomprimieren lassen (entweder direkt oder durch Kopieren auf ein Laufwerk, das keine Komprimierung unterstützt, wie z. B. ein FAT32-Flash-Laufwerk).
  5. Wenn dieser Ansatz funktioniert, können Sie damit alle Ihre Hunderte von Dateien retten. Erstellen Sie einfach so viele komprimierte Dateien auf dem NTFS-Laufwerk, wie Sie benötigen, benennen Sie sie nach Belieben (können auch die Originalnamen sein) und kopieren Sie den Inhalt vom Mac.

Beachten Sie, dass Sie nicht das gesamte NTFS-Volume komprimieren müssen. Dadurch übernehmen alle Verzeichnisse lediglich das Flag „Komprimiert“ und jede Datei übernimmt es vom Verzeichnis der Datei. Es kann jedoch nicht schaden, dies zu tun.

Ich empfehle allerdings die Verwendung eines gesicherten oder wegwerfbaren NTFS-Volumes. Wenn der NTFS-Treiber von OS X so schlecht ist, kann er die MFT beschädigen, wenn Sie versuchen, auf ein Windows-Volume zu schreiben.

Komplizierterer alternativer Ansatz, wenn der oben genannte Ansatz nicht funktioniert:

  1. Erstellen Sie eine Reihe komprimierter Dateien unter Windows. Der schwierige Teil ist, dass sie der Größe der fehlerhaften Dateien entsprechen müssen. Wenn Sie eine Datei mit einer Größe von 30913 Byte retten möchten, benötigen Sie IhrekomprimiertNTFS-Datei nach der Komprimierung diese Größe haben. Ich bin ehrlich: Ich bin mir nicht sicher, wie ich das einrichten soll. Machen Sie zumindest die Rettungsdateienmindestensdie Größe (auf der Festplatte) der Dateien, die gerettet werden müssen. Am besten ist es, wenn die Größe auf 4 KB genau übereinstimmt, da dies die Standardgröße eines NTFS-Clusters ist (die Zuordnungsblöcke, die für Dateidaten verwendet werden).
  2. Verwenden Sie das fsutilDienstprogramm in Windows, um dieAusmaßeder Rettungsdateien. Die Extents sind die tatsächlichen Offsets auf dem Datenträger, auf dem die Daten der Datei in der Partition gespeichert sind.
    • Der Befehl lautet fsutil file queryextents <filename>und je nach Standort müssen Sie ihn möglicherweise als Administrator ausführen.
    • Die Ausgabe des Befehls sieht ungefähr so ​​aus: VCN: 0x0 Clusters: 0x2 LCN: 0x48000. Das bedeutet, dass die Datei zwei Cluster belegt,logische Clusternummer0x48000 (das ist der Offset 4096*0x48000=1207959552) zum Volume-Offset 0x48001, was 8k (2 x 4k/Cluster) Gesamtspeicherplatz ist. In der Praxis ist das Ende davon normalerweise ungenutzter Speicherplatz.
    • Es können mehrere Ausgabezeilen vorhanden sein (das passiert, wenn eine Datei fragmentiert ist; es ist unwahrscheinlich, dass es auf einem frisch formatierten Datenträger passiert, wenn Sie die Größe jeder Datei ändern, bevor Sie die nächste erstellen). Der erste Wert (dievirtuelle Clusternummer) in nachfolgenden Zeilen ist nicht Null, sondern der Offset (in Clustern) innerhalb der Datei, wo dieser Extent beginnt (wenn er beispielsweise 0x3 ist, bedeutet das, dass der Extent 12 KB nach innen in der Datei beginnt).
  3. Trennen Sie das Laufwerk und stellen Sie eine Verbindung zu OS X her.nichtmounten Sie das Volume dieses Mal. Suchen Sie stattdessen nach der richtigen Volume-ID. Unter Linux wäre das etwa so /dev/sdb1. (Zweites Laufwerk -> sdB1, erste Partition -> sdb1).
  4. Kopieren ddSie mit Ihre fehlerhaft komprimierten Dateien direkt in das Rohvolume.
    • Angenommen, Ihre Datei hat zwei Bereiche:
      • VCN: 0x0 Clusters: 0x15 LCN: 0x13c
      • VCN: 0x15 Clusters: 0x3f6 LCN: 0xab20
    • Sie können die folgenden Befehle verwenden dd, wobei die Dateinamen nach Bedarf angepasst werden müssen. Siehe diedd-Manpagefür weitere Informationen, aber beachten Sie vorerst, dass alle Parameter ddpraktischerweise ein Vielfaches der Blockgröße ( bsParam) sind, Hexadezimalwerte jedoch in Dezimalzahlen umgewandelt wurden (ich bin nicht sicher, ob ddHexadezimalwerte richtig verarbeitet werden können; einige DD-ähnliche Programme können das, aber nicht alle):
      • dd if=/path/to/bad/file of=/dev/sdb1 bs=4K count=21 seek=316
      • dd if=/bath/to/bad/file of=/dev/sdb1 bs=4k count=1014 seek=337 skip=21
  5. Sobald Sie die Dateidaten auf die Raw-Partition kopiert haben, sollten Sie das Laufwerk an Windows anschließen und die komprimierten (geretteten) Dateien lesen können. Wenn die Dateigrößen nicht genau übereinstimmen, stellen Sie möglicherweise fest, dass sich am Ende der Dateien ein wenig Müll befindet, aber das ist hoffentlich kein Problem.

Der andere Ansatz (möglicherweise einfacher, sogarvieleinfacher) ist, die Routine zu finden, ntfs-3gdie die NTFS-Dekomprimierung handhabt. Führen Sie diese Routine direkt auf den Dateien aus. Alternativ können Sie versuchen, eine Kopie des ntfsdiskeditDienstprogramms zu finden (scheint nicht mehr erhältlich zu sein) und prüfen, ob Sie damit das „Komprimiert“-Bit der Datei manuell setzen können, nachdem Sie sie (als unkomprimierte Dateien) auf ein NTFS-Volume kopiert haben.

verwandte Informationen