如何在 systemd 世界中正确设置启动时的绑定安装?

mur*_*uru 5 fstab systemd bind-mount

systemd,试图变得聪明,并行安装/etc/fstab. 不幸的是,这会随机弄乱绑定安装:

看看我的fstab,清理了一下:

$ grep -Ev 'ntfs|swap|#' /etc/fstab
UUID=3cbb59fd-ff2c-47ed-955f-e4945b5c95b6   /           ext4        rw,relatime,data=ordered    0 1
UUID=2d7b3de8-782b-4981-9db6-a4b9a6d45cac   /home/muru/devel    ext4        rw,relatime,data=ordered    0 2
UUID=38d31418-ed63-49e8-b11b-df90da4833e2   /home/muru/var  btrfs       rw,relatime,space_cache 0 0
UUID=77307ad0-35e1-439b-8fe2-07a7bb5376b2   /mnt        ext4        rw,relatime,data=ordered    0 2
/home/muru /home/muru/devel/debian/jessie/home/muru none bind 0 0
/home/muru /home/muru/devel/debian/jessie-test/home/muru none bind 0 0
/home/muru/devel /home/muru/devel/debian/jessie/home/muru/devel none bind 0 0
/home/muru/devel /home/muru/devel/debian/jessie-test/home/muru/devel none bind 0 0
Run Code Online (Sandbox Code Playgroud)

我的实际坐骑:

$ mount | grep ^/dev/ | grep -Ev 'fuseblk|run'
/dev/sdb1 on / type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /mnt type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home/muru/devel type ext4 (rw,relatime,data=ordered)
/dev/sdb1 on /home/muru/devel/debian/jessie/home/muru type ext4 (rw,relatime,data=ordered)
/dev/sdb1 on /home/muru/devel/debian/jessie-test/home/muru type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home/muru/devel/debian/jessie-test/home/muru/devel type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home/muru/devel type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home/muru/devel/debian/jessie/home/muru/devel type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home/muru/devel/debian/jessie/home/muru/devel type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home/muru/devel/debian/jessie-test/home/muru/devel type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home/muru/devel type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home/muru/devel type ext4 (rw,relatime,data=ordered)
/dev/sdb8 on /home/muru/var type btrfs (rw,relatime,space_cache)
/dev/sdb8 on /home/muru/devel/debian/jessie/home/muru/var type btrfs (rw,relatime,space_cache)
/dev/sdb8 on /home/muru/devel/debian/jessie-test/home/muru/var type btrfs (rw,relatime,space_cache)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它看起来像座已成功完成。但是,效果:

$ ls -l /home/muru/devel/debian/jessie/home/
total 4.0K
drwxr-xr-x 2 root root 4.0K Jun 20 20:36 muru/
$ ls -l /home/muru/devel/debian/jessie/home/muru/
total 0
Run Code Online (Sandbox Code Playgroud)

我认为这是由于安装的随机排序造成的。如果是这种情况,我如何确保订单?我必须使用其他东西fstab吗?如果不是这种情况,可能是什么原因造成的?

我正在使用 Arch Linux。

$ systemctl --version
systemd 221
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD +IDN
Run Code Online (Sandbox Code Playgroud)

Pie*_*elo 6

Arnout 的解决方案对我有用,但其中有一个小错误。fstab 中的绑定挂载必须是这样的(他交换了“绑定”和“无”)。参见 fstab 手册。

# /etc/fstab
/home/var /var none x-systemd.requires=/home,x-systemd.automount,bind 0 0
Run Code Online (Sandbox Code Playgroud)

Systemd 挂载参考在这里:https : //www.freedesktop.org/software/systemd/man/systemd.mount.html


DKe*_*ler 5

一年多后,systemd (229) 版本现在随 ubuntu 16.04 一起发布,fstab 支持像这样的依赖安装。

所以就这么简单。

# /etc/fstab
/home/var /var bind x-systemd.requires=/home,x-systemd.automount,none 0 0
Run Code Online (Sandbox Code Playgroud)

从这篇文章中得到了这个想法 https://copyninja.info/blog/systemd_automount_entry.html

1/22/2021上面的行似乎不正确(曾经?)。我一直在下面使用这个并且它有效。在这种情况下,将 /opt 安装到备用驱动器。我没有auto按照评论中的建议使用

/mnt/data/opt   /opt    x-systemd.requires=/mnt/data,x-systemd.automount,none   bind    0   0
Run Code Online (Sandbox Code Playgroud)