[](https://github.com/checkpoint-restore/criu/blob/criu-dev/ https://github.com/checkpoint-restore/criu/actions/workflows/x86-64-gcc-test.yml [](https://github.com/checkpoint-restore/criu/blob/criu-dev/ https://github.com/checkpoint-restore/criu/actions/workflows/docker-test.yml [](https://github.com/checkpoint-restore/criu/blob/criu-dev/ https://github.com/checkpoint-restore/criu/actions/workflows/podman-test.yml [](https://github.com/checkpoint-restore/criu/blob/criu-dev/ https://circleci.com/gh/checkpoint-restore/criu
CRIU -- 实现 Linux 检查点/恢复功能的项目
CRIU(代表用户空间的检查点和恢复)是一个用于检查点/恢复 Linux 任务的工具。
使用此工具,您可以冻结正在运行的应用程序(或其部分),并将其作为文件集合检查点保存到硬盘驱动器上。然后,您可以使用这些文件从冻结的点恢复并运行应用程序。CRIU 项目的显著特点是它主要在用户空间实现。还有一些其他项目为 Linux 提供检查点/恢复功能,到目前为止,CRIU 似乎是功能最丰富且与内核最新的项目。
CRIU 项目(几乎)是一个永无止境的故事,因为我们必须始终跟上 Linux 内核,为其提供的所有功能支持检查点和恢复。因此,我们正在寻找各种贡献者 -- 反馈、错误报告、测试、编码、写作等。如果您想参与其中,请参阅 CONTRIBUTING.md。
该项目最初是为 OpenVZ Linux 容器实现实时迁移的方法,但后来发展成为更复杂和灵活的工具。它目前被 OpenVZ、LXC/LXD、Docker 和其他软件集成使用,项目得到了社区的巨大帮助,其软件包已包含在许多 Linux 发行版中。
项目主页位于 http://criu.org。这个 wiki 包含了我们拥有的所有 CRIU 知识库。值得从以下页面开始:
简单循环进程的检查点和恢复
高级功能
由于 CRIU 的主要用途是实时迁移,因此有一个名为 P.Haul 的库用于此目的。此外,该项目还将两个很酷的核心功能作为独立库提供。这些是用于寄生代码注入的 libcompel 和用于 TCP 连接检查点-恢复的 libsoccr。
实时迁移
使用 CRIU 进行真正的实时迁移是可能的,但手动执行所有步骤可能很复杂。phaul 子项目提供了一个 Go 库,封装了大部分复杂性。这个库和 CRIU 的 Go 绑定存储在 go-criu 仓库中。
寄生代码注入
为了获取正在运行的进程的状态,CRIU 需要使该进程执行一些代码来获取所需信息。为了在不杀死应用程序本身的情况下实现这一点,CRIU 使用寄生代码注入技术,该技术也作为名为 libcompel 的独立库提供。
TCP 套接字检查点-恢复
CRIU 的一个特性是能够保存和恢复 TCP 套接字的状态而不中断连接。这个功能本身被认为是有用的,我们将其作为 libsoccr 库提供。
许可证
该项目采用 GPLv2 许可(尽管 lib/ 目录中的文件采用 LGPLv2.1 许可)。
images/ 目录中的所有文件都采用 Expat 许可(即所谓的 MIT 许可)。 请参阅 images/LICENSE 文件。