使用 VirtualBox 或 KVM,我可以保存客户虚拟机的状态,重新启动主机,然后恢复客户机。
如果我的客户机只是一个容器而不是虚拟机,我该怎么做?
答案1
这可以通过 CRIU 来完成。
请注意,它可以理论上完成,但如果你的容器做了任何稍微复杂的事情(比如,运行使用命名空间、有 tty 等的 systemd),它很可能会失败。
更实际的答案是,目前还不能用通用容器来实现。也许将来可以,但考虑到 CRIU 目前的发展速度,可能性不大。
具体命令取决于您使用的是原始 LXC 还是 LXD 管理守护程序。
龙芯
如果你正在使用原始 LXC,那么你需要这个lxc-checkpoint
工具。这里有一些示例在 CRIU 维基百科上, 和lxc-checkpoint 手册页。
请注意CRIU 维基条目建议您以特殊方式配置容器,大概是为了尝试避免命名空间和设备继承问题:
lxc.console = none
lxc.tty = 0
lxc.cgroup.devices.deny = c 5:1 rwm
如果您需要容器中放置这些设备,那么这可能最终会成为一个交易障碍。
要创建检查点:
lxc-checkpoint -s -D /path/to/checkpoint -n containername
(注意-s
创建检查点后停止容器)
要恢复检查点:
lxc-checkpoint -r -D /path/to/checkpoint -n containername
检查点将一直存在,直到您将其删除。
路心得
如果您使用的是 LXD 的 snap 安装,则首先需要启用 CRIU:
snap set lxd criu.enable=true
systemctl reload snap.lxd.daemon
要有状态地停止容器:
lxc stop --stateful containername
如果你以后lxc start
没有 --stateless
,它应该恢复之前的状态。
您还可以使用lxc snapshot
/手动创建有状态快照lxc restore
。