在FreeBSD上mount Ext4文件系统的移动硬盘

需求

小容量的移动硬盘用FAT文件系统是很方便交流的,但是大容量的移动硬盘就成问题了。Windows有NTFS,Linux用EXT4,MacOSX有HFS+等,FreeBSD当然是ZFS(还有UFS)。

完全没法沟通。

虽然我很喜欢ZFS,它也的确好,但是因为我的桌面是Linux/Mac,鉴于HFS+之类的专用系统太不通用,所以最后决定用EXT4,万一需要用到其它系统时,可以挂到linux下再通过samba共享。

这次因为需要在FreeBSD下COPY一些大文件,所以研究了一下怎么挂到FreeBSD下。

解决

首先是从这篇文章《FreeBSD 10: Mounting USB Drive with ext4 Filesystem》里看到一个解决方案:通过FUSE。

# 安装fuse
pkg install fusefs-ext4fuse
# 加载
kldload fuse.ko

配置 /boot/loader.conf

fusefs_load="YES"

配置 /etc/devfs.rules

[localrules=5]
add path 'da*' mode 0660 group operator

配置 /etc/rc.conf

devfs_system_ruleset="localrules"

配置 /etc/sysctl.conf

vfs.usermount=1

立即启用

sysctl vfs.usermount=1

新建一个用户目录并且mount之

mkdir /home/raptor/mnt
chown raptor:raptor /home/raptor/mnt
mount -t ext4 -o mountprog=/usr/local/bin/ext4fuse,allow_other,late,rw /dev/da0s1 /home/raptor/mnt

最后这句mount方法来自这个贴子:Howto mount ext4 (without FUSE), avoiding wrong permissions,因为按照前文直接用ext4fuse的话,只能用ROOT用户访问,普通用户没有权限。

遗留问题

这样虽然解决了挂载和访问的问题,但是因为fuse对EXT4只提供了只读支持,虽然我已经用mount挂载为rw,但是所有写操作都会报错:

Function not implemented

目前貌似没有解决方案……

推送到[go4pro.org]