Difference between revisions of "Images"

From CRIU
Jump to navigation Jump to search
m (Fixed some files names)
(Added proto file names, as they differ form image files)
Line 36: Line 36:
 
: In these files exactly one entry is stored.
 
: In these files exactly one entry is stored.
  
A file type can be guessed by the magic. The description of the entries in ProtocolBuffers language are in <type>.proto files.
+
A file type can be guessed by the magic. The description of the entries in ProtocolBuffers language are in respective .proto files which reside in <code>protobuf/</code> directory in the source tree.
  
 
{|class="wikitable sortable"
 
{|class="wikitable sortable"
Line 44: Line 44:
 
  ! description
 
  ! description
 
  ! extra payload
 
  ! extra payload
 +
! describing proto file
 
  |-
 
  |-
  | inventory || single-entry || Top level description of images || -
+
  | inventory || single-entry || Top level description of images || - || inventory.proto
 
  |-
 
  |-
  | fdinfo || array || Open file descriptors || -
+
  | fdinfo || array || Open file descriptors || - || fdinfo.proto
 
  |-
 
  |-
  | reg-files || array || Paths to files opened with <code>open(2)</code> syscall || -
+
  | reg-files || array || Paths to files opened with <code>open(2)</code> syscall || - || regfile.proto
 
  |-
 
  |-
  | eventfd || array || Eventfd file information || -
+
  | eventfd || array || Eventfd file information || - || eventfd.proto
 
  |-
 
  |-
  | eventpoll || array || Eventpoll file information || -
+
  | eventpoll || array || Eventpoll file information || - || eventpoll.proto
 
  |-
 
  |-
  | eventpoll-tfd || array || Target file descriptors of eventpoll fds || -
+
  | eventpoll-tfd || array || Target file descriptors of eventpoll fds || - || eventpoll.proto
 
  |-
 
  |-
  | inotify || array || Inotify file information || -
+
  | inotify || array || Inotify file information || - || intotify.proto
 
  |-
 
  |-
  | inotify-wd || array || Watch descriptors of inotify fds || -
+
  | inotify-wd || array || Watch descriptors of inotify fds || - || inotify.proto
 
  |-
 
  |-
  | signalfd || array || signalfd info
+
  | signalfd || array || signalfd info || - || signalfd.proto
 
  |-
 
  |-
  | core || single-entry || Arch-dependent information (registers, etc.) || -
+
  | core || single-entry || Arch-dependent information (registers, etc.) || - || core.proto
 
  |-
 
  |-
  | mm || single-entry ||  Address space generic information (segments, exe file, etc.) || -
+
  | mm || single-entry ||  Address space generic information (segments, exe file, etc.) || - || mm.proto
 
  |-
 
  |-
  | vmas || array || Virtual mappings (<code>mmap(2)</code>) || -
+
  | vmas || array || Virtual mappings (<code>mmap(2)</code>) || - || vma.proto
 
  |-
 
  |-
  | pipes || array || Pipes information || -
+
  | pipes || array || Pipes information || - || pipe.proto
 
  |-
 
  |-
  | pipes-data || array || Contents of pipes || <code>entry.bytes</code> bytes of data sitting in a pipe
+
  | pipes-data || array || Contents of pipes || <code>entry.bytes</code> bytes of data sitting in a pipe || pipe-data.proto
 
  |-
 
  |-
  | fifo || array || FIFO information || -
+
  | fifo || array || FIFO information || - || fifo.proto
 
  |-
 
  |-
  | fifo-data || array || Contents of FIFOs || same as in pipes-data
+
  | fifo-data || array || Contents of FIFOs || same as in pipes-data || pipe-data.proto
 
  |-
 
  |-
  | pstree || array || Process tree linkage and IDs || -
+
  | pstree || array || Process tree linkage and IDs || - || pstree.proto
 
  |-
 
  |-
  | sigacts || array || Signal handling map || -
+
  | sigacts || array || Signal handling map || - || sa.proto
 
  |-
 
  |-
  | unixsk || array || Unix domain sockets || -
+
  | unixsk || array || Unix domain sockets || - || sk-unix.proto
 
  |-
 
  |-
  | inetsk || array || PF_INET sockets, both IPv4 and IPv6 || -
+
  | inetsk || array || PF_INET sockets, both IPv4 and IPv6 || - || sk-inet.proto
 
  |-
 
  |-
  | sk-queues || array || Contents of socket queues || <code>entry.length</code> bytes of data, one entry per packet
+
  | sk-queues || array || Contents of socket queues || <code>entry.length</code> bytes of data, one entry per packet || sk-packet.proto
 
  |-
 
  |-
  | itimers || array || Interval timers state || -
+
  | itimers || array || Interval timers state || - || itimer.proto
 
  |-
 
  |-
  | creds || single-entry || Task credentials: uids, gids, caps, etc. || -
+
  | creds || single-entry || Task credentials: uids, gids, caps, etc. || - || creds.proto
 
  |-
 
  |-
  | fs || single-entry || Chroot and chdir information || -
+
  | fs || single-entry || Chroot and chdir information || - || fs.proto
 
  |-
 
  |-
  | remap-fpath || array || File paths remaps || -
+
  | remap-fpath || array || File paths remaps || - || remap-file-path.proto
 
  |-
 
  |-
  | ghost-file || single-entry || Ghost files (those, not visible from FS, but still used by tasks) || Right after the entry up to the EOF goes the contents of the file
+
  | ghost-file || single-entry || Ghost files (those, not visible from FS, but still used by tasks) || Right after the entry up to the EOF goes the contents of the file || ghost-file.proto
 
  |-
 
  |-
  | tcp-stream || single-entry || TCP connection state (including data in queues) || -
+
  | tcp-stream || single-entry || TCP connection state (including data in queues) || - || tcp-stream.proto
 
  |-
 
  |-
  | mountpoints || array || Mountpoints information || -
+
  | mountpoints || array || Mountpoints information || - || mnt.proto
 
  |-
 
  |-
  | utsns || single-entry || Uname nodename and domainname of a UTS namespace || -
+
  | utsns || single-entry || Uname nodename and domainname of a UTS namespace || - || utsns.proto
 
  |-
 
  |-
  | tty || array || Information about opened tty-s || -
+
  | tty || array || Information about opened tty-s || - || tty.proto
 
  |-
 
  |-
  | tty-info || array || Termios and similar stuff about tty-s || -
+
  | tty-info || array || Termios and similar stuff about tty-s || - || tty.proto
 
  |-
 
  |-
  | packetsk || array || Info about PF_PACKET sockets || -
+
  | packetsk || array || Info about PF_PACKET sockets || - || packet-sock.proto
 
  |-
 
  |-
  | netdev || array || Info about network devices || -
+
  | netdev || array || Info about network devices || - || netdev.proto
 
  |}
 
  |}
  

