/etc/fstab
我需要在另外两行之后始终安装一个特定的行:
# Always mount these first
UUID=fdf38dd4-9e9d-479d-b830-2a6989958503 / ext4 noatime,discard,errors=remount-ro 0 1
UUID=2b548eb8-fa67-46ce-a998-91d587dba62f /home/.hdd ext4 errors=remount-ro 0 2
# Always mount this second
none /home/ak aufs br:/home/.ssd/ak=rw:/home/.hdd/ak=rw 0 0
当前的行为是经常以不可预知的方式颠倒最后两行的顺序。如何指定必要的顺序?
一种选择是将安装推迟到
/etc/fstab
完成之后,这使您可以完全控制安装顺序。只需
noauto
在 fstab 中添加挂载选项,然后挂载到rc.local
.根据手册页,按顺序
mount -a
安装条目,同时添加('fork') 选项将并行安装它们。似乎标准引导正在使用“fork”,大概是为了减少引导时间,所以我想之后手动安装(半)是重新控制安装顺序的最简单方法。fstab
-F
Systemd 现在包含一个强制安装顺序的依赖选项。在您的情况下,添加 fstab 参数:
如果您需要安装在其他已安装的文件系统上,则 noauto 选项将不起作用。在我的情况下,上述工作请参阅提交https://github.com/systemd/systemd/commit/3519d230c8bafe834b2dac26ace49fcfba139823了解更多详细信息。
Ubuntu
mountall
在启动时使用,而不是mount -a
. Mountall 等待底层设备出现,然后立即将 fs 挂载到它们上,除非它正在挂载的 fs 尚未挂载,否则它会等待该 fs。您应该能够通过设置 3 个文件系统的挂载点来获得所需的顺序,以便将它们堆叠在一起。不要将所有三个都安装在 /home/.something 中,而是将第一个放入 /home/.x,第二个放入 /home/.x/.y,第三个放入 /home/.x/.y/ .z。
我可能会考虑设置一个脚本,在调用挂载脚本后挂载第二个磁盘。在 Ubuntu 中,initd 是启动操作系统所有组件的服务,它被称为upstart。
它是基于事件的,这意味着它在启动过程中查看/等待并发出事件。正如这篇文章指出的那样,initd 服务尝试并行执行操作,这可能是导致您出现问题的原因。因此,您可以将脚本设置为在安装完成并完成它的进程后直接运行。
挂载脚本保存在 /etc/init/ 目录中。我也会在那里添加您的附加安装脚本。看看这个启动过程的描述。该站点可能会帮助您以最快的速度关注您自己的脚本。
您需要在自己的脚本中开始部分。请参阅本节以在其他人完成后开始工作。
我仍在研究如何创建我自己的启动脚本,所以我无法提供更多帮助。如果您确实找到了可行的解决方案,请将其发回此处。
根据
man fstab
,该showthrough
选项可能是您正在寻找的。尝试在 /home/ak 上设置它并查看它是否有效。在引导期间挂载文件系统时可能会出现
mount
分叉;如果是这样,您的分区的安装顺序将是未定义的。