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

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

我正在运行经过修改的 WD MyCloud(第 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

重启后发现该/var目录有成功地已挂载,但该/usr目录还没有

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

出了什么问题?

答案1

如果您使用的是 systemd,安装是并行完成的(通过动态地将 fstab 条目转换为安装单元),行排序没有按照系统之前的经验所预期的那样保留。

您有一个无法自动猜测的不为人知的依赖项:/data/在安装之前安装/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

万一其他人发现了这个问题,但用例是用于/data像 NFS 这样的远程网络文件系统,则伪挂载选项_netdev(systemd 也识别的预 systemd 选项)必须添加到/data/rootfs/usr条目上以使一切正常工作,因为none无法自动提示这一点,并且没有它可能会混淆x-systemd.requires=分辨率。

相关内容