在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机制-流程及参数的更多相关文章

  1. fuse的mount机制 2 -系统调用mount

    经过上一篇的分析,目前已经知道mount函数最终进入到mount.c 中的 int fuse_kern_mount(const char *mountpoint, struct fuse_args * ...

  2. mount nfs的可选参数

    mount nfs的可选参数:HARD mount和SOFT MOUNT:HARD:NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出 ...

  3. mount机制3-/etc/mtab

    这次查看fuse_mount_sys函数的执行过程,理解mount的各个阶段. 这个函数能够执行的前提是命令行使用root账户. 1. 首先,该函数仍然是主要使用 mount(const char * ...

  4. zookeeper心跳机制流程梳理

    zookeeper心跳机制流程梳理 Processor链Chain protected void setupRequestProcessors() { RequestProcessor finalPr ...

  5. Android View的绘制机制流程深入详解(三)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第三篇主要介绍并分析视图状态以及重绘流程,首先剖析了 视图的几种状态,然后在深入分析视图的重绘机制流程. 真题园网:http://w ...

  6. mount命令中offset参数的意义

    mount命令中offset参数的意义        感觉好久没有来写东西了,最近一直忙个不停,今天也一样,总感觉时间不够用,唉,这里来临时总结一下工作中的一点小收获吧.今天要说的是我们常用的解压IM ...

  7. linux驱动程序之电源管理之regulator机制流程 (1)

    电源管理芯片可以为多设备供电,且这些设备电压电流有所同.为这些设备提供的稳压器代码模型即为regulator. 下面通过下面三个过程分析regulartor供电机制: 1.分析regulator结构体 ...

  8. Android View的绘制机制流程深入详解(四)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第四篇主要介绍Android自定义View及ViewGroup的实现方法和流程. 主要介绍了自绘控件.自定义组合控件.自定义继承控件 ...

  9. Android View的绘制机制流程深入详解(二)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...

随机推荐

  1. ThinkPHP5.1入门

    ThinkPHP5.1入门 ===================================Composer的官方网站:https://www.phpcomposer.com/========= ...

  2. Android Service服务-(转)

    Service是Android系统中提供的四大组件之一.它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互.   服务不能自己运行,需要通过调用Context.startService( ...

  3. alibaba/fastjson 之 JSONPath

    JOSNPath 是一个非常强大的工具,对于处理 json 对象非常方便. 官方地址:https://github.com/alibaba/fastjson/wiki/JSONPath 基本用法:ht ...

  4. GRYZY #13. 拼不出的数

    拼不出的数 lost.in/.out/.cpp [问题描述] 3 个元素的集合 {5, 1, 2} 的所有子集的和分别是 0, 1, 2, 3, 5, 6, 7, 8.发 现最小的不能由该集合子集拼出 ...

  5. JDBC自定义连接池

    开发中,"获得连接"和"释放资源"是非常消耗系统资源的,为了解决此类性能问题可以采用连接池技术来共享连接Connection. 1.概述 用池来管理Connec ...

  6. 提高google网站访问速度

    修改:C:\Windows\System32\drivers\etc\hosts文件 # google websites.203.208.46.180 ssl.gstatic.com203.208.4 ...

  7. IntelliJ IDEA插件-常用插件

    IntelliJ IDEA的插件真的很多,最近的新版集成的插件已经基本够用,下面是收集的一些常用插件,根据需要来安装和测试.如果还是没有找到,那么自己来开发一个. 官网:https://plugins ...

  8. [置顶] MySQL -- 创建函数(Function

    目标 如何在MySQL数据库中创建函数(Function) 语法 CREATE FUNCTION func_name ( [func_parameter] ) //括号是必须的,参数是可选的 RETU ...

  9. flask的run的运行参数含义

    直接阅读源代码吧: 在flask的app.py里,查看run函数的定义 def run(self, host=None, port=None, debug=None, **options): &quo ...

  10. METEOR_PACKAGE_DIRS 无效

    windows中设置METEOR_PACKAGE_DIRS不起作用,一直提示找不到PACKAGES的原因. METEOR_PACKAGE_DIRS设置的路径太长了. 在系统属性 -->高级--& ...