21 的 restart通常重新启动程序,并不保存原来每个进程的地址空间与 FD。CRIU(Checkpoint/Restore In Userspace)尝试冻结受支持的 Linux 任务、保存状态,再在符合前提的环境恢复它们;能恢复简单计数进程并不意味着任何有外部连接的服务都能无感迁移。

保存对象必须与外部世界对齐

一个进程的内存映射、寄存器、打开 FD、namespace 关系和网络连接可能都参与恢复;磁盘卷的内容、对端 TCP 状态、文件路径与宿主内核功能却未必随检查点一起搬迁。因此先固定 kernel/CRIU 版本、进程树、挂载和网络,记录快照时刻的业务状态。恢复时检查 PID 对照、应用计数、FD 指向的文件和 /ready,不是仅看 CRIU 返回 0。

正常实验在专用 VM 中对自编简单循环进程做 checkpoint/restore,比较恢复前后的进度;边界例增加打开的自有文件或连接到自建 HTTP 端点,记录不支持的对象和精确失败条件,避免把尝试失败硬写为“透明迁移”。恢复前提和清理入口、自编探针源码可独立取得。本云端未安装 CRIU、无恢复环境,正反案例和跨主机迁移全部 NOT_RUN。

现象 查什么 不可推出
恢复命令成功 进度/FD/请求及数据 原 TCP 对端也恢复
FD 恢复失败 路径、权限与挂载 checkpoint 文件坏
PID 数字改变 namespace 和进程关系 业务状态必丢

练习

  1. 先预测简单计数进程与持有网络连接的进程恢复条件有什么不同,在专用 VM 分两轮实测并保存错误信息。
  2. 预测只拷贝 checkpoint 文件、不搬移卷中状态会产生什么后果,比较恢复后文件内容与应用状态。

先修:16:数据写入、21:停止。下一篇:E03:事件归属。

系列总目录:从进程隔离到运行时与编排。

参考资料