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