在Linux上实现对UFS文件系统的读写支持
背景:最近在使用XEN虚拟机,XEN官方目前发布的内核只有2.6.18的版本。现在需要在Linux上挂载(mount)FreeBSD的Image文件,并进行写操作。FreeBSD使用的文件系统是UFS2,但2.6.18的内核上只能对UFS进行读操作,写的操作是从2.6.21的内核才开始支持的。
实现:因此,为了在2.6.18上也支持写操作,需要做如下工作:
- 对源码进行PATCH,PATCH文件见附件。解压在kernel源码根目录,解压后进入patch_ufs_write_support目录,执行patch.sh,若要取消PATCH,则执行upatch.sh。
- make menuconfig,并将File systems ---> Miscellaneous filesystems ---> 下的UFS file system support (read only)选择成,UFS file system write support (DANGEROUS)选择成[ * ],保存后make modules。
- 将编译出来的 fs/ufs/ufs.ko 拷贝到 /lib/modules/$(uname -r)/kernel/fs/ufs/ufs.ko,重新加载模块即可(modproper ufs)。
- 为了让ufs模块启动时自动加载,可以将附件中 rc.sysinit.ufs 内容追加到 /etc/rc.sysinit 文件中(cat rc.sysinit.ufs >> /etc/rc.sysinit)。
使用:使用有点特殊,需要remount,示例如下:
$ mount -t ufs -oloop,rw,offset=32256,ufstype=ufs2 FreeBSD.img /mnt/freebsd
此时挂载后仍是只读
$ touch /mnt/freebsd/testfile
提示只读无法写入
$ mount -o remount,rw /mnt/freebsd
重新挂载成读写模式
$ touch /mnt/freebsd/testfile
此时写入成功
$ umount /mnt/freebsd
附件的PATCH文件是网上找到的,是针对2.6.20-rc5的PATCH,经过比对、整理以及部分的修改后形成了这个针对linux-2.6.18-xen-3.4.2的PATCH文件。