考虑一个具有网络功能但存储有限的小型 Linux 系统。
因此,它可以通过 nfs 挂载一个很好的完全定制的 rootfs,并且可以 chroot(或pivot_root)到其中。
到目前为止一切都很好。
现在考虑 nfs 服务器和客户端之间的网络故障。当然系统会挂起。
有没有一种安全的方法来运行一个应用程序,定期检查 nfs 是否健康,当它出现故障时,它会 chroots (pivot_roots) 回到原来的小 rootfs?(然后将继续重试恢复 nfs)
或者这根本有必要吗?或者 NFS 会在无人值守的情况下处理这个问题?
我担心的是,在网络中断的情况下,如果正在运行的程序需要存储中的某些内容,它就会崩溃。因此,即使 NFS 自行恢复,程序也不会重新启动,而且我认为并非所有 Linux 程序都以这种容易出错的方式编码。
因此,最好的方法是安全地 chroot 回到原来的小 rootfs(这是一个很好且安全的只读文件系统),然后它可以重新初始化所有内容。
答案1
不要做任何聪明的事情,它是不需要的,而且它会损坏。
配置nfs挂载永不超时,并且永不报超时错误。只要应用程序没有超时(写得不是很糟糕)就可以这样。没事的。
我在一个带有多个瘦客户端(无磁盘)的系统上工作,所有内容都通过 NFS 安装(包括交换)。我们可以重新启动 NFS 服务器或断开电缆,客户端会冻结,然后在服务器恢复时继续运行。这是预期的行为。
但是,您需要确保安装不使用可选的超时选项。