[lxc-devel] lxc-start: Invalid argument - pivot_root syscall failed

Peter Volkov pva at gentoo.org
Thu Oct 17 20:22:14 UTC 2013


В Чт, 10/10/2013 в 14:47 -0500, Serge Hallyn пишет:
> Quoting Peter Volkov (pva at gentoo.org):
> > I'm using 1.0.0.alpha1 although I've tried with 0.8.0 also and I'm
> > unable to start container with the following error:
> > 
> > lxc-start: Invalid argument - pivot_root syscall failed
> > lxc-start: failed to setup pivot root
> > lxc-start: failed to set rootfs for 'repos'
> > lxc-start: failed to setup the container
> > lxc-start: invalid sequence number 1. expected 2
> > lxc-start: failed to spawn 'repos'
> > 
> > I've tried mount --make-private on all mount point I've thought of with
> > no luck.
> > Also I've tried lxc.autodev = 1 also no luck and I guess this is
> > relevant with systemd while this systems uses openrc as init system.
> > 
> > Container's conf file:
> > 
> > lxc.arch = amd64
> > lxc.utsname = repos
> > lxc.rootfs = /virt/lxc/repos
> > 
> > Distribution Gentoo. Same config works fine on another gentoo system.
> > Although systems are completely different I think important differences
> > are:
> > 1. init system: on laptop I'm using systemd while on server openrc
> > 2. on server I have full system inside ram (system resides inside
> > initramfs and after boot root stays in RAM on rootfs)
> 
> I think that's the problem.  I could be wrong, but I think it's
> refusing ecause your root doesn't have a parent, i.e. isn't
> mounted somewhere.
> 
> I suspect we want detect_shared_rootfs() updated to check for
> your rootfs being mount #1, and also return 1 in that case
> (meaning we will set up an environment in which you can in
> fact pivot_root).  
> 
> Is such a patch something you could write and test?

Well, it's not that easy, unfortunately. For tests I just modified
detect_shared_rootfs to return 1, so it'll detect that / is shared.
Tried and lxc-start failed with:

lxc-start: Invalid argument - failed to mount /usr/local/lib/lxc/rootfs
bind
lxc-start: Failed to chroot into slave /

and really, if I try manually mount it fails:
# mount -o bind /usr/local/lib/lxc/rootfs /usr/local/lib/lxc/rootfs
mount: wrong fs type, bad option, bad superblock
on /usr/local/lib64/lxc/rootfs,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail or so

Ok, not a problem, I've added followint in config:
lxc.rootfs.mount = /virt/lxc/pivot_root
/virt/lxc/pivot_root are not on rootfs partion so mount -o bind works as
it should:
# mount -o bind /virt/lxc/pivot_root /virt/lxc/pivot_root
# 

Tried again and now lxc-start fails:
 # lxc-start -f repos.conf -n repos -l DEBUG -o lxc-start-debug 
lxc-start: Invalid argument - Failed to rbind mount /
to /virt/lxc/pivot_root/root
lxc-start: Failed to chroot into slave /
lxc-start: failed to setup rootfs for 'repos'
lxc-start: failed to setup the container
lxc-start: invalid sequence number 1. expected 2
lxc-start: failed to spawn 'repos'

Why does it needs to mount /? I've read the comments before
chroot_into_slave() but I don't understand why we need to do all of
that. Was there any discussion? 

Thanks for you help so far,
--
Peter.






More information about the lxc-devel mailing list