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

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

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

我的实际坐骑:

$ 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)

正如你所看到的,它看起来就像安装已经成功完成一样。但是,效果:

$ 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

我认为这是由于安装的随机排序造成的。如果是这样的话,如何保证订单呢?我必须使用除 之外的其他东西吗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

答案1

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

# /etc/fstab
/home/var /var none x-systemd.requires=/home,x-systemd.automount,bind 0 0

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

答案2

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

所以就这么简单。

# /etc/fstab
/home/var /var bind x-systemd.requires=/home,x-systemd.automount,none 0 0

从这篇文章中得到了这个想法 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

答案3

您还可以为这些绑定安装创建单元文件:

[Mount]
What=/home/muru
Where=/where/ever/you/want/to
Type=none
Options=bind

[Install]
WantedBy=multi-user.target

这里的技巧是将“Type”指定为none,将“Options”指定为bind,类似于在命令行上执行此操作的方式。

如果按依赖项自动排序失败,您可以添加 Wants/requires 子句。

相关内容