NTFS文件压缩问题


2

我有几百个照片文件无意中从Windows NTFS格式化的压缩外部驱动器移动到由Mac OS X格式化的第二个外部驱动器。此移动是在Mac OS X操作系统下执行的。遗憾的是,文件移动过程已完成,Windows文件系统未对所有原始文件进行“未压缩”。

有没有人知道任何恢复服务,应用程序或手动转换方法,这将允许我恢复这些照片文件,所有这些现在被视为“损坏”的JPG和RAW文件?我们非常感谢您提供的任何帮助或建议。


2
OS X NTFS驱动程序是否不了解Compressed属性?那是......有点可怕。您可以尝试使用相同的驱动程序将文件复制回NTFS卷,但您也需要在它们上重新设置Compressed属性。
CBHacking 2015年

不,Mac OS X驱动程序不了解压缩的NTFS文件。“解压缩”功能应该由Windows提供,但在Windows完成解压缩操作之前,文件已移出Windows环境。将文件复制回压缩的NTFS文件系统不起作用。您能否提供设置文件压缩属性的步骤?我愿意尝试任何事情,甚至在必要时进入比特级别。
GMason 2015年

您需要将文件属性添加到主文件表。ntfs-3g驱动程序可能会理解如何执行此操作。不过,我有一个更好的主意,我将在一个答案中解释它。
CBHacking 2015年

对于它的价值:它无关紧要。即使使用最好的压缩算法,照片和视频也不会压缩很多,更不用说NTFS文件系统使用的高速低压缩算法了。
Mahmoud Al-Qudsi 2015年

是的,我意识到照片不会压缩很多,但有问题的照片文件位于NTFS压缩驱动器上,该驱动器包含许多不同类型的数据。简单地压缩整个驱动器很容易,而不是选择压缩哪些子目录,以及哪些子目录未压缩。显然,我现在希望我已经付出了努力......后视不是一件好事!
GMason 2015年

Answers:


1

NTFS压缩由文件元数据中的标志指示,该标志存储在主文件表(MFT)中。直接设置它很困难,因为通常在更改该标志时,文件系统驱动程序将为您压缩或解压缩该文件。您可以手动添加此标志 - 它只是文件属性DWORD中的一个位 - 但直接攻击MFT可能不是最好的方法。相反,请尝试以下方法:

  1. 在NTFS卷上(可以是flashdrive,如果使用NTFS格式化它),创建一个(或一堆)压缩文件(使用Windows)。对于这些指令的缘故,我们将调用这些文件rescue1rescue2等等。
  2. 将NTFS驱动器连接到Mac系统(无需先解压缩文件)。安装卷读/写。让我们说它安装在/mount/ntfs(我实际上并没有使用OS X足以记住它安装外部卷的位置)。
  3. 使用复制文件内容的工具(如命令行实用程序dd)将压缩的无元数据文件的内容复制到NTFS卷上的压缩文件的内容中。这个命令会是这样的dd if=/path/to/bad/file of=/mount/ntfs/rescue1 bs=4M
  4. 将驱动器重新连接到Windows,并查看是否可以立即正确打开压缩文件。如果可以,您可以安全地让Windows解压缩它们(就地,或通过复制到不支持压缩的驱动器,如FAT32闪存驱动器)。
  5. 如果这种方法有效,您可以使用它来拯救所有数百个文件。只需在NTFS驱动器上创建尽可能多的压缩文件,以最好的方式命名它们(可能是原始名称),然后从Mac复制内容。

请注意,您不必压缩整个NTFS卷; 这只会导致所有目录继承“Compressed”标志,并且每个文件都从文件的目录继承它。不过,这样做并没有什么坏处。

我建议使用备份或丢弃的NTFS卷; 如果OS X NTFS驱动程序那么糟糕,它可能会在您尝试写入Windows卷时损坏MFT。

