让我们为这个问题提供一些背景信息:
- 有
/foo/bar
目录处于读写模式 - 有
/bar
绑定挂载指向/foo/bar
- 在
/foo/bar
其中有bar
必须处于只读模式的目录(/foo/bar/baz
和/bar/baz
)
为了使/foo/bar/baz
只读我这样做另一个绑定:
$ sudo mount -o bind,ro /foo/bar/baz /foo/bar/baz
$ sudo touch /foo/bar/baz/test
touch: cannot touch '/foo/bar/baz/test': Read-only file system
$ mount | grep bar
/dev/vda1 on /bar type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/vda1 on /foo/bar/baz type xfs (ro,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/vda1 on /bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
PS 有/foo/bar/baz
,/bar/baz
但后者不是只读的。
但是/bar/baz
是可写的:
$ sudo touch /bar/baz/test
$ echo $?
0
尝试进行另一个绑定:
$ sudo mount -o bind,ro /bar/baz /bar/baz
$ mount | grep bar
/dev/vda1 on /bar type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/vda1 on /foo/bar/baz type xfs (ro,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/vda1 on /bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/vda1 on /bar/baz type xfs (ro,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/vda1 on /foo/bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/vda1 on /foo/bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/vda1 on /bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
真正让我困惑的是:
为什么现在有3个相同的坐骑
/bar/baz
?没有,一次绑定后我得到三个:/dev/vda1 on /bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) /dev/vda1 on /bar/baz type xfs (ro,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) /dev/vda1 on /bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
两个是读写的,一个是只读的。哪个优先?似乎是只读的:
$ sudo touch /bar/baz/test touch: cannot touch '/bar/baz/test': Read-only file system
但它不是最后一个,只读的在中间。
为什么现在有 3 个挂载
/foo/bar/baz
,只有一个只读的,现在我有 3 个:/dev/vda1 on /foo/bar/baz type xfs (ro,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) /dev/vda1 on /foo/bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota) /dev/vda1 on /foo/bar/baz type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
一个只读,两个读写。什么优先?结果不是只读的,因为它是可写的:
$ sudo touch /foo/bar/baz/test $ echo $? 0
为什么会这样?以及如何避免?使两者/foo/bar/baz
同时/bar/baz
成为只读的正确方法是什么?