在FreeBSD上mount Ext4檔案系統的行動硬碟

猛禽大叔發表於2018-08-23

需求

小容量的行動硬碟用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
複製程式碼

目前貌似沒有解決方案……

相關文章