linfan's blog

Mac OS X下读写ext2/ext3文件系统

我的移动硬盘上,有个分区是ext2文件系统的,不能在Mac OS X中挂载。幸好,在开源世界里,我们总是能找到各种问题的解决方法,感谢无私的开发者。

fuse-ext2是ext2文件系统在FUSE上的实现,支持Linux和Mac OS X。FUSE是在操作系统用户态下实现的文件系统,源自Linux,Mac OS X的移植版本主要有三个,MacFUSEFuse4XOSXFUSE,其中,MacFUSE已经停止开发,后二者是MacFUSE的继承者。Fuse4X和OSXFUSE都把对FUSE最新API的支持作为项目目标,但Fuse4X不提供对MacFUSE旧版本接口的兼容,OSXFUSE则同时兼容MacFUSE旧接口。fuse-ext2二进制安装包是基于MacFUSE编译的,所以我们选择OSXFUSE,获取最佳的功能与兼容性。

分别下载OSXFUSEfuse-ext2的.dmg二进制包并安装。注意:安装OSXFUSE时,一定要勾选MacFUSE Compatibility Layer。安装完成后重启,就可以自动挂载ext2/ext3文件系统了。当然,也可以使用mount命令挂载,mount -t fuse-ext2 <device> <mountpoint>

默认情况下,fuse-ext2进行只读挂载,可以修改/System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util文件进行读写挂载。

1
sudo vi /System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util

修改Mount函数(第200行前后),为OPTIONS变量增加rw+标志。

1
2
3
4
5
6
7
8
9
10
11
function Mount ()
{
    LogDebug "[Mount] Entering function Mount..."
    # Setting both defer_auth and defer_permissions. The option was renamed
    # starting with MacFUSE 1.0.0, and there seems to be no backward
    # compatibility on the options.
    OPTIONS="auto_xattr,defer_permissions,rw+"

    # The local option is only enabled on Leopard. It causes strange
    ...
}

在Finder中对ext2/ext3文件系统进行写操作,时常出现error code -36错误,但在终端中使用命令行则没有任何问题,可能是FUSE和Mac OS X的兼容性导致。

虽然名为fuse-ext2,实际也支持ext3的读写,只是不支持ext3文件系统的日志。

OSXFUSE和fuse-ext2都可以在系统偏好设置中卸载。

Comments