[CRIU] [RFC][PATCH 0/3] Proposal for native (w/o plugins) support for external bind mounts v2

Pavel Emelyanov xemul at parallels.com
Fri Jun 6 04:14:04 PDT 2014


On 06/06/2014 03:10 PM, Andrew Vagin wrote:
> On Thu, Jun 05, 2014 at 09:49:38AM -0700, Saied Kazemi wrote:
>> Pavel,
>>
>> Actually the first attempt is working, albeit with a little help.  So I don't
>> think we need to _replace_ the entire path that is relative to the FS's root
>> with what is passed to CRIU on the command line.  We just need to find the
>> missing part of the pathname and prepend it to the relative path.
>>
>> Let's look at the following realistic example from Docker.  Docker bind mounts
>> the container's /etc/host as follows:
>>
>> mount /var/lib/docker/containers/<ID>/hosts /var/lib/docker/vfs/dir/<ID>/etc/
>> hosts
>>
>> The container's root is at /var/lib/docker/vfs/dir/<ID>.  For container's /etc/
>> hosts, CRIU records /containers/<ID>/hosts as source during dump.  On restore,
>> CRIU already has the container's root and ./etc/hosts within it, so all it
>> needs is the leading /var/lib/docker for external bind mount.  In other words,
>> there is no need replacing the entire path which is --by the way-- dynamically
>> generated for each container and not always easy to figure out.
>>
>> Does it make sense?
> 
> I'm not sure that I understand you. Look at this:
> 
> I just want to show mountinfo for a real docket CT.
> 
> $ cat /proc/1554/mountinfo
> 102 68 0:33 / / rw,relatime - aufs none rw,si=d75b2efa562f7b3
> 103 102 8:1 /var/lib/docker/init/dockerinit-0.9.1 /.dockerinit ro,relatime - ext4 /dev/disk/by-uuid/291e7b1a-8396-44cf-9927-578b3401d0bd rw,errors=remount-ro,data=ordered
> 104 102 8:1 /var/lib/docker/containers/37192b3177f945beb4a92e182638652b35fa71b14ae5b11072e4bfe22e21d280/config.env /.dockerenv ro,relatime - ext4 /dev/disk/by-uuid/291e7b1a-8396-44cf-9927-578b3401d0bd rw,errors=remount-ro,data=ordered
> 105 102 0:16 /resolvconf/resolv.conf /etc/resolv.conf ro,relatime - tmpfs tmpfs rw,size=205004k,mode=755
> 106 102 8:1 /var/lib/docker/containers/37192b3177f945beb4a92e182638652b35fa71b14ae5b11072e4bfe22e21d280/hostname /etc/hostname ro,relatime - ext4 /dev/disk/by-uuid/291e7b1a-8396-44cf-9927-578b3401d0bd rw,errors=remount-ro,data=ordered
> 107 102 8:1 /var/lib/docker/containers/37192b3177f945beb4a92e182638652b35fa71b14ae5b11072e4bfe22e21d280/hosts /etc/hosts ro,relatime - ext4 /dev/disk/by-uuid/291e7b1a-8396-44cf-9927-578b3401d0bd rw,errors=remount-ro,data=ordered
> 108 102 0:35 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw
> 109 102 0:36 / /sys rw,nosuid,nodev,noexec,relatime - sysfs sysfs rw
> 110 102 0:37 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k
> 111 102 0:38 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666
> 112 102 0:12 /7 /dev/console rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=000
> 
> So we have two types of bind-mounts:
> * /var/lib/docker/containers/CTID
> * /dev/console, /etc/resolv.conf
> 
> and the option should be able to handle all these cases...
> 
> For example:
> 
> on dump:
> --ext-mount s:/var/lib/docker/containers/37192b3177f945beb4a92e182638652b35fa71b14ae5b11072e4bfe22e21d280/=CTPATH
> 	all source subpath is replaced on CTPATH

There's no such thing as "source subpath". If /var/lib is not directory on /, but
a mountpoint, criu would only see the /docker/containers/ID/... paths in mountinfo.

> --ext-mount d:/dev/console=console
> 	a source path is set to "console", if a destination path is equal to /dev/console
> 
> on restore
> --ext-mount CTPATH=/mnt/var/lib/docker/containers/37192b3177f945beb4a92e182638652b35fa71b14ae5b11072e4bfe22e21d280/
> --ext-mount console=/dev/tty98
> 
> Is this what you suggest?

Thanks,
Pavel


More information about the CRIU mailing list