分享一个在 Windows 上读取各种类型文件系统( Ext2/3/4, Reiserfs, XFS, Btrfs...)的方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ArchStacker
V2EX    程序员

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

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

    @mxalbert1996 在 cmd 下跑 cmd 会变形,并且中文也确实是个问题。不过这只算是个 demo 吧,真正应该不会有人用这么难用的工具(好像还不支持递归读取文件夹),回来加个壳就好了
    inter
        13
    inter  
       2015-08-30 23:10:06 +08:00
    lz 老是惦记着 windows 驱动,我其实想问 lz ,你写过驱动么,甭管哪个系统的? cygwin 上跑的要做 fs 驱动,差别相当大,还不如从头写
    oska874
        14
    oska874  
       2015-08-30 23:17:46 +08:00 via Android
    我记着以前有一个磁盘工具可以打开 ext 分区,类似 explorer 。
    ArchStacker
        15
    ArchStacker  
    OP
       2015-08-30 23:22:47 +08:00
    @inter 确实没写过驱动,准备借此机会学习一下。可以通过 MinGW 编译出不依赖与特定 dll 的库,跟 Cygwin 编译出的东西性质不一样,我会试着能不能调用。实在不行,反正一个 GUI 的 wrapper 肯定是能写出来的。
    @oska874 有很多读取 ext 分区的,不过能读取 XFS 或是 Btrfs 的我还真没见过
    likuku
        16
    likuku  
       2015-08-31 01:34:04 +08:00
    @ArchStacker 即便是在 linux 上, Btrfs 自己的坑也够酸爽的,还是算了吧。
    sNullp
        17
    sNullp  
       2015-08-31 05:24:40 +08:00
    这么好的一个主意,虽然做成驱动不太现实,但写一个 GUI Wrapper 读取一两个文件肯定没问题。
    ls 这么多喷喷喷的是啥意思?你觉得没用可总有人觉得有用吧。。。而且这个思路在我看来确实是最稳定的 windows 下读取这些分区的方法了。
    ArchStacker
        18
    ArchStacker  
    OP
       2015-08-31 07:05:52 +08:00
    @likuku 总有人会需要的,毕竟是下一代文件系统。关键这个有 GRUB 的持续更新。
    yushiro
        19
    yushiro  
       2015-08-31 09:18:30 +08:00 via iPhone
    这个工具很棒,正需要在 Win 下读取 XFS 的软件,目前只找到一款付费软件,但是我只是偶尔从 NAS 的硬盘里面直接 copy 电影,花钱买的话性价比不高啊~
    likuku
        20
    likuku  
       2015-08-31 10:11:54 +08:00
    @ArchStacker 几年前就开始尝试 Btrfs 了,直到去年还是被各种坑。
    likuku
        21
    likuku  
       2015-08-31 10:13:16 +08:00
    @sNullp 你要觉得为了一点方便愿意冒数据损失的风险,那 OK 的。
    fengyqf
        22
    fengyqf  
       2015-08-31 10:45:30 +08:00
    @supvesonico 为什么要在 windows 下读取这些东西呢? windows 不就是用来玩游戏的么……
    +65535
    sNullp
        23
    sNullp  
       2015-08-31 11:14:24 +08:00
    @likuku LZ 都说了是 readonly 的,数据损失的概率其实比你说的 linux 虚拟机的方法要小得多。
    ArchStacker
        24
    ArchStacker  
    OP
       2015-08-31 20:59:25 +08:00
    likuku
        25
    likuku  
       2015-09-01 09:41:47 +08:00
    @sNullp readonly 真就能保证是 readonly ? 再三说一句,我这不是 linux 虚拟机,而是 linux 里跑个 win 虚拟机。
    ArchStacker
        26
    ArchStacker  
    OP
       2015-09-01 14:46:38 +08:00
    @likuku 我看出来了,你只是关心写出来的驱动是不是稳定,对做这个东西你还是非常支持的对吧 :doge:
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3323 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 04:40 PVG 12:40 LAX 21:40 JFK 00:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86