mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-14 13:38:33 +00:00

This patch adds support for checkpointing and restoring containers via CRIU. It adds two api calls, ->checkpoint and ->restore, which are wrappers around the CRIU CLI. CRIU has an RPC API, but reasons for preferring exec() are discussed in [1]. To checkpoint, users specify a directory to dump the container metadata (CRIU dump files, plus some additional information about veth pairs and which bridges they are attached to) into this directory. On restore, this information is read out of the directory, a CRIU command line is constructed, and CRIU is exec()d. CRIU uses the lxc-restore-net callback (which in turn inspects the image directory with the NIC data) to properly restore the network. This will only work with the current git master of CRIU; anything as of a152c843 should work. There is a known bug where containers which have been restored cannot be checkpointed [2]. [1]: http://lists.openvz.org/pipermail/criu/2014-July/015117.html [2]: http://lists.openvz.org/pipermail/criu/2014-August/015876.html v2: fixed some problems with the s/int/bool return code form api function v3: added a testcase, fixed up the man page synopsis v4: fix a small typo in lxc-test-checkpoint-restore v5: remove a reference to the old CRIU_PATH, and a bad error about the same Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com> Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com> Acked-by: Stéphane Graber <stgraber@ubuntu.com>
78 lines
1.3 KiB
Makefile
78 lines
1.3 KiB
Makefile
SUBDIRS = examples rootfs
|
|
DIST_SUBDIRS = examples rootfs ja api
|
|
|
|
if USE_DOCBOOK2X
|
|
SUBDIRS += ja
|
|
endif
|
|
|
|
if ENABLE_API_DOCS
|
|
SUBDIRS += api
|
|
endif
|
|
|
|
EXTRA_DIST = \
|
|
lxc.container.conf \
|
|
lxc.system.conf \
|
|
FAQ.txt
|
|
|
|
if ENABLE_DOCBOOK
|
|
man_MANS = \
|
|
lxc-attach.1 \
|
|
lxc-autostart.1 \
|
|
lxc-cgroup.1 \
|
|
lxc-checkconfig.1 \
|
|
lxc-checkpoint.1 \
|
|
lxc-clone.1 \
|
|
lxc-config.1 \
|
|
lxc-console.1 \
|
|
lxc-create.1 \
|
|
lxc-destroy.1 \
|
|
lxc-execute.1 \
|
|
lxc-freeze.1 \
|
|
lxc-info.1 \
|
|
lxc-monitor.1 \
|
|
lxc-snapshot.1 \
|
|
lxc-start.1 \
|
|
lxc-stop.1 \
|
|
lxc-unfreeze.1 \
|
|
lxc-unshare.1 \
|
|
lxc-user-nic.1 \
|
|
lxc-usernsexec.1 \
|
|
lxc-wait.1 \
|
|
\
|
|
lxc.conf.5 \
|
|
lxc.container.conf.5 \
|
|
lxc.system.conf.5 \
|
|
lxc-usernet.5 \
|
|
\
|
|
lxc.7
|
|
|
|
if ENABLE_PYTHON
|
|
man_MANS += lxc-device.1
|
|
man_MANS += lxc-ls.1
|
|
man_MANS += lxc-start-ephemeral.1
|
|
else
|
|
man_MANS += legacy/lxc-ls.1
|
|
endif
|
|
|
|
if ENABLE_LUA
|
|
man_MANS += lxc-top.1
|
|
endif
|
|
|
|
%.1 : %.sgml
|
|
$(db2xman) $<
|
|
test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true
|
|
|
|
%.5 : %.sgml
|
|
$(db2xman) $<
|
|
test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true
|
|
|
|
%.7 : %.sgml
|
|
$(db2xman) $<
|
|
test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true
|
|
|
|
lxc-%.sgml : common_options.sgml see_also.sgml
|
|
|
|
clean-local:
|
|
$(RM) manpage.* *.7 *.5 *.1 $(man_MANS)
|
|
endif
|