CRIU
CRIU,全称checkpoint/restore in userspace,是运行在Linux操作系统上的一个软件工具,在用户空间实现checkpoint/restore功能。
使用CRIU可以记录一个正在运行的程序,并且checkpoint到程序关联的一系列文件,然后用这些文件在任何主机上重新恢复备份的程序。
源码地址:https://github.com/checkpoint-restore/criu
CRIU特性
- 热迁移(live migration)
热迁移,又叫动态迁移、实时迁移,即对程序或者虚拟机的保存/恢复。通常是将整个虚拟机的运行状态完整的保存下来,同时可以快速的恢复到原有硬件平台或者是不同的硬件平台上。整个过程用户不会察觉到程序/虚拟机的变化。
实施热迁移的原理就是在用户态或者内核态层面实现对进程的checkpoint/restore。
- 代码动态注入(parasite code injection)
针对正在运行的进程,在不杀死进程的情况下,利用代码动态注入技术获取当前进程的相关信息。
- TCP sockets checkpoint-restore
在不破坏一个TCP链接的情况下,备份和恢复它的状态。可以通过它封装的libsoccr库单独使用。
CRIU实现原理
CRIU的基本分为两个过程,checkpoint和restore。
checkpoint
利用ptrace机制完成 特殊代码---动态注入---收集---存储
在checkpoint过程中,将criu进程称为dumper进程,将要备份的进程称为dumpee进程。
checkpoint过程,CRIU主要通过ptrace机制把一段特殊代码动态注入到dumpee进程并运行,收集dumpee进程的所有上下文信息,然后CRIU把这些信息按功能分类存储为一个个的镜像文件。
Restore
恢复就是执行 解析---恢复---运行的过程
Restore过程,CRIU解析checkpoint过程产生的镜像文件,以此来恢复备份前的状态,让程序从备份前的状态继续运行。
CRIU的安装
问题:在Ubuntu中安装CRIU时,以22.04版本为例,直接sudo apt install criu后,使用criu --version查看版本得到的是16.1。在checkpoint进行备份之后,使用restore进行恢复时,会出现Signal 11,也就是段错误------Segment Fault,所以需要对CRIU进行升级。
升级(安装高级版本)的命令分为四部分:
- 将 OpenSUSE Build Service 上的 CRIU(Checkpoint/Restore In Userspace)开发工具仓库添加到 Ubuntu 系统的软件源列表中;
- 下载并添加该软件源的 GPG 公钥,用于验证从该仓库下载的软件包的完整性和真实性;
- 完成更新。apt 会从新添加的 CRIU 仓库获取软件包列表,并能够验证其签名;
- 安装CRIU。
对于 xUbuntu 25.04,运行以下命令:
echo 'deb http://download.opensuse.org/repositories/devel:/tools:/criu/xUbuntu_25.04/ /' | sudo tee /etc/apt/sources.list.d/devel:tools:criu.list curl -fsSL https://download.opensuse.org/repositories/devel:tools:criu/xUbuntu_25.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_tools_criu.gpg > /dev/null sudo apt update sudo apt install criu
对于 xUbuntu 24.04,运行以下命令:
echo 'deb http://download.opensuse.org/repositories/devel:/tools:/criu/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/devel:tools:criu.list curl -fsSL https://download.opensuse.org/repositories/devel:tools:criu/xUbuntu_24.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_tools_criu.gpg > /dev/null sudo apt update sudo apt install criu
对于 xUbuntu 23.04,运行以下命令:
echo 'deb http://download.opensuse.org/repositories/devel:/tools:/criu/xUbuntu_23.04/ /' | sudo tee /etc/apt/sources.list.d/devel:tools:criu.list curl -fsSL https://download.opensuse.org/repositories/devel:tools:criu/xUbuntu_23.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_tools_criu.gpg > /dev/null sudo apt update sudo apt install criu
对于 xUbuntu 22.04,运行以下命令:
echo 'deb http://download.opensuse.org/repositories/devel:/tools:/criu/xUbuntu_22.04/ /' | sudo tee /etc/apt/sources.list.d/devel:tools:criu.list curl -fsSL https://download.opensuse.org/repositories/devel:tools:criu/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_tools_criu.gpg > /dev/null sudo apt update sudo apt install criu
对于 xUbuntu 21.10,运行以下命令:
echo 'deb http://download.opensuse.org/repositories/devel:/tools:/criu/xUbuntu_21.10/ /' | sudo tee /etc/apt/sources.list.d/devel:tools:criu.list curl -fsSL https://download.opensuse.org/repositories/devel:tools:criu/xUbuntu_21.10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_tools_criu.gpg > /dev/null sudo apt update sudo apt install criu
对于 xUbuntu 21.04,运行以下命令:
echo 'deb http://download.opensuse.org/repositories/devel:/tools:/criu/xUbuntu_21.04/ /' | sudo tee /etc/apt/sources.list.d/devel:tools:criu.list curl -fsSL https://download.opensuse.org/repositories/devel:tools:criu/xUbuntu_21.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_tools_criu.gpg > /dev/null sudo apt update sudo apt install criu
对于 xUbuntu 20.04,运行以下命令:
echo 'deb http://download.opensuse.org/repositories/devel:/tools:/criu/xUbuntu_20.04/ /' | sudo tee /etc/apt/sources.list.d/devel:tools:criu.list curl -fsSL https://download.opensuse.org/repositories/devel:tools:criu/xUbuntu_20.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_tools_criu.gpg > /dev/null sudo apt update sudo apt install criu
参考链接:https://software.opensuse.org/download.html?project=devel%3Atools%3Acriu&package=criu