Revision as of 10:54, 6 December 2012

The criu utility dumps the state of processes/containers into a set of image files. This article describes the format of them.

Types of image files

CRIU images can be in one of formats

  • crtools specific images in google protocol buffer format (PB format)
  • crtools specific images with binary data in it
  • image files in 3rd party format (a.k.a. raw images)

crtools-specific format description

All crtools-specific image files begin with 32-bit magic cookie. Images in PB format are followed by zero or more entries of the same type (not size!), each entry is preceded with 32-bit entry size value (not including this 32-bit value itself). Optionally each entry may be followed by extra payload which depends on the entry type.

IOW protocol-buffers image files look like

IMAGE_FILE ::= MAGIC { ENTRY }
ENTRY      ::= SIZE PAYLOAD [ EXTRA ]
PAYLOAD    ::= "message encoded in ProtocolBuffer format"
EXTRA      ::= "arbitrary blob, depends on the PAYLOAD contents"

MAGIC      ::= "32 bit integer"
SIZE       ::= "32 bit integer, equals the PAYLOAD length"

The amount of entries in a image file depends on the type of file.

Types of image files with PB data

Such images can be one of

Array image files
In these files the amount of entries can be any. You should read the image file up to the EOF to find out the exact number.
Single-entry image files
In these files exactly one entry is stored.

A file type can be guessed by the magic. The description of the entries in ProtocolBuffers language are in respective .proto files which reside in protobuf/ directory in the source tree.

name type description extra payload describing proto file
inventory single-entry Top level description of images - inventory.proto
fdinfo array Open file descriptors - fdinfo.proto
reg-files array Paths to files opened with open(2) syscall - regfile.proto
eventfd array Eventfd file information - eventfd.proto
eventpoll array Eventpoll file information - eventpoll.proto
eventpoll-tfd array Target file descriptors of eventpoll fds - eventpoll.proto
inotify array Inotify file information - intotify.proto
inotify-wd array Watch descriptors of inotify fds - inotify.proto
signalfd array signalfd info - signalfd.proto
core single-entry Arch-dependent information (registers, etc.) - core.proto
mm single-entry Address space generic information (segments, exe file, etc.) - mm.proto
vmas array Virtual mappings (mmap(2)) - vma.proto
pipes array Pipes information - pipe.proto
pipes-data array Contents of pipes entry.bytes bytes of data sitting in a pipe pipe-data.proto
fifo array FIFO information - fifo.proto
fifo-data array Contents of FIFOs same as in pipes-data pipe-data.proto
pstree array Process tree linkage and IDs - pstree.proto
sigacts array Signal handling map - sa.proto
unixsk array Unix domain sockets - sk-unix.proto
inetsk array PF_INET sockets, both IPv4 and IPv6 - sk-inet.proto
sk-queues array Contents of socket queues entry.length bytes of data, one entry per packet sk-packet.proto
itimers array Interval timers state - itimer.proto
creds single-entry Task credentials: uids, gids, caps, etc. - creds.proto
fs single-entry Chroot and chdir information - fs.proto
remap-fpath array File paths remaps - remap-file-path.proto
ghost-file single-entry Ghost files (those, not visible from FS, but still used by tasks) Right after the entry up to the EOF goes the contents of the file ghost-file.proto
tcp-stream single-entry TCP connection state (including data in queues) - tcp-stream.proto
mountpoints array Mountpoints information - mnt.proto
utsns single-entry Uname nodename and domainname of a UTS namespace - utsns.proto
tty array Information about opened tty-s - tty.proto
tty-info array Termios and similar stuff about tty-s - tty.proto
packetsk array Info about PF_PACKET sockets - packet-sock.proto
netdev array Info about network devices - netdev.proto

Images with binary crtools data

These are

Memory dumps
These files contain memory dumps. The format is
IMAGE ::= MAGIC [ ADDRESS DATA ]
ADDRESS ::= "64-bit virtual address"
DATA ::= "4K bytes blob (i.e. -- memory page)"

Raw images

These images contain data that were collected by crtools with the help of some external tools. These are

name tool that understand this format description
ifaddr iproute2's ip Contains info about IP addresses on network devices
route iproute2's ip Contains routing tables
tmpfs tar + gzip Contains contents of tmpfs filesystem