如何指定自动挂载文件系统的顺序?

我需要在/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中的mount选项,然后挂载到rc.local

根据手册页 , mount -a按顺序在fstab挂载条目,而添加-F (’fork’)选项会将它们挂载到parallell中。 似乎标准启动使用’fork’,大概是为了减少启动时间,所​​以我想之后手动安装(半)是重新获得对挂载顺序的控制的最简单方法。

我可能会考虑在调用mount脚本之后设置一个安装第二个磁盘的脚本。 在Ubuntu中,initd是启动操作系统所有组件的服务,它被称为upstart 。

它基于事件,意味着它在启动过程中查找/等待并发出事件。 正如这篇文章所指出的那样,initd服务尝试并行执行,这可能是导致问题的原因。 因此,您可以将脚本设置为在mount完成并完成其进程后直接运行。

装载脚本保存在/ etc / init /目录中。 我也会在那里添加你的附加安装脚本。 请查看启动过程的此描述。 该网站可能会帮助您以最快的速度盯着自己的脚本。

您需要在自己的脚本中有一个开始部分。 在完成另一个工作后,请参阅此部分以开始工作。

我仍然在考虑如何创建自己的启动脚本,所以我不能再有用了。 如果您确实找到了可行的解决方案,请在此处发回。

Ubuntu在启动时使用mountall ,而不是mount -a 。 Mountall等待底层设备出现,然后立即将fs挂载到它们上,除非它正在安装的fs尚未安装,然后它等待那个fs。

您应该能够通过设置3个文件系统的安装点来获得所需的顺序,以便它们一个堆叠在另一个之下。 而不是将所有三个安装在/home/.something中,将第一个放在/home/.x中,将第二个放在/home/.x/.y中,将第三个放在/home/.x/.y/中.Z。

Systemd现在包含一个强制执行挂载排序的依赖选项。 在您的情况下添加fstab参数:

 x-systemd.requires-mounts-for=/,x-systemd.requires-mounts-for=/home/.hdd 

如果需要挂载在其他已挂载的文件系统上,则noauto选项将不起作用。 在我的情况下,上面的工作请参阅提交https://github.com/systemd/systemd/commit/3519d230c8bafe834b2dac26ace49fcfba139823了解更多详情。

根据man fstabshowthrough选项可能是你正在寻找的。 尝试在/ home / ak上设置它,看它是否有效。

在引导期间挂载文件系统时, mount可能会出现问题; 如果是这样,您的分区的安装顺序将是未定义的。