如何指定自动挂载文件系统的顺序?
我需要在/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 fstab
, showthrough
选项可能是你正在寻找的。 尝试在/ home / ak上设置它,看它是否有效。
在引导期间挂载文件系统时, mount
可能会出现问题; 如果是这样,您的分区的安装顺序将是未定义的。