CRIU(8)
=======
:doctype:       manpage
:man source:    criu
:man version:   0.0.2
:man manual:    CRIU Manual

NAME
----
criu - checkpoint/restore in userspace

SYNOPSIS
--------
*criu* 'command' ['options']

DESCRIPTION
-----------
*criu* is command line utility to steer checkpoint and restore procedure.

The 'command' can be one of the following:

*pre-dump*::
Launch that named pre-dump procedure, where *criu* does snapshot of
memory changes since previous pre-dump. Also *criu* forms fsnotify
cache which speedup *restore* procedure.

*dump*::
Initiate checkpoint procedure.

*restore*::
Restore previously checkpointed processes.

*show*::
Decode own binary dump files and show their contents in human-readable form.

*check*::
Test whether the kernel support is up-to-date.

*page-server*::
Launch a page server.

*exec*::
Execute a system call from other task\'s context.

*service*::
Start RPC service.

*dedup*::
Starts pagemap data deduplication procedure, where *criu* scans over all
pagemap files and tries to minimalize the number of pagemap entries by
obtaining the references from a parent pagemap image.

OPTIONS
-------
*-c*::
    In case of *show* command the dumped pages content will be shown in hex format.

*-D*, *--images-dir* 'path'::
    Use path 'path' as a base directory where to look for dump files set. This
    commands applies to any 'command'.

*-W*, *--work-dir* 'dir'::
    Use directory 'dir' for putting logs, pidfiles and statistics. If not
    specified, 'path' from *-D* option is taken.

*-s*, *--leave-stopped*::
    Leave tasks in stopped state after checkpoint instead of killing them.

*-R*, *--leave-running*::
    Leave tasks in running state after checkpoint instead of killing them. This
    option is pretty dangerous and should be used if and only if you understand
    what you are doing.
    If task is about to run after been checkpointed it can modify TCP connections,
    delete files and do other dangerous actions. So that *criu* itself can not
    guarantee that the next *restore* action will not fail. Most likely if a user
    starts *criu* with this option passed at least the file system snapshot must be
    done with help of 'post-dump' script.
    In other words, do not use it until really needed.

*--cpu-cap* 'cap'[,'cap']::
    When restore process require 'cap' CPU capability to be present. To inverse
    capability prefix it with '^'.

    - *fpu*. Requre the CPU to have comaptible FPU. For example the process
             might be dumped with xsave capability but attempted to restore
             without it present on target cpu. In such case we refuse to procceed.

    - *all*. Require all capability. This is *default* mode.

*-f*, *--file* 'file'::
    This option is valid for the *show* command only and allows one to see the
    content of the 'file' specified.

*-x*, *--ext-unix-sk*::
    Dump external unix sockets.

*-t*, *--tree* 'pid'::
    Checkpoint the whole process tree starting from 'pid'.

*-d*, *--restore-detached*::
    Detach *criu* itself once restore is complete.

*-n*, *--namespaces* 'ns'[,'ns'...]::
    Checkpoint namespaces. Namespaces must be separated by comma.
    Currently supported namespaces: *uts*, *ipc*, *mnt*, *pid*, *net*.

*-r*, *--root* 'path'::
    Change the root filesystem (when run in mount namespace).

*--evasive-devices*::
    Use any path to a device file if the original one is inaccessible.

*--veth-pair* 'IN'*=*'OUT'::
    Correspondence between outside and inside names of veth devices.

*-M*, *--ext-mount-map* 'KEY'*:*'VAL'::
    Setup mapping for external mounts.

    On dump, KEY is a mountpoint inside container and corresponding VAL 
    is a string that will be written into the image as mountpoint's root
    value

    On restore KEY is the value from the image (VAL from dump) and the
    VAL is the path on host that will be bind-mounted into container
    (to the mountpoint path from image)

*--action-script* 'SCRIPT'::
    Add an external action script.
    The environment variable *CRTOOLS_SCRIPT_ACTION* contains one of the
    actions:
        * *network-lock*
                lock network in a target network namespace

        * *network-unlock*
                unlock network in a target network namespace

*--link-remap*::
    Allow to link unlinked files back when possible (modifies FS
    till restore).

*-o*, *--log-file* 'file'::
    Write logging messages to 'file'.

*-v*['num'|*v*...]::
    Set logging level to 'num'. The higer the level, the more output
    is produced. Either numeric values or multiple *v* can be used.
    The following levels are available:
        * *-v1*, *-v*    - only messages and errors;
        * *-v2*, *-vv*   - also warnings (default level);
        * *-v3*, *-vvv*  - also information messages and timestamps;
        * *-v4*, *-vvvv* - lots of debug.

*--log-pid*::
    Write separate logging files per each pid.

*--close* 'fd'::
    Close file with descriptor 'fd' before anything else.

*--tcp-established*::
    Checkpoint/restore established TCP connections.

*-j*, *--shell-job*::
    Allow to dump and restore shell jobs. This implies the restored task
    will inherit session and process group ID from the criu itself.
    Also this option allows one to migrate a single external tty connection, in other
    words this option allows one to migrate such application as *top* and friends.

*-l*, *--file-locks*::
    Allow to dump and restore file locks. It is necessary to make sure that
    all file lock users are taken into dump, so it is only safe to use this
    for a container dump/restore.

*--ms*::
    In case of *check* command does not try to check for features which are
    known to be not yet merged upstream.

*--page-server*::
    In case of *dump* command sends pages to a page server.

*--address*::
    Page server address.

*--port*::
    Page server port number.

*-V, *--version*::
    Print program version.

*-h*, *--help*::
    Print inline help.

SYSCALLS EXECUTION
------------------

To run a system call from another task\'s context use

    criu exec -t pid syscall-string

command. The 'syscall-string' should look like

    syscall-name syscall-arguments ...

Each command line argument is transformed into the system call argument by
the following rules:

* If one starts with *&*, the rest of it gets copied to the target task\'s
  address space and the respective syscall argument is the pointer to this
  string;

* Otherwise it is treated as a number (converted with strtol) and is directly
  passed into the system call.

EXAMPLES
--------

To checkpoint a program with pid of *1234* and write all image files into
directory *checkpoint*:

    criu dump -D checkpoint -t 1234

To restore this program detaching criu itself:

    criu restore -d -D checkpoint -t 1234


To close a file descriptor number *1* in task with pid *1234*:

    criu exec -t 1234 close 1

To open a file named */foo/bar* for read-write in the task with pid
*1234*:

    criu exec -t 1234 open '&/foo/bar' 2


AUTHOR
------
OpenVZ team.

COPYRIGHT
---------
Copyright \(C) 2011-2013, Parallels Inc.
