将相同的设备以只读方式安装在 / 上,在子目录 (/mnt/rootfs) 中作为 R/W

将相同的设备以只读方式安装在 / 上,在子目录 (/mnt/rootfs) 中作为 R/W

我有 UBIFS 设备 /dev/ubi0_1。该设备是 linux rootfs 的 root,以只读方式安装在内核启动上。

所以我将 /dev/ubi0_1 作为 RO 安装在 / 上。

稍后我想通过命令将 /dev/ubi0_1 以 R/W 方式挂载在 /mnt/rootfs 上:

mount -t ubifs -o rw /dev/ubi0_1 /mnt/rootfs

但 EBUSY 失败。

这个命令:

mount -t ubifs -o ro /dev/ubi0_1 /mnt/rootfs

是成功的。

所以看起来两个挂载点上必须有相同的权限。

我尝试重新安装,但总是权限(RO 或 RW)在不同的安装点之间自动传播。

我的问题是是否可以将 / 挂载为 RO 并将 /mnt/rootfs 挂载为 R/W。

答案1

我尝试重新安装,但总是权限(RO 或 RW)在不同的安装点之间自动传播。

如果您通读了很长的文档man mount(或继续搜索“只读”),您就会知道在使用绑定安装时情况并非如此。

要更改单个挂载点“(VFS 条目)”(而不是“原始文件系统超级块”)的状态,您必须使用bind包含的选项重新挂载它。

我很高兴地报告这对我有用,无论原始挂载点是否是使用创建的bind

我建议遵循以下顺序。

mount -oremount,bind,ro /
mount -oremount,rw /

mount -o bind,rw / /mnt/rootfs

# OR - this should have the same effect as the last command
mount -t ubifs -o rw /dev/ubi0_1 /mnt/rootfs

findmnt将单独显示每个安装点的总体有效状态rorw

答案2

它以如下所示的形式对我有用(启动后 / 是 rw,我安装的第二个挂载点的目录是 /layers/rootfs)。

mount -o remount,ro /
mount --bind / /layers/rootfs
mount -o remount,rw /layers/rootfs

引自男子:

      Note that the filesystem mount options will remain the same as those  on  the  original
      mount  point, and cannot be changed by passing the -o option along with --bind/--rbind.
      The mount options can be changed by a separate remount command, for example:

             mount --bind olddir newdir
             mount -o remount,ro newdir

答案3

另一个答案在这里(https://unix.stackexchange.com/a/371923/20104)对我不起作用†,但它给了我一个想法,做到了这一点:

mount -o remount,bind,ro /
mount -t ubifs -o ro /dev/ubi0_1 /mnt/rootfs
mount -o remount,rw /mnt/rootfs

† 不起作用我的意思是“真正的”rootfs 不是只读的

相关内容