我正在运行经过修改的 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=
分辨率。