通常在 /etc/fstab 中挂载时,不需要考虑先后顺序,不过最近这不是在用飞牛么,还用了 virtiofs 共享了路径,我想在飞牛的文件管理里看到我的文件,但是又不想添加硬盘给飞牛,所以使用 mount --bind 来绑定目录,嫁接一下。

飞牛默认会挂载 /vol1,用户的路径是在 /vol1/1000 下,只需要把 virtiofs 共享过来的文件夹挂到这个目录下就可以了。

可能你会问我为什么不直接把 virtiofs 的目录挂载到 /vol1/1000 下,这是因为我不想改 docker 挂载的路径,这样我不用飞牛,配置文件照样不用改,很方便。

既然如此,挂载的时候就要等待 /vol1/1000 这个目录存在才可以,systemd 已经接管了 fstab 的挂载,所以可以使用 x-systemd 的一系列特性,其中就有我需要的 after

102-merger /mnt/merger  virtiofs  defaults,noatime,nodiratime,nofail,async  0  0
102-volumes /mnt/volumes virtiofs defaults,noatime,nodiratime,nofail,async 0 0
102-volumes-backup /mnt/volumes-backup virtiofs defaults,noatime,nodiratime,nofail,async 0 0
/mnt/merger /vol1/1000/data none bind,x-systemd.after=docker.service,nofail 0 0
/mnt/volumes /vol1/1000/volumes none bind,x-systemd.after=docker.service,nofail 0 0
/mnt/volumes-backup /vol1/1000/volumes-backup none bind,x-systemd.after=docker.service,nofail 0 0

可以看一下 systemd 生成的挂载服务。

systemctl show vol1-1000-volumes.mount

查看 after 字段中是否包含 vol1.mount

After=docker.service mnt-volumes.mount systemd-journald.socket local-fs-pre.target -.mount vol1.mount system.slice