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 子句。