/etc/fstab 无法在启动时绑定 mount,但运行 mount -a 工作正常

Jac*_*_Hu 4 debian mount fstab bind-mount

我正在运行一个经过修改的 WD MyCloud (Gen 1) NAS,上面安装了 Debian 8 (Jessie)。

由于设备的细微差别,我无法调整根分区的大小,并且正在为它的空间而苦苦挣扎。

为了解决这个问题,我已将/var/usr目录同步到主数据分区。

然后我将以下几行添加到/etc/fstab

/data/rootfs/var    /var    none    defaults,bind    0    0
/data/rootfs/usr    /usr    none    defaults,bind    0    0
Run Code Online (Sandbox Code Playgroud)

重启后发现/var目录挂载成功,但是/usr目录没有挂载。

如果我然后运行mount -a,则不会出现任何错误,并且/usr目录已正确安装。

怎么了?

A.B*_*A.B 8

如果您使用 systemd,挂载是并行完成的(通过将 fstab 条目动态转换为挂载单元),不会像预 systemd 体验中预期的那样保留行顺序。

您有一个无法自动猜到的未知依赖:mounting /data/before mount /usr。没有它,你会得到一个竞争条件。

您必须手动添加依赖项作为伪挂载选项,使用x-systemd.requires=. 因此,如果应该挂载的前一个挂载点是/data,这应该使它工作:

/data/rootfs/var    /var    none    x-systemd.requires=/data,bind    0    0
/data/rootfs/usr    /usr    none    x-systemd.requires=/data,bind    0    0
Run Code Online (Sandbox Code Playgroud)

如果别人发现了这个问题,但使用的情况下是/data作为一个远程网络文件系统,如NFS,伪安装选项_netdev(预systemd选项也由systemd识别)必须可以在添加/data/rootfs/usr条目把一切工作正常,因为none不能自动提示这一点,没有它可能会混淆x-systemd.requires=分辨率。