记一个systemd的NFS boot问题

前段时间遇到个问题,一个基于systemd的系统在从NFS启动的时候,user space启动到一半,网络掉了,于是NFS hang住,系统也不可用了。

从log上看,很明显是systemd-networkd启动之后,IP被release掉,又没有拿到新的IP,于是网络就断了。

由于systemd-networkd是通过读取配置文件来初始化网络的,一开始猜测,是不是它先release掉IP,然后再读配置文件,导致这样的问题的。
然而从code上看,它倒是先读了config,然后再初始化网络的。

先是在SO上提了个问题,没人回答。
然后经过一番Google,发现了CriticalConnection这个config,作用是:

When true, the connection will never be torn down even if the DHCP lese expires.

虽然它在说DHCP的connection不会被释放,但是经过测试,其实它也适用于static ip。

也就是说,只要在config文件里加上了这么一段:

[DHCP]
CriticalConnection=true

这个interface的网络在systemd-networkd启动的时候就不会被断开,这样NFS mount就不会hang住,系统也就能正常启动了。(顺便自己回答了SO上的问题。。。)

Share