免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4373 | 回复: 17
打印 上一主题 下一主题

[文件系统] fs_struct结构 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-11 19:31 |只看该作者 |倒序浏览
struct fs_struct
{
        atomic_t count;
        rwlock_t lock;
        int umask;
        struct dentry *root,*pwd,*altroot;
        struct vfsmount *rootmnt,*pwdmnt,*altrootmnt;
};
请问此结构体中的指针*root与*rootmnt是否指向整个系统的根节点,还是指向当前进程所在文件系统的根节点?
我的理解觉得是第一种情况,但是有书上说是第2种情况,所以只好请教大家了

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2013-12-12 12:10 |只看该作者
stuman 发表于 2013-12-11 19:31
struct fs_struct
{
        atomic_t count;

应该是第2种,至于该root是否为整个文件系统的根,取决于该文件系统是否为根文件系统。

论坛徽章:
0
3 [报告]
发表于 2013-12-12 12:28 |只看该作者
如果是第二种情况的话,指针*root与*rootmnt就不能配套了,*rootmnt只能指向整个文件系统的根,否则就会和*pwdmnt重复。
是不是这样呢?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
4 [报告]
发表于 2013-12-12 17:17 |只看该作者
stuman 发表于 2013-12-12 12:28
如果是第二种情况的话,指针*root与*rootmnt就不能配套了,*rootmnt只能指向整个文件系统的根,否则就会和* ...

仔细看了下,这里的root确实应该是根文件系统,也就是说是第一种情况才对~~,确实有点晕,最好实际调试确认下,如有结果,也请告知下~

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
5 [报告]
发表于 2013-12-12 19:25 |只看该作者
回复 3# stuman

/mnt/vfsmount1/new_root/mnt/vfsmount2/pwd

进程chroot()到/mnt/vfsmount1/new_root/后:

fs_struct->rootmnt->mnt_root                  /mnt/vfsmount1/
fs_struct->root                                         /mnt/vfsmount1/new_root

fs_struct->pwdmnt->mnt_root                 /mnt/vfsmount1/new_root/mnt/vfsmount2
fs_struct->pwd                                        /mnt/vfsmount1/new_root/mnt/vfsmount2/pwd

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
6 [报告]
发表于 2013-12-13 08:43 |只看该作者
本帖最后由 humjb_1983 于 2013-12-13 08:46 编辑
asuka2001 发表于 2013-12-12 19:25
回复 3# stuman

/mnt/vfsmount1/new_root/mnt/vfsmount2/pwd

如果不chroot结果是怎样的?另外两种情况下的rootmnt和pwdmnt的mnt_mountpoint是什么?
谢谢!

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
7 [报告]
发表于 2013-12-13 09:09 |只看该作者
回复 6# humjb_1983

如果不chroot,那么fs_struct与父进程一致。

fs_struct->rootmnt->mnt_root                  /
fs_struct->root                                         /

fs_struct->pwdmnt->mnt_root                 /mnt/vfsmount1/new_root/mnt/vfsmount2
fs_struct->pwd                                        /mnt/vfsmount1/new_root/mnt/vfsmount2/pwd

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
8 [报告]
发表于 2013-12-13 09:18 |只看该作者
回复 6# humjb_1983


mnt_mountpoint按照我的理解,是文件系统挂载点。


/mnt/vfsmount1/new_root/mnt/vfsmount2/pwd中:

假设我们只挂载了根文件系统"/",此时对于

/mnt/vfsmount1这个目录,有一个dentry与之对应。我们不妨将其记为dentry_in_"/"

然后我们开始挂载一个文件系统到/mnt/vfsmount1时。mount调用会在dentry_in_"/"中加上标志,然后创建一个struct mount与之对应。

此时挂载的文件系统本身是一个树,它的根的dentry既为mount->vfsmount->mnt_root。这个和dentry_in_"/"不一样。所以mount->mnt_mountpoint == dentry_in_"/"。

内核的路径搜索到/mnt/vfsmount1时,首先查找到dentry_in_"/",然后发现其标记,此时会找到对应的struct mount。然后从mount->vfsmount->mnt_root继续搜索。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
9 [报告]
发表于 2013-12-13 09:21 |只看该作者
本帖最后由 asuka2001 于 2013-12-13 09:22 编辑

回复 6# humjb_1983

总结一下,那么mount->vfsmount->mnt_root是对于挂载的文件系统树自己的根路径。

而mount->mnt_mountpoint是指的我们挂载的文件系统在原有根文件系统树中所处的路径。
   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
10 [报告]
发表于 2013-12-13 09:54 |只看该作者
asuka2001 发表于 2013-12-13 09:21
回复 6# humjb_1983

总结一下,那么mount->vfsmount->mnt_root是对于挂载的文件系统树自己的根路径。

明白了,感谢~
另外请再确认下,fs_struct->root跟fs_struct->rootmnt->mnt_mountpoint或mnt_root具体有啥关系?
楼主的问题:fs_struct->root是根文件系统的根,还是当前挂载的文件系统的根?fs_struct->rootmnt和pwdmnt的关系?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP