免费注册 查看新帖 |

Chinaunix

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

man 8 mount_unionfs的疑问 [复制链接]

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-27 10:22 |只看该作者 |倒序浏览
Q1:
   Filenames are looked up in the upper layer and then in the lower layer.
     If a directory is found in the lower layer, and there is no entry in the
     upper layer, then a shadow directory will be created in the upper layer.
     It will be owned by the user who originally did the union mount, with
     mode ``rwxrwxrwx'' (0777) modified by the umask in effect at that time.

这个怎么测试?怎么我在lower layer下建的目录,在upper layer都能看到啊?

Q2:
   If a file exists in the upper layer then there is no way to access a file
     with the same name in the lower layer.  If necessary, a combination of
     loopback and union mounts can be made which will still allow the lower
     files to be accessed by a different pathname.

怎么让lower layer的同名文件以不同的路径名来显示?

论坛徽章:
0
2 [报告]
发表于 2006-04-27 11:09 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2006-04-27 16:32 |只看该作者
根据man手册页的论述,结合实际操作,理解如下:

A1:

上层目录中看到的应该就是“shadow directory”。如果下层目录原属主和执行mount的用户不是同一个人,就可以看得更明显一些,上层目录中的shadow directory的属主是mount执行者,至于目录权限,如果umask的当前值为22,那么这个shadow目录的权限就是777 - 22 = 755,即rwxr-xr-x。这个shadow目录的创建,是为了以后的“copy up”做准备,即当你在底层目录中修改了一个文件时(即使你对这个文件并无写权限),union文件系统就会在上层的shadow目录中创建一个同名文件,实际的修改是发生在这个同名文件身上的。但在ls时仅以遇到的第一个文件名有效,在底层目录中的同名文件予以忽略。

A2:

在union文件系统内部是无法访问到底层目录中的同名文件的,如果想访问的话,就需要和null文件系统结合起来。举个例子,/sys/sys下面有四个文件,分别是1111、2222、3333、4444,如下图所示:

/sys/sys
    1111
    2222
    3333
    4444

现在用户想在自己的主目录内编译这些文件,等编辑好之后在merge回系统目录中。它可以先在自己的主目录下创建一个sys1目录,把/sys目录按null文件系统方式mount到sys1目录上,这时,sys1目录中的原有内容就“看不到”了,通过sys1看到的是/sys目录的内容。

现在再创建一个目录sys2,把/sys目录按union文件系统方式mount到sys2目录上,sys2目录作为上层。这时,sys2目录和/sys目录的内容和融为一体了。在sys2目录中就会有一个sys目录,对应于/sys/sys目录。现在再cd到/sys/sys目录中去修改1111文件,就会在~/sys2/sys/目录下生成一个同名的1111文件,实际改动的就是这个文件,而真实的“/sys/sys”目录下的1111文件则安然无恙。

这时如果ls ~/sys2/sys,就可以看到这个1111文件,但这个文件的属主已经变成执行mount操作的用户了。如果ls /sys/sys,我们仍然可以看到如上图所示的输出:

/sys/sys
    1111
    2222
    3333
    4444

但从输出结果中可以看到,1111的属主已经和其它三个文件不一样了。这是因为ls会首先遇到上层目录~/sys2中的1111,于是就输出它,当它在下层目录/sys/sys中再次遇到1111时,由于已有同名文件,将予以忽略。因此,我们在这里就无法把系统目录中的1111给ls出来了。

但由于我们之前还对/sys/sys目录进行了null文件系统的mount,我们依然可以使用~/sys1这个路径名来访问“真实的”/sys/sys目录中的内容。因此,ls ~/sys1命令输出的上述四个文件的属主都是原来的主人(root),它们的内容也都是原封原样的,因为一切的变化都发生在~/sys2目录中了。

总结一下,要想继续访问“真实的”底层目录中的文件,就不能再使用进行union mount时的路径名。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP