Hey Serge,

Was out of town the last several days.  Sorry about not getting back
sooner.  Just getting back to this now...

Because my big server, Hydra, has a lot of running containers on it now,
I switched testing over to another server, MtKing, that has no other
containers on it so I had a cleaner mount table to work from.  Hydra was
just too cluttered at this point.

On Wed, 2013-10-09 at 12:08 -0500, Serge Hallyn wrote: 
> Quoting Michael H. Warfield (m...@wittsend.com):
> > On Wed, 2013-10-09 at 10:10 -0500, Serge Hallyn wrote: 
> > > Quoting Michael H. Warfield (m...@wittsend.com):
> > > > On Wed, 2013-10-09 at 09:50 -0500, Serge Hallyn wrote: 
> > > > > > lxc-create -n Ubuntu-test -t ubuntu
> > > > > > 
> > > > > > Bingo...
> > > > > > 
> > > > > > /dev/mapper/fedora-root on /usr/lib64/lxc/rootfs type ext4 
> > > > > > (rw,relatime,seclabel,data=ordered)
> > > > > > 
> > > > > > Why is lxc-create even creating that mount?  I don't see any reason 
> > > > > > for
> > > > > 
> > > > > Check lxccontainer.c:785 and line 805.  We call bdev_mount() in case 
> > > > > its
> > > > > a blockdev.  In the case of a dir-backed container we still end up 
> > > > > doing
> > > > > a bind mount of the rootfs.
> > > > > 
> > > > > > it.  We're never running the container in lxc-create.  Running
> > > > > > "umount /usr/lib64/lxc/rootfs" clears it and we're off to the races
> > > > > > again.
> > > > > > 
> > > > > > If I were to venture a WAG (Wild Ass Guess) some initialization 
> > > > > > code is
> > > > > > creating that bind mount that is not needed and that the cleanup 
> > > > > > code in
> > > > > > lxc-create is unaware of.  But I haven't gone to the trouble of 
> > > > > > trying
> > > > > > to track the code down yet.
> > > > 
> > > > > Now is your / still MS_SHARED?  The bdev create and templates
> > > > > run in a private namespace, but if MS_SHARED then the mounts get
> > > > > bounced back to host.  Maybe we need to manually set MS_PRIVATE every
> > > > > time after doing an unshare() in lxc code.
> > > > 
> > > > It doesn't seem to be...  Am I looking in the right spot.  I don't see
> > > > it in the options...
> > > > 
> > > > [root@hydra mhw]# mount | grep ' / '
> > > > /dev/mapper/fedora-root on / type ext4 
> > > > (rw,relatime,seclabel,data=ordered)
> > 
> > > What does /proc/self/mountinfo on the host looks like?

Crud...  Now I see I looked in /proc/self/mounts
not /proc/self/mountinfo.  My bad.

> > [root@hydra mhw]# grep ' / ' /proc/self/mounts
> > rootfs / rootfs rw 0 0

> What about 'grep -i shared /proc/self/mount*?

Gave me everything.  Every entry is "shared".  I could just as well have
done a "cat" rather than a "grep -i".

Ok...  Let's do this formally...  Clean machine (MtKing) with no
containers running...

[root@mtking mhw]# grep -i shared /proc/self/mountinfo 
15 34 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:5 - proc proc rw
16 34 0:14 / /sys rw,nosuid,nodev,noexec,relatime shared:6 - sysfs sysfs rw
17 34 0:5 / /dev rw,nosuid shared:2 - devtmpfs devtmpfs 
rw,size=1792232k,nr_inodes=448058,mode=755
18 16 0:15 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime shared:7 - 
securityfs securityfs rw
20 17 0:16 / /dev/shm rw,nosuid,nodev shared:3 - tmpfs tmpfs rw
21 17 0:10 / /dev/pts rw,nosuid,noexec,relatime shared:4 - devpts devpts 
rw,gid=5,mode=620,ptmxmode=000
22 34 0:17 / /run rw,nosuid,nodev shared:19 - tmpfs tmpfs rw,mode=755
23 16 0:18 / /sys/fs/cgroup rw,nosuid,nodev,noexec shared:8 - tmpfs tmpfs 
rw,mode=755
24 23 0:19 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime shared:9 - 
cgroup cgroup 
rw,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd
25 16 0:20 / /sys/fs/pstore rw,nosuid,nodev,noexec,relatime shared:18 - pstore 
pstore rw
26 23 0:21 / /sys/fs/cgroup/cpuset rw,nosuid,nodev,noexec,relatime shared:10 - 
cgroup cgroup rw,cpuset
27 23 0:22 / /sys/fs/cgroup/cpu,cpuacct rw,nosuid,nodev,noexec,relatime 
shared:11 - cgroup cgroup rw,cpuacct,cpu
28 23 0:23 / /sys/fs/cgroup/memory rw,nosuid,nodev,noexec,relatime shared:12 - 
cgroup cgroup rw,memory
29 23 0:24 / /sys/fs/cgroup/devices rw,nosuid,nodev,noexec,relatime shared:13 - 
cgroup cgroup rw,devices
30 23 0:25 / /sys/fs/cgroup/freezer rw,nosuid,nodev,noexec,relatime shared:14 - 
cgroup cgroup rw,freezer
31 23 0:26 / /sys/fs/cgroup/net_cls rw,nosuid,nodev,noexec,relatime shared:15 - 
cgroup cgroup rw,net_cls
32 23 0:27 / /sys/fs/cgroup/blkio rw,nosuid,nodev,noexec,relatime shared:16 - 
cgroup cgroup rw,blkio
33 23 0:28 / /sys/fs/cgroup/perf_event rw,nosuid,nodev,noexec,relatime 
shared:17 - cgroup cgroup rw,perf_event
34 1 8:3 / / rw,relatime shared:1 - ext4 /dev/sda3 rw,data=ordered
14 15 0:13 / /proc/sys/fs/binfmt_misc rw,relatime shared:20 - autofs systemd-1 
rw,fd=32,pgrp=1,timeout=300,minproto=5,maxproto=5,direct
19 17 0:12 / /dev/mqueue rw,relatime shared:21 - mqueue mqueue rw
35 17 0:29 / /dev/hugepages rw,relatime shared:22 - hugetlbfs hugetlbfs rw
36 16 0:7 / /sys/kernel/debug rw,relatime shared:23 - debugfs debugfs rw
37 34 0:30 / /tmp rw shared:24 - tmpfs tmpfs rw
38 14 0:31 / /proc/sys/fs/binfmt_misc rw,relatime shared:25 - binfmt_misc 
binfmt_misc rw
39 16 0:32 / /sys/kernel/config rw,relatime shared:26 - configfs configfs rw
41 34 8:1 / /boot rw,relatime shared:27 - ext4 /dev/sda1 
rw,stripe=4,data=ordered
42 34 8:5 / /home rw,relatime shared:28 - ext4 /dev/sda5 rw,data=ordered
74 42 0:33 / /home/mhw/Private rw,nosuid,nodev,relatime shared:59 - ecryptfs 
/home/mhw/.Private 
rw,ecryptfs_fnek_sig=a3e7ab91e66a3511,ecryptfs_sig=a3ff22626fa0be76,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs
76 22 0:34 / /run/user/1000/gvfs rw,nosuid,nodev,relatime shared:61 - 
fuse.gvfsd-fuse gvfsd-fuse rw,user_id=1000,group_id=1000

Now, I dumped that to a file (mount.start) and I'll post diffs from
below...

Next I ran this...

lxc-create -n Ubuntu.precise -t ubuntu -- -r precise

And I notice this...

Checking cache download in /var/cache/lxc/precise/rootfs-amd64 ... 
Copy /var/cache/lxc/precise/rootfs-amd64 to /usr/lib64/lxc/rootfs ... 
Copying rootfs to /usr/lib64/lxc/rootfs ...

Oooo hooo....  Now I see why lxc-create is creating that bind mount to
begin with...  It's not copying to the "rootfs" path, it's copying to
that mount path.  Ok.  That mystery is solved for me now.  I wouldn't
have done it that way, as it's unnecessary, but it's a reasonable way to
do it.  Judgment call.  Season to taste...

I then added...

lxc-create -n Ubuntu.quantal -t ubuntu -- -r quantal
lxc-create -n Ubuntu.raring -t ubuntu -- -r raring
lxc-create -n Ubuntu.saucy -t ubuntu -- -r saucy

