原文来自CRIU官网的文章《Incremental dumps》
翻译此文,用于学习CRIU的dump和pre-dump机制。翻译时没有用翻译软件,不求字字准确,能表达出核心含义,语句通顺就行。甚至会按照我对CRIU的研究拓展一下。
本文作者按个人理解加以描述的文字用(__)来标记。
如果你正在做几次dump(或者打算做),那么从第二次或之后开始,dump流程的速度可以加快,参考这篇文章。(注意这篇文章没有用到pre-dump!)
创建第一个dump
执行下列命令。
mkdir -p <path-to-images>/1/
criu dump --tree <pid> --images-dir <path-to-images>/1/ --leave-running --track-mem
- imgae文件会放到
1/
的子目录,因为我们要创建第二次(或者更多)的迭代转储,以这种方式存储它们是很方便的。 - —leave-running可选参数是用来让criu在dump流程结束之后不杀掉进程,而是让它继续运行。
—track-mem可选参数是用来让criu通知内核监控内存变化,以优化接下来的dump。
创建第二个dump
执行下列命令
mkdir <path-to-images>/2/
criu dump --tree <pid> --images-dir <path-to-images>/2/ --leave-running --track-mem --prev-images-dir ../1/
这里注意—prev-images-dir的路径为上次dump的image的路径,他和本次使用的—images-dir路径强相关。(即第二次dump要使用到第一次dump的image文件,他会跳过第一次已经dump的内存,节省本次dump的时间)
-
创建最后一个dump
执行以下命令
mkdir <path-to-images>/N/
criu dump --tree <pid> --images-dir <path-to-images>/N/ --track-mem --prev-images-dir ../N-1/
没有—leave-running选项,意味着进程在dump之后就被干掉了。
- 也不要用—track-mem来跟踪内存了
恢复
现在用之前dump出来的image文件,就能恢复进程(即进程热迁移)criu restore --images-dir <path-to-images>/ANY/
:::warning 注意:在每一次dump(不是最后一次)进程之后,进程继续运行,可以修改文件系统。因为CRIU不对文件系统打快照,并假设用户提供了适当的文件系统状态来进行恢复。 :::
数据重删
参见《memory images deduplication》