更复杂的替代方法,如果上述方法不起作用:

  1. 在Windows上创建一堆压缩文件。困难的是他们需要匹配坏文件的大小。如果要抢救大小为30913字节的文件,则压缩后需要压缩的 NTFS文件为该大小。我会说实话; 我不知道如何安排。至少,将救援文件的大小(在磁盘上)至少作为需要救援的文件。使大小匹配在4k内是最好的,因为这是NTFS集群的默认大小(用于文件数据的分配块)。
  2. 使用fsutilWindows中的实用程序获取救援文件的范围。范围是文件数据存储在分区中的卷上的实际偏移量。
    • 该命令是,fsutil file queryextents <filename>并且根据位置,您可能需要以管理员身份运行它。
    • 命令的输出如下所示:VCN: 0x0 Clusters: 0x2 LCN: 0x48000。这就是说该文件占用两个簇,逻辑簇号 0x48000(偏移量为4096 * 0x48000 = 1207959552)到体积偏移量0x48001,即总空间为8k(2 x 4k /簇)。在实践中,结束通常是未使用的空间。
    • 可能有多行输出(当文件碎片化时会发生这种情况;如果在创建下一个文件之前调整每个文件的大小,则不太可能在新格式化的卷上发生)。后续行中的第一个值(虚拟簇编号)不会为零,它将是该范围开始的文件中的偏移量(以簇为单位)(例如,如果它是0x3,则表示该范围从12k开始进入文件)。
  3. 断开驱动器并连接到OS X.难道没有安装卷这段时间。而是找到正确的卷标识符。在Linux上,这将是类似的东西/dev/sdb1。(第二个驱动器 - > sd b 1,第一个分区 - > sdb 1)。
  4. 使用dd,直接从坏的压缩文件复制到原始卷。
    • 例如,假设您的文件有两个范围:
      • VCN: 0x0 Clusters: 0x15 LCN: 0x13c
      • VCN: 0x15 Clusters: 0x3f6 LCN: 0xab20
    • 您可以使用以下命令dd,根据需要调整文件名。有关详细信息,请参阅dd联机帮助页,但是现在请注意,所有参数dd都方便地以块大小(bsparam)的倍数表示,但十六进制值已经转换为十进制(不确定是否dd可以正确处理十六进制;一些类似dd的程序可以但不是全部):
      • 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. 将文件数据复制到原始分区后,您应该能够将驱动器连接到Windows并读取压缩(获救)文件。如果文件大小不完全匹配,那么您可能会发现文件末尾有一些垃圾,但希望这不会成为问题。

另一种方法(可能更容易,甚至容易)是找到ntfs-3g处理NTFS解压缩的例程。直接在文件上运行该例程。或者,查看是否可以找到该ntfsdiskedit实用程序的副本(似乎已停止使用),并查看是否可以使用它在将文件(作为未压缩文件)复制到NTFS卷后手动设置文件上的“压缩”位。


非常感谢您的详细建议。我会试一试,用手指交叉。顺便说一句 - 当我最初从外部驱动器复制压缩文件时,我使用的是OS X的本机NTFS驱动程序,它是只读的。OS X可以在FAT和FAT32上执行读写操作,但在NTFS上只读,除非使用第三方驱动程序。
GMason 2015年

看看你是否可以强制内置驱动器安装R / W. 如果您使用的ntfs-3g是Linux使用的驱动程序,它可能会遵循“压缩”属性并尝试重新压缩您写入的数据。
CBHacking 2015年

我试试看。再次感谢 - 我非常感谢您的建议。
GMason 2015年

当我用十六进制编辑器检查“损坏的照片”文件时,我意识到“坏”文件实际上是无效文件 - 从文件的第一个字节到最后一个字节的00。即使文件名和文件大小正确,文件的内容也都是零。在将文件从NTFS驱动器复制到OS X格式化驱动器的原始过程中,显然出现了严重错误。我对文件压缩问题的假设是错误的。看起来问题与文件复制过程本身有关。感谢您的所有时间,关注和有关修复的详细建议。
GMason 2015年

哎哟。我很遗憾听到这个消息。东西应该早点发生在我身上,但:你是怎么MOVE如果OS X NFTS驱动程序是只读文件从NTFS的?使用Windows复制然后删除原件,或重新格式化驱动器?
CBHacking 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.