FUSE使用总结

1.FUSE简介

由于近期一个项目用到FUSE实现一个文件系统,所以有一些使用FUSE的经验。现总结如下:

FUSE(Filesystem in Userspace)是一个开源项目,它可以为用户提供编写用户态文件系统的接口。

运行架构如下:

image.png

2.性能消耗

从架构图可知,用户进程userd访问文件系统userfsd时,需要先从用户态进入内核态,再从内核态到用户态,结果返回时也是从用户态进入内核态,再从内核态到用户态,数据需要多次拷贝。从我们的测试结果看FUSE占用的cpu是整个userfsd占用的cpu的30%左右。

3.业务处理不支持固定的线程池

FUSE的处理每个请求时会从预留的线程里找是否有空闲的线程,如果没有就会起新的线程来响应请求。这种处理方式导致为了避免频繁起新的线程需要将保留idle线程的参数max_idle_threads设的比较大,但这个值比较大时,线程之间的切换开销也不小。

4.启动参数auto_unmount有缺陷

使用auto_unmount启动参数会让userfsd fork一个叫fusermount3的进程,但userfsd在代码里没有调用waitpid,这样编码的话,fusermount3异常退出的时候容易产生僵尸进程; 不过只退了fusermount3, 还不影响dbfsd的功能,但如果这个时候dbfsd也发生异常退出的话,挂载点目录就用不了,需要手工处理。

同时如果使用该参数,在非root用户启动userfsd时需要赋予fusermount3管理权限。所以建议不使用该参数。

5.文件被打开时该文件被删除

FUSE有个硬删除的选项,需要代码指定,缺省是false。如果这个选项设置成true,则即使该文件被一个进程打开了,另外进程也可以直接删除,如果这是正在进行写操作就会直接返回错误。如果这个选项设置成false,则在进程删除文件时,如果这个被打开了,就会将这个文件rename成一个隐藏文件,待打开这个文件的进程把它关闭了才把隐藏文件删除。

6.在非root用户下启动

为了安全考虑一般需要将用户态文件系统进程userfsd起在非root用户下,FUSE支持这种场景。userfsd可以指定allow_other启动选项,同时需要执行”echo user_allow_other >> fuse.conf”命令将user_allow_other放到fuse.conf配置文件里,这样userfsd就可以起在非root用户下了。

centos 挂载ntfs所需要的步骤 我就是在挂载2TB的时候发现的 linux挂载NTFS分区移动硬盘2010-09-23 16:35CentOS 挂载NTFS分区移动硬盘 1.uname -r 查看当前的linux内核版本. [root@localhost Desktop]# uname -r 2.6.18-128.el5 2.去http://www.linux-ntfs.org/下载与内核版本相同的ntfs补丁.具体的地址 3.安装补丁:kernel-module-ntfs-2.6.18-128.el5-2.1.27-0.rr.10.11.i686.rpm [root@localhost Desktop]# rpm -ivh kernel-module-ntfs-2.6.18-128.el5-2.1.27-0.rr.10.11.i686.rpm Preparing... ########################################### [100%] 1:kernel-module-ntfs-2.6.########################################### [100%] 4.使用fdisk -l查看硬盘的分区信息. 5.mkdir /mnt/xxx 在mnt文件夹里新建文件夹,分别对应于移动硬盘下的分区(xxx为文文件夹名) 如:mkdir /mnt/name1 对应于叫做name1的盘 6.mount -t ntfs /dev/sdyz /mnt/xxx 将移动硬盘下的各分区挂载在新建的文件夹里(sdyz为硬盘的分区号码) 如: [root@localhost Desktop]# mount -t ntfs /dev/sdc1 /mnt/TheLORD,OurGod 今天将USB移动硬盘挂在CentOS上准备将压缩包拷贝下来的。 结果挂载移动硬盘的时候却提示: mount: unknown filesystem type ‘ntfs’ 原因:Linux无法识别NTFS格式的分区。 解决: 因为刚刚将CentOS升级到了2.6.18-164.el5内核,无法使用Kernel NTFS Module挂载Windows下的NTFS分区(没有在开源站点上找到相应内核包),所以只有使用ntfs-3g来解决了。 打开ntfs-3g的下载站点,将最新稳定版(当前最新版本为ntfs-3g-2010.3.6)下载到CentOS,执行以下命令安装: 1、编译安装ntfs-3g: #./configure #make #make install [/code] 2、查看USB设备点: #fdisk -l Disk /dev/sdb: 60.0 GB, 60011642880 bytes 255 heads, 63 sectors/track, 7296 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 653 5245191 b W95 FAT32 /dev/sdb2 654 7295 53351865 f W95 Ext'd (LBA) /dev/sdb5 654 1958 10482381 b W95 FAT32 /dev/sdb6 1959 7295 42869421 7 HPFS/NTFS 3、挂载NTFS分区: #mount -t ntfs-3g /dev/sdb6 /mnt/win
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值