如何在 NTFS 文件系统上的 Linux 中恢复“已删除”文件(最初来自 macOS 的文件)

如何在 NTFS 文件系统上的 Linux 中恢复“已删除”文件(最初来自 macOS 的文件)

我女朋友有一个外部硬盘,里面有 10 年以上的照片、文档等。其中很多文件都来自她的旧 iPhone 5 和 MacBook。硬盘本身是NTFS格式。由于磁盘太旧了,它变成了数据丢失的危险(多么讽刺)。

当我们尝试将所有文​​件上传到 OneDrive 以便安全存储时,由于文件名无效,我们遇到了 1,000 个错误。我意识到许多文件以._例如开头./pic/92 win new/iphone/._IMG_1604.JPG。我不明白 macOS 以及为什么文件应该这样命名,但可以肯定的是,您永远无法将它们放入 OneDrive 中。

所以我决定将它连接到我的 Raspberry Pi 并从命令行重命名所有包含错误字符的文件。列出近 10,000 个文件后,我对整个硬盘运行了以下命令。

find . -name "._*" | sed -e "p;s/\._//" | xargs -d '\n' -n2 mv

此外,我使用 zmv 删除了文件名中的一些前导空格。

我首先在测试环境中尝试了该命令,看起来不错。但我没有检查文件大小。

当我女朋友将硬盘重新连接到她的 Mac 上后,所有重命名的文件都显示文件大小为 4KB(空)!我搞砸了我不知道怎么办。

我假设数据仍然存在,但我以某种方式搞砸了文件系统。

有人明白我做错了什么吗?更重要的是,您是否有机会恢复文件?我将不胜感激任何建议。

答案1

作为特登提到的,当写入“外部”文件系统时,Mac OS 对每个文件使用两个文件名。第一个包含实际内容,第二个包含已存储在资源分支中的元数据。您将元数据文件名重命名为内容文件名,从而删除了该过程中的内容文件。

不过,我有点不同意他的观点,即原件被覆盖了。数据应该位于磁盘中(我希望它不是 SSD),但您不再拥有它们的文件名,并且集群将被标记为可用空间。

如果文件已上传到 OneDrive,则您已经有一个副本。这里的一个优点是您拥有磁盘中原始文件名的完整列表。如果您不这样做,请继续阅读。

首先,在磁盘上进行任何进一步的恢复之前,您应该制作一个副本并使用它,例如使用dd.这样,您就可以避免在恢复尝试期间使情况变得更糟,因为您将处理数据的副本。

第二步是尝试使用类似的工具进行恢复ntfsundelete,尝试恢复已删除的条目。

第三,由于这些文件可能是从不同的系统完整复制的,因此我预计这些文件(通常)不会被碎片化,而是使用顺序块,因此可能可以通过文件雕刻来恢复其中的大部分文件。

在这种情况下,像 photorec 这样的工具应该能够找到大部分照片,即使无法访问文件系统元数据。

最后,请记住备份您可能恢复的内容!

祝你好运

答案2

现在很难推荐任何东西,但如果我是你,我会尝试使用 R-Studio Undelete - 根据我的经验,它是从许多文件系统(包括 ext2、ext3、ext4、fat32)恢复意外删除或损坏的数据的最佳应用程序、NTFS 等。请停止对带有文件的分区进行任何更改(不再重命名、复制等任何操作)。此时您写入的任何内容都会使恢复数据变得更加困难(如果不是不可能的话)。


一个稍微无关紧要的部分:

当您发现文件系统数据出现意外不一致时,要做的第一件事就是停止写作到您的设备或此文件系统,然后您将设备带到专业/服务中心。

如果专业人士无法联系或太贵,那么您可以创建一个完整的分区映像,然后开始工作仅有的与此图像。

绝不继续使用源文件系统甚至设备,因为不一致可能是由硬件故障引起的,进一步的写入(有时甚至是读取)可能会加剧问题。

答案3

如果您没有覆盖文件,则可以轻松恢复所有文件。如果它们是图像,最好的选择是使用 JPEG 文件雕刻工具。 JPEG 很容易雕刻,因为它们在某种程度上是自我验证的。来自 CGSecurity 的照片记录在我推荐的开源工具中。

如果您想要更多乐趣,可以使用开源程序尸检

在执行其他操作之前,您应该制作驱动器的取证磁盘映像。你可以这样做ewfacquire,它是 libewf 的一部分

答案4

很抱歉您丢失了数据。正如其他人指出的那样,可能很难恢复这些文件,因为它们现在在硬盘驱动器中被标记为免费数据。首先,只安装该系统只读,以避免覆盖数据。

当您查找 JPEG 时,请查看recoverjpeg,它经过优化以查找原始光盘中的图像 - 请参阅此处:http://www.rfc1149.net/devel/recoverjpeg。有适用于它的 Debian 软件包。

相关内容