rootwait
并rootdelay
在文件系统不能立即可用的情况下使用,例如异步检测到或通过 USB 挂载。问题是,root
无论情况是否如此,根据 bootarg 应该是显而易见的,那么为什么内核不能自动意识到它需要等待文件系统出现呢?是否存在一些技术限制阻碍了这种自动化的实施?
答案1
有时,操作系统无法区分响应缓慢的外设和不存在或完全连接的外设。最明显的例子是来自网络(TFTP、NFS)的根文件系统,其中缓慢的网络链接或过载的服务器很难与断开的网络链接或崩溃的服务器区分开。超时告诉内核何时放弃。
对于旋转缓慢的磁盘、需要验证的 RAID 阵列等,也可能会发生这种情况。rootdelay
指示内核在设备不可用时不要立即放弃。内核无法知道 SCSI 驱动器是本地磁盘还是某种 RAID 托架。
rootwait
提供无限期等待。这并不总是可取的,例如,如果正常的根文件系统响应时间太长,系统可能想要回退到不同的根文件系统。
答案2
很抱歉重新提出这样一个老问题,但我最近自己正在研究这个问题,并且发现了这篇文章。
从我能找到什么,rootdelay
真正做的是延迟内核的启动指定的时间,以便让内核在较慢的设备中找到rootfs。因此,如果您设置了rootdelay=10
,则无论是否找到 rootfs,您的系统都会在尝试启动内核之前等待 10 秒。
另一方面,rootwait
(正如 @Gilles 指出的那样)只是无限期地等待 rootfs 可用,然后启动内核。
总而言之,如果您的系统需要 5 秒才能找到 rootfs,并且您将其设置为类似rootdelay=10 rootwait
,那么它将等待 10 秒,然后立即启动。如果系统需要 15 秒来查找 rootfs,则将rootdelay=10
强制等待前 10 秒,然后rootwait
将处理所需的最后 5 秒。最后,在最后一种情况下,如果您没有设置rootwait
,系统将在 10 秒后无法启动,因为它将无法找到 rootfs。