I had dumped the original mount table to "mount.start" and then dumped
the resulting mount table to mount.end and ran a diff:

[root@mtking mhw]# grep -i shared /proc/self/mountinfo  > mount.end
[root@mtking mhw]# diff mount.start mount.end
30a31,40
> 176 34 8:3 /var/lib/lxc/Ubuntu.precise/rootfs /usr/lib64/lxc/rootfs 
> rw,relatime shared:1 - ext4 /dev/sda3 rw,data=ordered
> 180 34 8:3 /var/lib/lxc/Ubuntu.quantal/rootfs 
> /var/lib/lxc/Ubuntu.precise/rootfs rw,relatime shared:1 - ext4 /dev/sda3 
> rw,data=ordered
> 189 176 8:3 /var/lib/lxc/Ubuntu.quantal/rootfs /usr/lib64/lxc/rootfs 
> rw,relatime shared:1 - ext4 /dev/sda3 rw,data=ordered
> 196 34 8:3 /var/lib/lxc/Ubuntu.raring/rootfs 
> /var/lib/lxc/Ubuntu.quantal/rootfs rw,relatime shared:1 - ext4 /dev/sda3 
> rw,data=ordered
> 204 180 8:3 /var/lib/lxc/Ubuntu.raring/rootfs 
> /var/lib/lxc/Ubuntu.precise/rootfs rw,relatime shared:1 - ext4 /dev/sda3 
> rw,data=ordered
> 209 189 8:3 /var/lib/lxc/Ubuntu.raring/rootfs /usr/lib64/lxc/rootfs 
> rw,relatime shared:1 - ext4 /dev/sda3 rw,data=ordered
> 221 34 8:3 /var/lib/lxc/Ubuntu.saucy/rootfs /var/lib/lxc/Ubuntu.raring/rootfs 
> rw,relatime shared:1 - ext4 /dev/sda3 rw,data=ordered
> 229 196 8:3 /var/lib/lxc/Ubuntu.saucy/rootfs 
> /var/lib/lxc/Ubuntu.quantal/rootfs rw,relatime shared:1 - ext4 /dev/sda3 
> rw,data=ordered
> 234 204 8:3 /var/lib/lxc/Ubuntu.saucy/rootfs 
> /var/lib/lxc/Ubuntu.precise/rootfs rw,relatime shared:1 - ext4 /dev/sda3 
> rw,data=ordered
> 239 209 8:3 /var/lib/lxc/Ubuntu.saucy/rootfs /usr/lib64/lxc/rootfs 
> rw,relatime shared:1 - ext4 /dev/sda3 rw,data=ordered

Ouch...

The machine should now be in the same state.  No containers are running,
yet we have these mounts present.  Yeah, they're all "shared".  WTH,
though.  The first one was left with one dangling mount.  The second one
got two.  The third one got three.  The forth one got four.  What's
going on here?  That's 10 dangling mounts total for 4 creates!

If I then run "umount /usr/lib64/lxc/rootfs" 4 times (the number of
lxc-creates) ALL of the mounts disappear, so there is some pinning of
one mount to another involved here.  When I do that command until I get
the error "umount: /usr/lib64/lxc/rootfs: not mounted", I'm then back to
my original state.

Host is a current Fedora19 host.

> > /dev/mapper/fedora-root / ext4 rw,seclabel,relatime,data=ordered 0 0
> > [root@hydra mhw]# grep ' /usr/lib64/lxc/rootfs ' /proc/self/mounts
> > /dev/mapper/fedora-root /usr/lib64/lxc/rootfs ext4 
> > rw,seclabel,relatime,data=ordered 0 0

> What about /proc/self/mountinfo?

Regards,
Mike
-- 
Michael H. Warfield (AI4NB) | (770) 985-6132 |  m...@wittsend.com
   /\/\|=mhw=|\/\/          | (678) 463-0932 |  http://www.wittsend.com/mhw/
   NIC whois: MHW9          | An optimist believes we live in the best of all
 PGP Key: 0x674627FF        | possible worlds.  A pessimist is sure of it!

Attachment: signature.asc
Description: This is a digitally signed message part

------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to