Live migration using CRIU
Python JavaScript Shell C HTML CSS Makefile
Latest commit 3299a8c Jan 24, 2017 @veruu veruu committed with runc: Add support for bind and cgroup mounts
Allow migration of containers with binded / cgroup mounts. Using the same
system as runc uses for C/R, bind and cgroup mounts are passed to criu
via the `--ext-mount-map` options (`req.opts.ext_mnt` for Python criu API).

Signed-off-by: Pavel Emelyanov <>


Process HAULer -- a tool to live-migrate containers and processes

The live-migration idea is quite simple. To live migrate a task one needs to

  • stop it and save its state into image file(s)
  • make images available on the remote host
  • recreate task on it from the images

This is what p.haul does. It heavily uses CRIU ( to do state dump and restore. Task's stopped time is decreased using the CRIU's pre-dump action.

Get p.haul ready

  1. Install criu or put criu binary location to $PATH.

  2. Install protobuf-compiler and python-protobuf packages.

  3. Install p.haul by running $ python install or just use it without installing.

For more information read the P.Haul-related pages on the CRIU wiki (

How to contribute

The p.haul patches should be sent to CRIU development mailing list ( with "p.haul" prefix. Configure your local git repository using following command to set subject prefix automatically:

  • $ git config format.subjectprefix "PATCH p.haul"

Before sending patches please make sure your code formatted according to project coding style (we use PEP8 with some exceptions) and your changes don't introduce linter warnings.

How to run flake8 linter to verify p.haul:

  • $ yum install python-setuptools
  • $ easy_install pip
  • $ pip install flake8
  • $ make lint


All BUGs are to be reported on the mailing list. To [un]subscribe goto