我正在运行 Arch Linux 和 systemd。
在/etc/fstab
我有这样的事情:
LABEL=XYZ /mypath vfat noauto,[...]
/mypath/main /newplace none bind,noauto 0 0
我目前必须/newplace
使用两个命令进行挂载:
mount /mypath
mount /newplace
我也必须umount
两者兼而有之。
我需要将其简化为一个mount
(或umount
)命令:
mount /newplace
由于现有脚本,我需要使用上面显示的确切mount
(和相关)命令。umount
澄清:
单个命令mount /newplace
应首先 mount /mypath
,然后 mount/newplace
并/mypath
应保持已安装状态。
该命令umount /newplace
应首先 umount /newplace
,然后也是umount /mypath
。
我可以更改/etc/fstab
设备的其他一些细节。但我无法更改调用mount /newplace
. 我也无法自动挂载/newplace
,因为它通常需要保持卸载状态,除非在脚本运行时。
我一直在阅读有关递归绑定挂载、共享、私有、从属和其他挂载选项的信息,但我还没有看到实现我所寻求的方法。
更新:回应评论,这显然不是递归挂载,所以我称之为“先决条件”挂载。我希望这个词是合适的。我想到了“反向递归安装”这个词,但这似乎很糟糕。我认为“先决条件”是指必须先于并为必要条件提供持续基础的东西。通常,在继续进行必备项时,不能忘记或删除必备项。
在这种情况下,/mypath
(prerequisite) 和/newplace
(requisite) 在挂载时都保持挂载/newplace
,并且在调用时它们都将被挂载(当然可能以相反的顺序)umount /newplace
。
理想的解决方案将使用 systemd、Python 3 或 Xonsh。(也可以接受 Bash 脚本。我没有安装 zsh 或其他 shell。)
如果您确实希望将 FS 的“主”子目录
LABEL=XYZ
安装在 上/newplace
,而不特别需要将整个 FS 安装在 上/mypath
,则可以添加如下行:并将
/sbin/mount.subdir
帮助程序(由 调用mount /newplace
,而不是直接调用)创建为如下脚本:它将整个 FS 挂载在 tmpdir 中,将子目录绑定挂载到目标,然后卸载并删除 tmpdir。
如果,正如您在稍后的编辑中所阐明的那样,您确实希望同时安装 和
/newplace
,而不仅仅是将 FS 的子目录安装在 中的最终目标的一些中间步骤,您可以采取类似的方法,这会变得更容易您只需要帮助器来安装先决条件 FS(s):/mypath
/mypath
/myplace
并将帮助程序创建
/sbin/mount.prereq
为脚本,例如:请注意,
/mypath
卸载后不会自动/newplace
卸载。与 POSIX shell 语法相同(甚至应该在 中工作
bash
)可能看起来像:(未经测试)。
如果你不能编辑你的脚本,你可能会检测它。例如,如果它写在 中
bash
,则将其称为:或者,如果它写在 中
zsh
,添加到~/.zshenv
(或为该脚本/some/dir/.zshenv
设置):ZDOTDIR=/some/dir
或者对于任何 shell,添加一个执行相同操作的
mount
脚本/some/dir
:并将您的脚本称为: