我有 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
将单独显示每个安装点的总体有效状态ro
。rw
答案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 不是只读的