仅挂载文件系统的特定路径

仅挂载文件系统的特定路径

一段时间后,我终于明白了绑定挂载与 Linux 中的“常规”挂载没有什么区别(除了通过 挂载--bind)。如果/dev/sda1挂载在 上/mnt/mnt/variable_data然后绑定挂载在 上/var,两者之间的唯一区别是文件系统的根/dev/sda1挂载在 上,而同一文件系统上的/mnt路径挂载在(在虚拟/根文件系统中)。/variable_data/var

我的问题有两个:

  1. 假设我没有运行mount /dev/sda1 /mnt(意思是没有/mnt/variable_data),我如何挂载/variable_data里面sda1/var
  2. 如何实现上述内容fstab

答案1

最简单的,也可能是唯一的方法,就是先安装/dev/sda1。如果您担心意外更改,您可以以只读方式安装设备,但是绑定安装权限可能很棘手准备好。也有可能是为了过度安装设备顶部的目录。也就是说,一般情况下,可以挂载/dev/sda1/var,然后再挂载/var/variable_data/var

这样做的一个潜在问题是安装过程不是原子的,并且有可能在安装的/var短暂时间内写入某些内容。/dev/sda1即使/dev/sda1以只读方式安装,也可能会导致问题,具体取决于处理写入失败的方式。由于/varfstab 中通常安装有单独的分区,因此这应该不是问题。

答案2

从 man 页面来看mount(2),我认为你不能直接这样做。系统调用不采用用于考虑已安装文件系统的子树的路径。只有源设备、目标路径、文件系统类型、安装标志(常见选项,如ronosuid)以及data由文件系统本身解释的不透明字段(特定于文件系统的选项)。

看来您需要将设备安装到临时路径,然后绑定安装所需的子树,最后卸载第一个文件系统。除了卸载之外,您还可以通过 fstab 执行此操作。像这样的东西在 Ubuntu 上工作(使用 systemd):

# fstab
/dev/somedevice      /tmpmnt      ext4      auto,rw
/tmpmnt/var          /var         none      auto,bind

相关内容