Fajar, thanks for your response and you're right. I did some testing on the physical host before I wrote to the mailing list but mounted twice the same LV as rw. Now I just did as you said and tried to do a rw mount followed by a ro mount. Indeed the same behavior:
# mount /dev/mapper/vglxc-apps /mnt/1 # mount -o ro /dev/mapper/vglxc-apps /mnt/2 mount: /dev/mapper/vglxc-apps already mounted or /mnt/2 busy mount: according to mtab, /dev/mapper/vglxc-apps is mounted on /mnt/1 So its not LXC's fault (which I'm glad for!). Very interesting though that this happens in general. On Thu, Nov 27, 2014 at 4:42 AM, Fajar A. Nugraha <[email protected]> wrote: > I'm pretty sure it's NOT lxc's fault. > > For starters, have you tried testing the same (i.e. mount rw, and then > mount again ro) in normal, non-lxc setup? That does not work, and does > indeed fail with a message like this > > mount: /dev/zd208 already mounted or /mnt/tmp2 busy > mount: according to mtab, /dev/zd208 is mounted on /mnt/tmp > > So lxc does the right thing: it says "Device or resource busy - failed to > mount". > > > A more relevant question would be "can you mount something in a path rw, > while it's ro in another path at the same time". The answer is, AFAIK, no. > Not directly, or with bind-mount. Either both will be rw, or both will be > ro. > > A workaround would probably be to use an additional fs layer on top of it, > like nfs or aufs, and then mount that additional layer ro. > > -- > Fajar > > > On Wed, Nov 26, 2014 at 7:29 PM, Claudio Kuenzler <[email protected]> > wrote: > >> I made a couple of mistakes in my modified patch - so please ignore >> that.But the basic idea of it was to handle special mount flags (in this >> case RDONLY) before it hits >> >> if (mount(fsname, target, fstype, mountflags & ~MS_REMOUNT, data)) >> >> Will be glad to test additional patches for you. >> >> On Wed, Nov 26, 2014 at 11:19 AM, Claudio Kuenzler < >> [email protected]> wrote: >> >>> I applied the patch but it does not work for the read only mount. >>> >>> lxc-start 1416993491.172 INFO lxc_conf - >>> conf.c:check_autodev:3821 - Autodev not required. >>> lxc-start 1416993491.172 ERROR lxc_conf - >>> conf.c:mount_entry:1916 - Device or resource busy - failed to mount >>> '/dev/vglxc/apps' on '/usr/local/lib/lxc/rootfs/mnt/apps' >>> >>> I have modified the patch order a bit. Please note that I'm not a >>> developer so this might be plain wrong: >>> >>> 1901 static int mount_entry(const char *fsname, const char *target, >>> 1902 const char *fstype, unsigned long mountflags, >>> 1903 const char *data, int optional) >>> 1904 { >>> 1905 #ifdef HAVE_STATVFS >>> 1906 struct statvfs sb; >>> 1907 #endif >>> 1908 >>> 1909 if ((mountflags & MS_REMOUNT) || (mountflags & MS_BIND)) { >>> 1910 DEBUG("remounting %s on %s to respect bind or >>> remount options", >>> 1911 fsname ? fsname : "(none)", target ? target : >>> "(none)"); >>> 1912 unsigned long rqd_flags = 0; >>> 1913 if (mountflags & MS_RDONLY) >>> 1914 rqd_flags |= MS_RDONLY; >>> 1915 >>> 1916 >>> 1917 else if (mount(fsname, target, fstype, mountflags & >>> ~MS_REMOUNT, data)) { >>> 1918 if (optional) { >>> 1919 INFO("failed to mount '%s' on '%s' >>> (optional): %s", fsname, >>> 1920 target, strerror(errno)); >>> 1921 return 0; >>> 1922 } >>> 1923 else { >>> 1924 SYSERROR("failed to mount '%s' on '%s'", >>> fsname, target); >>> 1925 return -1; >>> 1926 } >>> 1927 } >>> 1928 >>> 1929 #ifdef HAVE_STATVFS >>> >>> This time the LV was mounted: >>> >>> lxc-start 1416996121.708 INFO lxc_conf - >>> conf.c:check_autodev:3823 - Autodev not required. >>> lxc-start 1416996121.708 DEBUG lxc_conf - >>> conf.c:mount_entry:1975 - mounted '/dev/vglxc/apps' on >>> '/usr/local/lib/lxc/rootfs/mnt/apps', type 'ext4' >>> lxc-start 1416996121.708 INFO lxc_conf - >>> conf.c:mount_file_entries:2224 - mount points have been setup >>> >>> But I got different errors - which could be because of the modified code >>> or because of something else: >>> >>> lxc-start 1416996121.730 DEBUG lxc_conf - >>> conf.c:setup_rootfs_pivot_root:1082 - pivot_root syscall to >>> '/usr/local/lib/lxc/rootfs' successful >>> lxc-start 1416996121.731 INFO lxc_conf - conf.c:setup_pts:1641 >>> - created new pts instance >>> lxc-start 1416996121.731 INFO lxc_conf - >>> conf.c:setup_personality:1658 - set personality to '0x0' >>> lxc-start 1416996121.731 ERROR lxc_conf - >>> conf.c:setup_caps:2339 - unknown capability mac_admin >>> lxc-start 1416996121.731 ERROR lxc_conf - conf.c:lxc_setup:4174 >>> - failed to drop capabilities >>> lxc-start 1416996121.731 ERROR lxc_start - start.c:do_start:688 >>> - failed to setup the container >>> lxc-start 1416996121.731 ERROR lxc_sync - sync.c:__sync_wait:51 >>> - invalid sequence number 1. expected 2 >>> lxc-start 1416996121.731 WARN lxc_conf - >>> conf.c:lxc_delete_network:3175 - failed to remove interface '(null)' >>> lxc-start 1416996121.758 ERROR lxc_start - >>> start.c:__lxc_start:1088 - failed to spawn 'mycontainer' >>> lxc-start 1416996121.759 WARN lxc_commands - >>> commands.c:lxc_cmd_rsp_recv:172 - command get_init_pid failed to receive >>> response >>> lxc-start 1416996121.759 WARN lxc_cgmanager - >>> cgmanager.c:cgm_get:963 - do_cgm_get exited with error >>> lxc-start 1416996126.764 ERROR lxc_start_ui - >>> lxc_start.c:main:342 - The container failed to start. >>> lxc-start 1416996126.765 ERROR lxc_start_ui - >>> lxc_start.c:main:344 - To get more details, run the container in foreground >>> mode. >>> lxc-start 1416996126.765 ERROR lxc_start_ui - >>> lxc_start.c:main:346 - Additional information can be obtained by setting >>> the --logfile and --logpriority options. >>> >>> Will try to redo this in a clean installation. >>> >>> On Wed, Nov 26, 2014 at 7:31 AM, Claudio Kuenzler < >>> [email protected]> wrote: >>> >>>> I've read that mailing list post yesterday, too and was actually hoping >>>> this could solve the mount issue. When I looked at it, it seems that this >>>> patch hasnt been merged into the github repo yet, correct? >>>> >>>> Will try it and let you know. >>>> On Nov 26, 2014 6:35 AM, "Serge Hallyn" <[email protected]> >>>> wrote: >>>> >>>>> Quoting Claudio Kuenzler ([email protected]): >>>>> > Hello all, >>>>> > >>>>> > OS: Ubuntu 14.04.1 LTS >>>>> > LXC Version: 1.0.6-0ubuntu0.1 >>>>> > >>>>> > Experienced a weird issue when I tried to launch a container which >>>>> mounts >>>>> > an additional logical volume (ext4 formatted) through the >>>>> container's fstab >>>>> > file: >>>>> > >>>>> > # cat /var/lib/lxc/mycontainer/fstab >>>>> > /dev/vglxc/apps mnt/apps ext4 ro 0 0 >>>>> > >>>>> > This LV is already mounted on the physical host: >>>>> > >>>>> > # mount /dev/vglxc/apps /mnt >>>>> > >>>>> > Now when I try to launch the container, I get the following error: >>>>> > >>>>> > # lxc-start -n mycontainer -l trace -o mycontainer.out >>>>> > lxc-start: Device or resource busy - failed to mount >>>>> '/dev/vglxc/apps' on >>>>> > '/usr/lib/x86_64-linux-gnu/lxc/mnt/apps' >>>>> > lxc-start: failed to setup the mounts for 'mycontainer' >>>>> > lxc-start: failed to setup the container >>>>> > lxc-start: invalid sequence number 1. expected 2 >>>>> > lxc-start: failed to spawn 'mycontainer' >>>>> > lxc-start: The container failed to start. >>>>> > lxc-start: Additional information can be obtained by setting the >>>>> --logfile >>>>> > and --logpriority options. >>>>> > >>>>> > In the output file the following information is shown: >>>>> > >>>>> > lxc-start 1416921918.699 INFO lxc_conf - Autodev not >>>>> required. >>>>> > lxc-start 1416921918.699 ERROR lxc_conf - Device or >>>>> resource busy >>>>> > - failed to mount '/dev/vglxc/apps' on >>>>> > '/usr/lib/x86_64-linux-gnu/lxc/mnt/apps' >>>>> > lxc-start 1416921918.699 ERROR lxc_conf - failed to setup >>>>> the >>>>> > mounts for 'mycontainer' >>>>> > >>>>> > When I change the mount option in the container's fstab file from >>>>> "ro" to >>>>> > "defaults" (or basically "rw"), the container starts up: >>>>> > >>>>> > # cat /var/lib/lxc/mycontainer/fstab >>>>> > /dev/vglxc/apps mnt/apps ext4 defaults 0 0 >>>>> > >>>>> > # lxc-start -n mycontainer -l trace -o mycontainer.out >>>>> > >>>>> > lxc-start 1416921799.912 INFO lxc_conf - Autodev not >>>>> required. >>>>> > lxc-start 1416921799.912 DEBUG lxc_conf - mounted >>>>> > '/dev/vglxc/apps' on '/usr/lib/x86_64-linux-gnu/lxc/mnt/apps', type >>>>> 'ext4' >>>>> > >>>>> > If the LV /dev/vglxc/apps is nowhere mounted yet, the container >>>>> starts up - >>>>> > with the read only mount option, too. >>>>> > >>>>> > Is this a (known) bug I ran into? >>>>> >>>>> I think it is. Can you please try with this patch: >>>>> >>>>> >>>>> https://lists.linuxcontainers.org/pipermail/lxc-devel/2014-November/010876.html >>>>> >>>>> applied? >>>>> _______________________________________________ >>>>> lxc-users mailing list >>>>> [email protected] >>>>> http://lists.linuxcontainers.org/listinfo/lxc-users >>>> >>>> >>> >> >> _______________________________________________ >> lxc-users mailing list >> [email protected] >> http://lists.linuxcontainers.org/listinfo/lxc-users >> > > > _______________________________________________ > lxc-users mailing list > [email protected] > http://lists.linuxcontainers.org/listinfo/lxc-users >
_______________________________________________ lxc-users mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-users
