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

Luk*_*asH 7 ntfs macintosh deleted-files mv

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

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

所以我决定把它挂到我的树莓派上,并从命令行用错误的字符重命名所有文件。在列出了近万个文件后,我在整个硬盘上运行了以下内容。

find . -name "._*" | sed -e "p;s/\._//" | xargs -d '\n' -n2 mv
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Áng*_*gel 18

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

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

如果文件已上传到 OneDrive,则您在那里已有一个副本。这里的一个优点是您拥有最初在磁盘中的文件名的完整列表。如果没有,请继续阅读。

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

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

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

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

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

祝你好运

  • 我说的是文件被覆盖了,而不是硬盘驱动器上的实际块被覆盖了。这就是为什么我为“您可以使用数据检索方法取回一些东西,但这并不容易”而感到难过。您的回答准确地描述了我正在考虑的数据检索方法。 (2认同)

Art*_*nov 9

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


一个稍微不相关的部分:

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

如果专业人员遥不可及或太贵,那么您可以创建一个完整的分区映像,然后您只能使用该映像。

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


ter*_*don 9

恐怕你已经覆盖了所有的原始文件。这些._文件是 macOS 系统和 HFS 驱动器的特殊内容。据我了解,它们似乎用于存储与文件关联的图标之类的东西。您可以在 Ask Different 上查看此帖子以了解更多详细信息。

基本上,对于foo您创建的每个文件,._foo系统都会自动创建一个隐藏文件。因此,当您重命名它们以删除 . 时._,您将它们重命名为将实际的真实文件的名称与您的数据相匹配,从而有效地删除了真实文件并仅保留了这个“元文件”。

所以不,文件不在那里,你已经覆盖了所有的原件。您可能可以使用数据检索方法获得一些回报,但这并不容易。由于您已删除文件,您将被迫尝试恢复工具。没有简单的方法可以让他们回来。


为了将来参考,您运行的命令非常具有破坏性。两个主要缺陷是:

  1. 您没有检查文件名冲突,并且会覆盖现有文件。因此,如果这些文件中的任何一个与现有文件共享一个名称(在您的情况下,所有这些文件都是如此),那么现有文件将被覆盖。下一次,使用mv -i哪个覆盖前会提示。
  2. 您假设没有文件名包含换行符。是的,这可能是一个安全的假设,但您不知道,如果存在名称中带有换行符的任何文件,您的mv命令将失败并且可能mv是错误的。

  • “所以不,数据不在那里,你已经覆盖了所有的原始数据”。这可能是不正确的。数据有望仍然主要在那里被恢复。不要给人一种一切都失去了的印象,因为它不是由它的声音所决定的。mv 不会像 dd 那样覆盖数据。 (4认同)
  • 好吧,海报很可能不知道这些事情。我个人不会在没有进一步澄清的情况下写“覆盖所有原始文件”,因为对于这种情况下的任何其他人,这会对他们产生误导。他们可能不知道 inode/ID 和文件系统内部等。 (4认同)
  • 文件的目录条目会被覆盖,但文件数据本身不会被覆盖。 (3认同)
  • @terdon,您的术语令人困惑。当您说 _files_ 被覆盖时,您似乎意味着 _directory 条目_ 被覆盖。_文件内容_ 仍然存在。通常人们更关心恢复_文件内容_而不是文件元数据,例如文件名或修改日期。您的回答使 OP 失去了所有希望,而事实并非如此。 (3认同)

vy3*_*y32 8

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

如果你想要更多的乐趣,你可以使用开源程序Autopsy

在做任何其他事情之前,您应该制作驱动器的取证磁盘映像。您可以使用ewfacquire来做到这一点,它是 libewf 的一部分