从块大小为 64kb 的 XFS 中获取文件

从块大小为 64kb 的 XFS 中获取文件

我一直执行一项任务,从我的 2 个工作正常、未损坏、未加密的 NAS 驱动器之一中恢复文件,这些驱动器曾经处于 RAID 1 中。NAS 是 Patriot Javelin S4,它(根据我的研究发现)使用 Promise Fasttrack 假 raid 控制器。

关于这方面的信息非常少,因此对于处于同样情况的谷歌用户来说,这里有一些关于这个 NAS 的事实:

  • RAID 控制器:Promise FastTrack (FakeRaid)
  • 卷系统: LVM2
  • 文件系统:XFS,块大小为 64kb(65536 字节)
  • Arch:800MHz AMCC PowerPC 处理器,256MB RAM(感谢 Matthew 的研究)

我当时只有 Windows 10 和 MacOS 电脑,而且我没有找到能够在 LVM2 卷中安装 XFS 的软件(有一个例外,下面会详细介绍)。我不得不拿出我的旧上网本 Acer Aspire One,并在其上安装 puppy linux(特别是 lxpup 版本)。

在 Puppy Linux 上,我使用名为 的工具成功挂载了此文件系统dmraid。此工具可以挂载 pdc 卷,这是其 Promise FastTrack 的 ID。在成功完成挂载后,我获得了对实际 XFS 文件系统的访问权限,但令我沮丧的是,它的块大小竟然是 64kb。

这时我开始在谷歌上搜索“读取 xfs 64kb 块大小”之类的内容,但一无所获。只有几个答案说:“除非修补内核,否则 linux 无法读取大于 4kb 的块大小”。我不知道如何修补内核,而且我很困惑为什么没有任何类型的仿真可以允许这样做。

我提到了在 Win/Mac 上无法读取此分区的应用程序中有一个例外。这个例外是 ufsexplorer。这是一款价值 100 美元的应用程序,它能够无缝地向我显示文件。我复制了一些文件来证明它可以工作,但试用版只允许复制小文件。

我拒绝相信不存在任何复杂程度的免费开源工具无法帮助我读取 64kb xfs。

我的问题是:有人知道这样的工具吗?如果能提供关于如何使用一个或多个工具、内核补丁或其他东西(免费)获取数据的具体说明,我们将不胜感激。

还有一点:我非常希望不必创建这些驱动器的本地映像(除非这是唯一的方法)。毕竟,这是 2TB 的数据,我可能没有这么多空间。

PS 如果有已知的 Linux 可以安装在我的 Acer 上并且可以读取 64kb xfs,这也是一个可行的解决方案。

更新 1:我刚刚了解到https://www.cgsecurity.org/wiki/TestDisk。可能值得一试。一旦有时间尝试,我会报告结果。

更新 2:TestDisk 似乎识别出了 XFS 分区的存在,但我不确定如何从那里继续。我没有找到提取文件的方法,所以我暂时放弃了它,并尝试了 Matthew 回答中的 qemu 方法。

答案1

我对你的问题做了一些研究。虽然不容易,但看起来可行。

破解你的代码的区域是这样的(嗯,在较新的内核中): fs/xfs/libxfs/xfs_sb.c

271         /*
272          * Until this is fixed only page-sized or smaller data blocks work.
273          */
274         if (unlikely(sbp->sb_blocksize > PAGE_SIZE)) {
275                 xfs_warn(mp,
276                 "File system with blocksize %d bytes. "
277                 "Only pagesize (%ld) or less will currently work.",
278                                 sbp->sb_blocksize, PAGE_SIZE);
279                 return -ENOSYS;
280         }

它基本上要求 XFS 块大小至少等于系统页面大小。

这意味着两件事。

  1. 这是针对之前未知的一个错误的解决方法。
  2. 系统页面大小最初为64k。

我去检查了一个非常老的内核 (EL4),上面的限制仍然存在。这意味着在你的架构 (x86) 上做你想做的事情从根本上是不可行的。

鉴于您提供了 NAS 的名称,我进行了一些谷歌搜索并发现了这一点: http://www.techwarelabs.com/patriot-javelin-s4-network-attached-storage/2/

这意味着它使用 PPC CPU。

Javelin 的硬件足以胜任其他任务。它本质上是一个嵌入式 Linux 系统,配有 800 MHz AMCC PowerPC 处理器和 256 MB RAM。

实际上,PowerPC 内核可以构建为使用 64k 页或 4k 页。这可以解释为什么块是 64k,以及为什么您无法在您的机器上运行文件系统,而之前它在自己的 NAS 上工作。

如果您想尝试打开文件系统——我认为最好的选择是使用 PPC64LE(我认为这是该 CPU 的实际架构)在虚拟机管理程序中运行虚拟机实例,Fedora 使用 64k 页构建其 PPC64LE。

https://alt.fedoraproject.org/alt/

您可以使用 qemu 来执行此操作。这个人似乎提供了一些(未经测试的)关于如何执行此操作的说明。

https://rwmj.wordpress.com/tag/ppc64le/

从那里,直接公开虚拟机中的磁盘并执行常规 dmraid/lvm/mount 以访问该驱动器。

相关内容