1, 下载fuse-2.8.4.tar.gz
2,  tar -xzvf fuse-2.8.4.tar.gz
3,  ./configure && make && make install
注:需要root权限
4,  echo “/usr/local/lib” >> /etc/ld.so.conf
/sbin/ldconfig
5,  /sbin/modprobe fuse

如果出现fuse module not found的话,请使用fuse2.7.*版本,因为Fuse网页上提供下载的版本2.8以前的源码中包含kernel模块部分

,2.8及2.8以后的版本不包含kernel模块源码

6,  修改kfs-0.5中CMakeLists.txt中的
SET(Fuse_LIBRARY_DIR “/usr/local/lib”)
SET(Fuse_INCLUDE_DIR “/usr/local/include”)
7,  重新编译kfs-0.5 会在bin目录下生成kfs_fuse二进制文件

8,  启动kfs

9,  编写kfs.prp
metaServer.name=10.60.1.125
metaServer.port=20000
注:kfs.prp这个配置的路径是在kfs_fuse_main.cc中写的,
注意启动时kfs.prp与kfs_fuse是在同一个目录下

10, ./kfs_fuse /tmp/kfs-fuse -f  -o allow_other 启动 #-o allow_other 运行其他用户访问

cd /tmp/kfs-fuse 就可以看到当前kfs下的所有数据了

11. fuse的一些参数:

  • 其中,影响比较大的参数有
  • -s                             禁用多线程
  • -o allow_other          允许其它用户访问
  • -o allow_root             允许root用户访问
  • -o nonempty              允许挂载在非空目录上
  • -o auto_cache           开启基于修改时间的cache
  • -o kernel_cache        开启内核cache

注:kfs-0.5版本中存在bug以及可优化的地方

1, 在fuse_read 和fuse_write 中调用Seek, 判断返回值status应该是大于等于0 而不是等于0
因为status 的值应该是seek后的文件偏移


2, 可以优化的地方,在每次fuse_read 和 fuse_write 时,都会进行open 和close 操作,这样会导致效率上的问题,加入读取很大的数据,导致进行多次open 和 close操作。
优化方法:使用client->Fileno(path) 来获得已经打开的fd ,如果fd不存在的话,再进行Open 操作,在函数结束时不进行

Close 操作,而是将close操作放到fuse_flush函数中(新增的函数),具体作用请参考fuse手册

结束

来自yaronspace.cn  本文链接:http://yaronspace.cn/blog/archives/799