fuse的mount机制-流程及参数
在bbfs中,传递的参数有两个目录,fuse将一个目录挂载在另一个目录下。
在ssfs中,传递的参数只有一个目录(传递两个目录fuse会出错)。
问题:那么fuse的mount机制到底需要几个目录参数?为什么bbfs要使用两个目录参数?
答:fuse的mount应该只需要一个目录参数,即挂载点。bbfs在调用fuse_main之前将第一个目录参数进行了处理,保存在一个的结构中,并将这个结构传递给fuse_main。而ssfs调用fuse_main时对应的参数置为NULL。
fuse_main(argc, argv, &bb_oper, bb_data);
fuse_main( argc, argv, &operations, NULL );
问题:这个参数是如何被fuse处理的?
答:fuse_main的四个参数首先在fuse.h中被扩展为5个参数 fuse_main_real(argc, argv, op, sizeof(*(op)), user_data)
然后在fuse_main_real中被传递给fuse_main_common,变为6个参数,return fuse_main_common(argc, argv, op, op_size, user_data, 0);
问题:能不能将/dev/sdx1挂在在某个目录下呢?
使用 -f参数时,主程序会在前台运行,阻塞在fuse_main的调用这里,ctrl+c后就会返回,打印后面的语句。
如果不使用-f参数,运行主程序后就会结束,但是fuse_main调用后面的打印语句并不会打印。
问题:fuse_main的调用后面到底发生了什么?为什么不是用-f参数主程序看起来是跳过打印语句退出?
需要进入fuse_main_common查看。在这里,如果不是用-f参数,主程序显示运行到fuse_setup_common之前,如果使用-f参数,主程序会运行到 fuse_setup_common 之后,且fuse=0x189e290, multithreaded=1,进入res = fuse_loop_mt(fuse); ctrl+c后运行fuse_teardown_common对挂载点进行了卸载。
所以需要进入fuse_setup_common,以及fuse_loop_mt。这两个函数一个用户-f参数下的循环,另一个用于非-f参数下的循环。可以预料,-f参数在fuse_setup_common被处理。
在fuse_setup_common中会进行mount操作,ch = fuse_mount_common(*mountpoint, &args); 然乎调用 fuse = fuse_new_common(ch, &args, op, op_size, user_data, compat); 这个函数在fuse.c中,现在终于从helper.c进入了fuse.c
问题
在bbfs中,传递的参数有两个目录,fuse将一个目录挂载在另一个目录下。
在ssfs中,传递的参数只有一个目录(传递两个目录fuse会出错)。
问题:那么fuse的mount是怎么处理参数的呢?
问题:能不能将/dev/sdx1挂在在某个目录下呢?
可以运行ssfs两次,挂载不同的目录,运行mount命令显示有两个ssfs。可以使用sudo umount ssfs卸载这个挂载,卸载的是最后一个。
root@river:/home/leveldb/store# mount
/dev/sdf1 on /home/leveldb/store/f1 type ext4 (rw)
bbfs on /home/leveldb/fuse/bbfs/dir2 type fuse.bbfs (rw,nosuid,nodev,user=leveldb)
ssfs on /home/leveldb/fuse/ssfs/mnt type fuse.ssfs (rw,nosuid,nodev,user=leveldb)
ssfs on /home/leveldb/fuse/ssfs/dir1 type fuse.ssfs (rw,nosuid,nodev,user=leveldb)
也可以打印/etc/mtab来查看mount列表
root@river:/home/leveldb/store# cat /etc/mtab
/dev/sdf1 /home/leveldb/store/f1 ext4 rw 0 0
bbfs /home/leveldb/fuse/bbfs/dir2 fuse.bbfs rw,nosuid,nodev,user=leveldb 0 0
ssfs /home/leveldb/fuse/ssfs/mnt fuse.ssfs rw,nosuid,nodev,user=leveldb 0 0
ssfs /home/leveldb/fuse/ssfs/dir1 fuse.ssfs rw,nosuid,nodev,user=leveldb 0 0
这与一般的挂载不一样,一般的挂载比如 mount /dev/sdc1 /mnt/c1ext4 后,/dev/sdc1出现在mount列表的entry中的第一个项,同上述列表中的ssfs。umount的参数可以是第一个项,也可以是第二个项,而fusermount -u 的参数只能是第二个项即挂载点。
问题:fuse的mount的怎么写入mount列表的?
fuse的mount机制-流程及参数的更多相关文章
- fuse的mount机制 2 -系统调用mount
经过上一篇的分析,目前已经知道mount函数最终进入到mount.c 中的 int fuse_kern_mount(const char *mountpoint, struct fuse_args * ...
- mount nfs的可选参数
mount nfs的可选参数:HARD mount和SOFT MOUNT:HARD:NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出 ...
- mount机制3-/etc/mtab
这次查看fuse_mount_sys函数的执行过程,理解mount的各个阶段. 这个函数能够执行的前提是命令行使用root账户. 1. 首先,该函数仍然是主要使用 mount(const char * ...
- zookeeper心跳机制流程梳理
zookeeper心跳机制流程梳理 Processor链Chain protected void setupRequestProcessors() { RequestProcessor finalPr ...
- Android View的绘制机制流程深入详解(三)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第三篇主要介绍并分析视图状态以及重绘流程,首先剖析了 视图的几种状态,然后在深入分析视图的重绘机制流程. 真题园网:http://w ...
- mount命令中offset参数的意义
mount命令中offset参数的意义 感觉好久没有来写东西了,最近一直忙个不停,今天也一样,总感觉时间不够用,唉,这里来临时总结一下工作中的一点小收获吧.今天要说的是我们常用的解压IM ...
- linux驱动程序之电源管理之regulator机制流程 (1)
电源管理芯片可以为多设备供电,且这些设备电压电流有所同.为这些设备提供的稳压器代码模型即为regulator. 下面通过下面三个过程分析regulartor供电机制: 1.分析regulator结构体 ...
- Android View的绘制机制流程深入详解(四)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第四篇主要介绍Android自定义View及ViewGroup的实现方法和流程. 主要介绍了自绘控件.自定义组合控件.自定义继承控件 ...
- Android View的绘制机制流程深入详解(二)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...
随机推荐
- 标准C程序设计七---05
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- CentOS配置DHCP服务器
知识储备 bootp (boot protocol) 早前用于无盘工作站,dhcp的前身 IP初次分配完成,以后固定mac和IP绑定关系 dhcp基础 获取IP步骤 step1: Client dhc ...
- CKeditor如何实现图片上传功能
http://makaiyuan.blog.51cto.com/5819595/1049521 如何在数据库中导入excel文件内的数据:http://jingyan.baidu.com/album/ ...
- python判断一个字符串是否是小数
最近在写代码的时候,发现一个问题,想判断一个字符串是不是一个合法的小数,发现字符串没有内置判断小数的方法,然后就写了一个判断字符串是否是小数,可以判断正负小数,代码如下: 1 2 3 4 5 6 ...
- 什么是 Linux 发行版
什么是Linux的发行版 就Linux的本质来说,它只是操作系统的核心,负责控制硬件.管理文件系统.程序进程等,并不给用户提供各种工具和应用软件.所谓工欲善其事,被必先利其器,一套在优秀的操作系统核心 ...
- 快速掌握RabbitMQ(四)——两种消费模式和QOS的C#实现
本篇介绍一下RabbitMQ中的消费模式,在前边的所有栗子中我们采用的消费者都是EventingBasicConsumer,其实RabbitMQ中还有其他两种消费模式:BasicGet和QueueBa ...
- js上传文件研究
https://github.com/shengulong/javascript-file-upload
- Spring -- Bean自己主动装配&Bean之间关系&Bean的作用域
对于学习spring有帮助的站点:http://jinnianshilongnian.iteye.com/blog/1482071 Bean的自己主动装配 Spring IOC 容器能够自己主动装配 ...
- weex 小结
1. import 文件时,必须引入全称,不能省略 .vue import mEcharts from '../components/Echarts.vue' 2.weex 的 cli 中没有 配置 ...
- 【转载】C#中回滚TransactionScope的使用方法和原理
TransactionScope只要一个操作失败,它会自动回滚,Complete表示事务完成 实事上,一个错误的理解就是Complete()方法是提交事务的,这是错误的,事实上,它的作用的表示本事务完 ...