分享一个在 Windows 上读取各种类型文件系统( Ext2/3/4, Reiserfs, XFS, Btrfs...)的方法

2015-08-30 14:00:42 +08:00
 ArchStacker
在电脑上安装 Windows/Linux 双系统的一大困扰就是无法在 Windows 上读取 Linux 所用的文件系统。虽然有些软件可以读取 Ext2/3/4 等格式的文件系统,但是我还没发现能在 Windows 上读取 XFS 、 Btrfs 格式文件系统的软件。
最近发现 GRUB 自带多种文件系统的实现,其自带的工具 grub-mount 可以在 Linux 上通过 FUSE 来挂载各种文件系统的分区 /镜像,不过在 Windows 因为没有 FUSE 不能用。但后来我发现通过 GRUB 提供的另一个工具 grub-fstest 可以不依赖额外库读取各种类型的文件系统。
GRUB 可以在 Windows 上用 Cygwin 或是 MSYS2 编译,官方的代码有点问题,我稍微修改了一下,具体编译步骤及使用方法见: https://github.com/Archstacker/GRUB/wiki/Compile-GRUB-on-Windows-to-use-grub-fstest-to-read-files-from-different-filesystems ,其中也对在这过程中可能遇到的大坑进行了提醒。
同时我也上传了编译好的二进制文件,大家可以下载下来尝试一下: https://github.com/Archstacker/GRUB/releases/download/v0.1/grub-fstest-0_1.exe ,是用 MSYS2 编译的,不依赖于特殊的 dll 文件。
我只是简单地测试了一下,应该是没有问题的,如果大家有什么问题麻烦提出来。
好像 GRUB 也支持在 Mac OS X 上编译,这个我没有环境无法尝试。按照我上面的编译说明可以只编译 grub-fstest 需要的那部分,我感觉还是很有希望成功的。如果有谁成功了麻烦告诉我下。

现在问题来了:
我如果想以此来做一个图形界面的工具,或是做成 Windows 的驱动的话,应该如何去做?我想着应该是要把 grub-fstest 封装成一个库,不过我对这个还不太熟悉,求老司机指导。
24693 次点击
所在节点    程序员
26 条回复
likuku
2015-08-30 16:04:31 +08:00
Linux 做主系统,开 ssh 服务,装虚拟机,虚拟机里跑 win , win 里使用 winscp 来访问 linux 的磁盘资源。
mxalbert1996
2015-08-30 16:23:06 +08:00
如果我没理解错的话这个不是只能读取映像文件的吗?而且 Win 下没有盘符哪来的路径
ArchStacker
2015-08-30 16:36:57 +08:00
@likuku Linux 做主系统的话通过 Samba 多方便啊,还有我这个主要是面向在 Windows 下临时要求 Linux 读取文件
@mxalbert1996 见 wiki ,通过 \\.\GLOBALROOT\Device\Harddisk0\Partition1 这种方式可以读取没有盘符的分区
dreamtrail
2015-08-30 16:52:36 +08:00
类似的东西不早就有了么
http://sourceforge.net/projects/ext2fsd/
ArchStacker
2015-08-30 16:58:28 +08:00
@dreamtrail 那个只是针对 Ext2/3/4 文件系统的,而我这个针对几乎所有的文件系统,还有上游持续更新。
不过这个项目我如果做 Windows 驱动的话也会参考其写法
ffffwh
2015-08-30 17:12:20 +08:00
VirtualBox 挂物理分区 samba 共享出去
ArchStacker
2015-08-30 17:14:03 +08:00
@ffffwh 如果仅仅复制一两个文件的话这样未免太麻烦了
supvesonico
2015-08-30 17:14:26 +08:00
为什么要在 windows 下读取这些东西呢? windows 不就是用来玩游戏的么……
ArchStacker
2015-08-30 17:15:37 +08:00
@supvesonico 比如你在 Linux 下玩游戏的存档想拷到 Windows 上?反正总会有人有需求的
znoodl
2015-08-30 19:45:36 +08:00
强烈建议不要这么做,我用 ext2fsd 挂载 ext4 移动硬盘,有次右下角删除磁盘之后还能看到盘符和文件,空间大小看不到了,可是我忘了我卸载了盘符,然后忘上面写文件,最后把分区表还有数据覆盖了,我不知道。等到我下次插上移动硬盘的时候提示我需要格式化,我当时吓傻了,几百 g 的数据,然后我插到 Linux 上,日志也找不到了,用恢复软件恢复了一堆乱文件名的文件,数据很多还不全。我气得直接把硬盘格了。
mxalbert1996
2015-08-30 19:57:52 +08:00
@ArchStacker 理论上做一个外壳应该不复杂,但我发现你编译出来的那个程序输出好像有点奇怪,我用 C#获取不了它的输出,而且在命令行下运行一次以后命令行的其他中文就全变成了乱码
ArchStacker
2015-08-30 20:02:51 +08:00
@znoodl ext2fsd 是支持读写的吧?我这个是只读的,至少应该不可能丢数据

@mxalbert1996 在 cmd 下跑 cmd 会变形,并且中文也确实是个问题。不过这只算是个 demo 吧,真正应该不会有人用这么难用的工具(好像还不支持递归读取文件夹),回来加个壳就好了
inter
2015-08-30 23:10:06 +08:00
lz 老是惦记着 windows 驱动,我其实想问 lz ,你写过驱动么,甭管哪个系统的? cygwin 上跑的要做 fs 驱动,差别相当大,还不如从头写
oska874
2015-08-30 23:17:46 +08:00
我记着以前有一个磁盘工具可以打开 ext 分区,类似 explorer 。
ArchStacker
2015-08-30 23:22:47 +08:00
@inter 确实没写过驱动,准备借此机会学习一下。可以通过 MinGW 编译出不依赖与特定 dll 的库,跟 Cygwin 编译出的东西性质不一样,我会试着能不能调用。实在不行,反正一个 GUI 的 wrapper 肯定是能写出来的。
@oska874 有很多读取 ext 分区的,不过能读取 XFS 或是 Btrfs 的我还真没见过
likuku
2015-08-31 01:34:04 +08:00
@ArchStacker 即便是在 linux 上, Btrfs 自己的坑也够酸爽的,还是算了吧。
sNullp
2015-08-31 05:24:40 +08:00
这么好的一个主意,虽然做成驱动不太现实,但写一个 GUI Wrapper 读取一两个文件肯定没问题。
ls 这么多喷喷喷的是啥意思?你觉得没用可总有人觉得有用吧。。。而且这个思路在我看来确实是最稳定的 windows 下读取这些分区的方法了。
ArchStacker
2015-08-31 07:05:52 +08:00
@likuku 总有人会需要的,毕竟是下一代文件系统。关键这个有 GRUB 的持续更新。
yushiro
2015-08-31 09:18:30 +08:00
这个工具很棒,正需要在 Win 下读取 XFS 的软件,目前只找到一款付费软件,但是我只是偶尔从 NAS 的硬盘里面直接 copy 电影,花钱买的话性价比不高啊~
likuku
2015-08-31 10:11:54 +08:00
@ArchStacker 几年前就开始尝试 Btrfs 了,直到去年还是被各种坑。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/217087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX