V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ArchStacker
V2EX  ›  程序员

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

  •  
  •   ArchStacker ·
    Archstacker · 2015-08-30 14:00:42 +08:00 · 24722 次点击
    这是一个创建于 3379 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在电脑上安装 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   ·   实用小工具   ·   3142 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.