0

让我们为这个问题提供一些背景信息:

  1. /foo/bar目录处于读写模式
  2. /bar绑定挂载指向/foo/bar
  3. /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)

真正让我困惑的是:

  1. 为什么现在有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
    

    但它不是最后一个,只读的在中间。

  2. 为什么现在有 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成为只读的正确方法是什么?

4

0 回答 0