在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. Linux java 启动脚本

    #!/bin/bash export LANG=en_US.UTF8 start(){ ulimit -n 65535 #find the jars jar_lib=`ls -1 lib/*.jar` ...

  2. 无法启动INTERNET连接共享。一个已经用IP地址配置的LAN连接需要自动IP地址

    提问者采纳   很简单 只要把你要共享的连接 192.168.0.1 0改成1 然后就可以共享了 共享后再改回来 就能上了 但是会出现IP冲突的~

  3. Codevs1062路由选择

    /* #include<iostream> #include<cstdio> #include<cstring> #define MAXN 301 using na ...

  4. 51NOD 1424 零树

    Discription 有一棵以1为根的树,他有n个结点,用1到n编号.第i号点有一个值vi. 现在可以对树进行如下操作: 步骤1:在树中选一个连通块,这个连通块必须包含1这个结点. 步骤2:然后对这 ...

  5. Hbase优化总结

    1.JVM参数优化: –Xmn=12G –Xms=24G  -Xmx=24G  根据实际机器情况调整,一般为整个机器内存的一半,同时建议regionServer的堆内存建议不要超过32G ; -XX: ...

  6. Maven用项目模板生成项目

    Archetype插件是Maven生成项目的项目模板,项目模板就是一个框,把文件夹这些定好,然后就可以在上开写具体逻辑等等. 最常用的命令: mvn archetype:generate 这个是生成一 ...

  7. sql 添加自定义排序

    Mysql : SELECT (@i:=@i+1) AS ind ,字段 FROM 表名 别名, (SELECT @i:=0) t WHERE `IsDeleted` = 0; Oracle: 本就有 ...

  8. How to resolve 'Potential Leak' issue

    -1 down vote favorite I am using the 'analyze' tool in xcode to check for potential leakages in my a ...

  9. BUPT复试专题—中序遍历序列(2013)

    题目描述 给出一个序列,判断该序列是不是某二叉搜索树的中序遍历序列,如果是输出"Yes",否则输出"No".一颗带权二叉树是一颗二叉搜索树(二叉排序树),当且仅 ...

  10. vmware Unable to open kernel device "\\.\Global\vmx86": The system cannot find the file 的解决方法

    https://communities.vmware.com/thread/245800?start=0&tstart=0 I have exactly same issue.  I star ...