All of lore.kernel.org
 help / color / mirror / Atom feed
* overlayfs: mounting overlayfs on top of overlayfs
@ 2011-06-03 13:29 Jordi Pujol
  2011-06-04  6:23 ` Jordi Pujol
  0 siblings, 1 reply; 7+ messages in thread
From: Jordi Pujol @ 2011-06-03 13:29 UTC (permalink / raw)
  To: Miklos Szeredi, linux-fsdevel, Michal Suchanek

[-- Attachment #1: Type: Text/Plain, Size: 1407 bytes --]

Hello,

The attached script (test05.sh) makes a read-only overlayfs mount on top of 
another readonly overlayfs mount, repeating this in a loop,

when all the read-only filesystems are mounted, then it mounts another 
overlayfs that uses the last read-only rootdir as lowerdir and a read-write 
filesystem in upperdir,

this method gives persistence to mount and unmount, overlayfs will save the fs 
changes in the read-write upperdir.

But it gives a problem when we try to edit the files that are only on the most 
upper read-only dir, ( that files are not included in lower read-only dirs ).

# sed -i -e s|a|a|g /tmp/tmp.b/tmp.k/etc/apache2/conf.d/continuoustrade.conf
sed: couldn't open temporary file 
/tmp/tmp.b/tmp.k/etc/apache2/conf.d/sedthJcp8: Read-only file system

when we "touch" the file, therefore can be edited.

# touch /tmp/tmp.b/tmp.k/etc/apache2/conf.d/continuoustrade.conf
(OK)
# sed -i -e s|a|a|g /tmp/tmp.b/tmp.k/etc/apache2/conf.d/continuoustrade.conf
(OK)

the same happens using KDE editors like kate or kwrite.

P.D: is included another testing script (test04.sh) that mounts all levels in 
read/write mode, it works, but this method is worse because uses multiple 
directories to save the changed files and when modifying the files are copied 
several times across the directories.

Thanks,

Jordi Pujol

Live never ending Tale
GNU/Linux Live forever!
http://livenet.selfip.com

[-- Attachment #2: test05-3.log --]
[-- Type: text/x-log, Size: 16221 bytes --]

+ set -x
+ set -e
+ mktemp -d -p /tmp
+ WORK_DIR=/tmp/tmp.bYP9FObwD6
+ unset uf lf
+ read uf
+ [ -e /lnet/image/LneTPers64/00filesystem.squashfs ]
+ [ -d /lnet/image/LneTPers64/00filesystem.squashfs ]
+ basename /lnet/image/LneTPers64/00filesystem.squashfs
+ u=/tmp/tmp.bYP9FObwD6/00filesystem.squashfs
+ mkdir -p /tmp/tmp.bYP9FObwD6/00filesystem.squashfs
+ mount -o loop /lnet/image/LneTPers64/00filesystem.squashfs /tmp/tmp.bYP9FObwD6/00filesystem.squashfs
+ [ -n  ]
+ lf=/tmp/tmp.bYP9FObwD6/00filesystem.squashfs
+ read uf
+ [ -e /lnet/image/LneTPers64/12firmwarert.squashfs ]
+ [ -d /lnet/image/LneTPers64/12firmwarert.squashfs ]
+ basename /lnet/image/LneTPers64/12firmwarert.squashfs
+ u=/tmp/tmp.bYP9FObwD6/12firmwarert.squashfs
+ mkdir -p /tmp/tmp.bYP9FObwD6/12firmwarert.squashfs
+ mount -o loop /lnet/image/LneTPers64/12firmwarert.squashfs /tmp/tmp.bYP9FObwD6/12firmwarert.squashfs
+ [ -n /tmp/tmp.bYP9FObwD6/00filesystem.squashfs ]
+ [ -d /tmp/tmp.bYP9FObwD6/00filesystem.squashfs ]
+ l=/tmp/tmp.bYP9FObwD6/00filesystem.squashfs
+ mktemp -d -p /tmp/tmp.bYP9FObwD6
+ r=/tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH
+ mount -t overlayfs -o ro,lowerdir=/tmp/tmp.bYP9FObwD6/00filesystem.squashfs,upperdir=/tmp/tmp.bYP9FObwD6/12firmwarert.squashfs overlayfs /tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH
+ lf=/tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH
+ read uf
+ [ -e /lnet/image/LneTPers64/90pcjordi.squashfs ]
+ [ -d /lnet/image/LneTPers64/90pcjordi.squashfs ]
+ basename /lnet/image/LneTPers64/90pcjordi.squashfs
+ u=/tmp/tmp.bYP9FObwD6/90pcjordi.squashfs
+ mkdir -p /tmp/tmp.bYP9FObwD6/90pcjordi.squashfs
+ mount -o loop /lnet/image/LneTPers64/90pcjordi.squashfs /tmp/tmp.bYP9FObwD6/90pcjordi.squashfs
+ [ -n /tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH ]
+ [ -d /tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH ]
+ l=/tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH
+ mktemp -d -p /tmp/tmp.bYP9FObwD6
+ r=/tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF
+ mount -t overlayfs -o ro,lowerdir=/tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH,upperdir=/tmp/tmp.bYP9FObwD6/90pcjordi.squashfs overlayfs /tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF
+ lf=/tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF
+ read uf
+ [ -d /tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF ]
+ mktemp -d -p /tmp/tmp.bYP9FObwD6
+ ROOT_DIR=/tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b
+ mktemp -d -p /tmp/tmp.bYP9FObwD6
+ COW_DIR=/tmp/tmp.bYP9FObwD6/tmp.Cb0t6fshqW
+ mount -t overlayfs -o rw,lowerdir=/tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF,upperdir=/tmp/tmp.bYP9FObwD6/tmp.Cb0t6fshqW overlayfs /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b
+ echo rootdir: /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b
rootdir: /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b
+ echo COW: /tmp/tmp.bYP9FObwD6/tmp.Cb0t6fshqW
COW: /tmp/tmp.bYP9FObwD6/tmp.Cb0t6fshqW
+ find /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2 -type f
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/continuoustrade.conf
sed: couldn't open temporary file /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/sedthJcp8: Read-only file system
+ :
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/jplive.conf
sed: couldn't open temporary file /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/sed7QBon8: Read-only file system
+ :
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/libretto.conf
sed: couldn't open temporary file /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/sedpu5gN8: Read-only file system
+ :
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/librettoweb.conf
sed: couldn't open temporary file /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/sed73phL8: Read-only file system
+ :
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/ports.conf
sed: couldn't open temporary file /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/sedvNIHA8: Read-only file system
+ :
+ find /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2 -type f
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/continuoustrade.conf
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/jplive.conf
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/libretto.conf
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/librettoweb.conf
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/ports.conf
+ find /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2 -type f
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/continuoustrade.conf
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/jplive.conf
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/libretto.conf
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/conf.d/librettoweb.conf
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/apache2/ports.conf
+ find /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default -type f
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/acpid
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/alsa
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/bluetooth
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/bootlogd
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cacerts
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cgconfig
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cgred
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/console-setup
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cron
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cups
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/dbus
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/devpts
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/halt
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ifupdown
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/irqbalance
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/jobadmind
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/kdm.d/10_desktop-base
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/kexec
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/keyboard
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-firewall
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-service-defaults
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-upnpclient
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/locale
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/nss
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ntpdate
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/openvpn
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rcS
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rsync
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rsyslog
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/samba
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/saned
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ssh
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/tmpfs
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/useradd
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/vnc-lnet
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/xinetd
+ find /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default -type f
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/acpid
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/alsa
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/bluetooth
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/bootlogd
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cacerts
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cgconfig
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cgred
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/console-setup
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cron
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cups
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/dbus
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/devpts
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/halt
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ifupdown
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/irqbalance
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/jobadmind
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/kdm.d/10_desktop-base
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/kexec
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/keyboard
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-firewall
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-service-defaults
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-upnpclient
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/locale
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/nss
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ntpdate
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/openvpn
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rcS
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rsync
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rsyslog
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/samba
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/saned
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ssh
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/tmpfs
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/useradd
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/vnc-lnet
+ touch /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/xinetd
+ find /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default -type f
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/acpid
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/alsa
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/bluetooth
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/bootlogd
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cacerts
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cgconfig
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cgred
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/console-setup
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cron
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/cups
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/dbus
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/devpts
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/halt
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ifupdown
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/irqbalance
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/jobadmind
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/kdm.d/10_desktop-base
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/kexec
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/keyboard
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-firewall
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-service-defaults
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/lnet-upnpclient
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/locale
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/nss
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ntpdate
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/openvpn
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rcS
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rsync
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/rsyslog
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/samba
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/saned
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/ssh
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/tmpfs
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/useradd
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/vnc-lnet
+ sed -i -e s|a|a|g /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b/etc/default/xinetd
+ mount
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
rootfs on / type rootfs (rw)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=410976k,mode=755)
tmpfs on /lnet type tmpfs (rw,relatime,size=2054872k)
/dev/sda1 on /lnet/image type ext3 (ro,noatime,errors=continue,barrier=0,data=writeback,commit=0)
/dev/loop0 on /lnet/00filesystem.squashfs type squashfs (ro,noatime)
/dev/sda2 on /lnet/cowroot type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered,commit=0)
/lnet/cowroot/LneTPersCOW on /lnet/cow type none (rw,bind,commit=0)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime,size=2054872k)
tmpfs on /var/log type tmpfs (rw,nosuid,relatime,size=2054872k,mode=755)
tmpfs on /var/tmp type tmpfs (rw,nosuid,nodev,relatime,size=2054872k)
cgroup on /sys/fs/cgroup type cgroup (rw,relatime,memory,cpu)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,relatime,size=2054872k)
/lnet/cowroot/LneThome on /home type none (rw,bind,commit=0)
/home/JPLive/cacheapt-amd64 on /var/cache/apt type none (rw,bind,commit=0)
/home/JPLive/libapt-amd64 on /var/lib/apt type none (rw,bind,commit=0)
/home/JPLive/var-spool on /var/spool type none (rw,bind,commit=0)
/dev/loop4 on /tmp/tmp.bYP9FObwD6/00filesystem.squashfs type squashfs (ro)
/dev/loop5 on /tmp/tmp.bYP9FObwD6/12firmwarert.squashfs type squashfs (ro)
/home/JPLive/git/linux-2.6/overlayfs/overlayfs on /tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH type overlayfs (ro,lowerdir=/tmp/tmp.bYP9FObwD6/00filesystem.squashfs,upperdir=/tmp/tmp.bYP9FObwD6/12firmwarert.squashfs)
/dev/loop6 on /tmp/tmp.bYP9FObwD6/90pcjordi.squashfs type squashfs (ro)
/home/JPLive/git/linux-2.6/overlayfs/overlayfs on /tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF type overlayfs (ro,lowerdir=/tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH,upperdir=/tmp/tmp.bYP9FObwD6/90pcjordi.squashfs)
/home/JPLive/git/linux-2.6/overlayfs/overlayfs on /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b type overlayfs (rw,lowerdir=/tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF,upperdir=/tmp/tmp.bYP9FObwD6/tmp.Cb0t6fshqW)
+ umount /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b
+ find /tmp/tmp.bYP9FObwD6 -mindepth 1 -maxdepth 1 -type d
+ read f
+ [ -d /tmp/tmp.bYP9FObwD6/tmp.Cb0t6fshqW ]
+ mountpoint /tmp/tmp.bYP9FObwD6/tmp.Cb0t6fshqW
/tmp/tmp.bYP9FObwD6/tmp.Cb0t6fshqW is not a mountpoint
+ :
+ read f
+ [ -d /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b ]
+ mountpoint /tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b
/tmp/tmp.bYP9FObwD6/tmp.k41C1t8H8b is not a mountpoint
+ :
+ read f
+ [ -d /tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF ]
+ mountpoint /tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF
/tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF is a mountpoint
+ umount /tmp/tmp.bYP9FObwD6/tmp.zX0iRoUfKF
+ read f
+ [ -d /tmp/tmp.bYP9FObwD6/90pcjordi.squashfs ]
+ mountpoint /tmp/tmp.bYP9FObwD6/90pcjordi.squashfs
/tmp/tmp.bYP9FObwD6/90pcjordi.squashfs is a mountpoint
+ umount /tmp/tmp.bYP9FObwD6/90pcjordi.squashfs
+ read f
+ [ -d /tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH ]
+ mountpoint /tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH
/tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH is a mountpoint
+ umount /tmp/tmp.bYP9FObwD6/tmp.n7ZqjtjpxH
+ read f
+ [ -d /tmp/tmp.bYP9FObwD6/12firmwarert.squashfs ]
+ mountpoint /tmp/tmp.bYP9FObwD6/12firmwarert.squashfs
/tmp/tmp.bYP9FObwD6/12firmwarert.squashfs is a mountpoint
+ umount /tmp/tmp.bYP9FObwD6/12firmwarert.squashfs
+ read f
+ [ -d /tmp/tmp.bYP9FObwD6/00filesystem.squashfs ]
+ mountpoint /tmp/tmp.bYP9FObwD6/00filesystem.squashfs
/tmp/tmp.bYP9FObwD6/00filesystem.squashfs is a mountpoint
+ umount /tmp/tmp.bYP9FObwD6/00filesystem.squashfs
+ read f
+ :

[-- Attachment #3: test04.sh --]
[-- Type: application/x-shellscript, Size: 876 bytes --]

[-- Attachment #4: test05.sh --]
[-- Type: application/x-shellscript, Size: 1687 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: overlayfs: mounting overlayfs on top of overlayfs
  2011-06-03 13:29 overlayfs: mounting overlayfs on top of overlayfs Jordi Pujol
@ 2011-06-04  6:23 ` Jordi Pujol
  2011-06-06 18:29   ` Jordi Pujol
  0 siblings, 1 reply; 7+ messages in thread
From: Jordi Pujol @ 2011-06-04  6:23 UTC (permalink / raw)
  To: Miklos Szeredi; +Cc: linux-fsdevel, Michal Suchanek

[-- Attachment #1: Type: Text/Plain, Size: 337 bytes --]

Hello,

Here is attached an automated script that creates his own test data and 
reproduces the problem,

I have observed that the problem does not appear when we use as lower dir a 
read/write directory and not an squashfs compressed file.

Thanks,

Jordi Pujol

Live never ending Tale
GNU/Linux Live forever!
http://livenet.selfip.com

[-- Attachment #2: test06.sh --]
[-- Type: application/x-shellscript, Size: 1939 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: overlayfs: mounting overlayfs on top of overlayfs
  2011-06-04  6:23 ` Jordi Pujol
@ 2011-06-06 18:29   ` Jordi Pujol
  2011-06-07  8:08     ` Miklos Szeredi
  0 siblings, 1 reply; 7+ messages in thread
From: Jordi Pujol @ 2011-06-06 18:29 UTC (permalink / raw)
  To: Miklos Szeredi; +Cc: linux-fsdevel, Michal Suchanek

[-- Attachment #1: Type: Text/Plain, Size: 143 bytes --]

Hello,

The attached patch solves the problem,

Thanks,

Jordi Pujol

Live never ending Tale
GNU/Linux Live forever!
http://livenet.selfip.com

[-- Attachment #2: 53-mount-on-top-readonly-mount.patch --]
[-- Type: text/x-patch, Size: 730 bytes --]

 overlayfs v10:
 - Test for readonly using the vfsmount superblock
  from the main filesystem.
 - Ignore WRITE request for the real filesystems.

Signed-off-by: Jordi Pujol <jordipujolp@gmail.com>

--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c	2011-06-05 10:06:25.323823937 +0200
@@ -54,6 +54,9 @@ int ovl_permission(struct inode *inode,
 	bool is_upper;
 	int err;

+	if (mask & MAY_WRITE && IS_RDONLY(inode))
+		return -EROFS;
+
 	if (S_ISDIR(inode->i_mode)) {
 		oe = inode->i_private;
 	} else if (flags & IPERM_FLAG_RCU) {
@@ -102,6 +105,8 @@ int ovl_permission(struct inode *inode,
 		err = -EACCES;
 		if (IS_IMMUTABLE(realinode))
 			goto out_dput;
+
+		mask &= ~MAY_WRITE;
 	}

 	if (realinode->i_op->permission)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: overlayfs: mounting overlayfs on top of overlayfs
  2011-06-06 18:29   ` Jordi Pujol
@ 2011-06-07  8:08     ` Miklos Szeredi
  2011-06-07 13:00       ` Jordi Pujol
  0 siblings, 1 reply; 7+ messages in thread
From: Miklos Szeredi @ 2011-06-07  8:08 UTC (permalink / raw)
  To: Jordi Pujol; +Cc: linux-fsdevel, Michal Suchanek

Jordi Pujol <jordipujolp@gmail.com> writes:

> Hello,
>
> The attached patch solves the problem,
>
> Thanks,
>
> Jordi Pujol
>
> Live never ending Tale
> GNU/Linux Live forever!
> http://livenet.selfip.com
>
>  overlayfs v10:
>  - Test for readonly using the vfsmount superblock
>   from the main filesystem.
>  - Ignore WRITE request for the real filesystems.
>
> Signed-off-by: Jordi Pujol <jordipujolp@gmail.com>
>
> --- a/fs/overlayfs/inode.c
> +++ b/fs/overlayfs/inode.c	2011-06-05 10:06:25.323823937 +0200
> @@ -54,6 +54,9 @@ int ovl_permission(struct inode *inode,
>  	bool is_upper;
>  	int err;
>
> +	if (mask & MAY_WRITE && IS_RDONLY(inode))
> +		return -EROFS;
> +
>  	if (S_ISDIR(inode->i_mode)) {
>  		oe = inode->i_private;
>  	} else if (flags & IPERM_FLAG_RCU) {
> @@ -102,6 +105,8 @@ int ovl_permission(struct inode *inode,
>  		err = -EACCES;
>  		if (IS_IMMUTABLE(realinode))
>  			goto out_dput;
> +
> +		mask &= ~MAY_WRITE;

Well, this is not correct.  We *do* want to check for write permission.
The above would simply ignore the access control.

What are the permission bits on the file in question?

Thanks,
Miklos

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: overlayfs: mounting overlayfs on top of overlayfs
  2011-06-07  8:08     ` Miklos Szeredi
@ 2011-06-07 13:00       ` Jordi Pujol
  2011-06-08 15:06         ` Miklos Szeredi
  0 siblings, 1 reply; 7+ messages in thread
From: Jordi Pujol @ 2011-06-07 13:00 UTC (permalink / raw)
  To: Miklos Szeredi; +Cc: linux-fsdevel, Michal Suchanek

A Dimarts, 7 de juny de 2011 10:08:48, Miklos Szeredi va escriure:
> Well, this is not correct.  We *do* want to check for write permission.
Well, another of my patches that solve the problem making a workaround,

> The above would simply ignore the access control.
only in some case.

> What are the permission bits on the file in question?

the problem is that sed can't create the temporary file in the same directory, 
normally sed will create it using umask permissions, 0022 in my system,

try the automated test contained in my previous message, it creates a log file 
that shows the errors.

Thanks,

Jordi Pujol

Live never ending Tale
GNU/Linux Live forever!
http://livenet.selfip.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: overlayfs: mounting overlayfs on top of overlayfs
  2011-06-07 13:00       ` Jordi Pujol
@ 2011-06-08 15:06         ` Miklos Szeredi
  2011-06-10  6:46           ` Jordi Pujol
  0 siblings, 1 reply; 7+ messages in thread
From: Miklos Szeredi @ 2011-06-08 15:06 UTC (permalink / raw)
  To: Jordi Pujol; +Cc: linux-fsdevel, Michal Suchanek

[-- Attachment #1: Type: text/plain, Size: 1062 bytes --]

Jordi Pujol <jordipujolp@gmail.com> writes:

> A Dimarts, 7 de juny de 2011 10:08:48, Miklos Szeredi va escriure:
>> Well, this is not correct.  We *do* want to check for write permission.
> Well, another of my patches that solve the problem making a workaround,
>
>> The above would simply ignore the access control.
> only in some case.
>
>> What are the permission bits on the file in question?
>
> the problem is that sed can't create the temporary file in the same
> directory, normally sed will create it using umask permissions, 0022
> in my system,
>
> try the automated test contained in my previous message, it creates a
> log file that shows the errors.

Thanks for the script, it helped.

The attached patch should fix it.  It's not a generic solution and other
filesystems may still not function correctly as a read-only lower layer
(e.g. I can see that btrfs has some sort of "r/o volume flag").

That can be fixed by checking file mode and acl instead of calling
->permission() on the lower inode.  Will add that as a FIXME item.

Thanks,
Miklos


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: ovl-fix-overlayfs-over-overlayfs.patch --]
[-- Type: text/x-patch, Size: 2195 bytes --]

commit 0896db57a7e8ab075278c8d46a2620a3f32d866f
Author: Miklos Szeredi <mszeredi@suse.cz>
Date:   Wed Jun 8 16:53:50 2011 +0200

    ovl: fix overlayfs over overlayfs
    
    Overlayfs expects ->permission() to not check for readonliness (which
    is normally checked by the VFS) and so not return with -EROFS.  This
    is not true of some filesystems, notably overlayfs itself.
    
    The following patch should fix this by making sure that if the upper
    layer is read-only (such as squashfs) then it will mark overlayfs
    read-only too and by making ovl_permission() only return EROFS in the
    excpetional case where the upper filesystem became r/o after the
    overlay was constructed.
    
    Reported-by: Jordi Pujol <jordipujolp@gmail.com>
    Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>

diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index 289006e..ce39fab 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -90,9 +90,18 @@ int ovl_permission(struct inode *inode, int mask, unsigned int flags)
 		/*
 		 * Writes will always be redirected to upper layer, so
 		 * ignore lower layer being read-only.
+		 *
+		 * If the overlay itself is read-only then proceed
+		 * with the permission check, don't return EROFS.
+		 * This will only happen if this is the lower layer of
+		 * another overlayfs.
+		 *
+		 * If upper fs becomes read-only after the overlay was
+		 * constructed return EROFS to prevent modification of
+		 * upper layer.
 		 */
 		err = -EROFS;
-		if (is_upper && IS_RDONLY(realinode) &&
+		if (is_upper && !IS_RDONLY(inode) && IS_RDONLY(realinode) &&
 		    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
 			goto out_dput;
 
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index 7109b45..c741b17 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -548,6 +548,10 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
 		goto out_put_upper_mnt;
 	}
 
+	/* If the upper fs is r/o, we mark overlayfs r/o too */
+	if (ufs->upper_mnt->mnt_sb->s_flags & MS_RDONLY)
+		sb->s_flags |= MS_RDONLY;
+
 	if (!(sb->s_flags & MS_RDONLY)) {
 		err = mnt_want_write(ufs->upper_mnt);
 		if (err)

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: overlayfs: mounting overlayfs on top of overlayfs
  2011-06-08 15:06         ` Miklos Szeredi
@ 2011-06-10  6:46           ` Jordi Pujol
  0 siblings, 0 replies; 7+ messages in thread
From: Jordi Pujol @ 2011-06-10  6:46 UTC (permalink / raw)
  To: Miklos Szeredi; +Cc: linux-fsdevel, Michal Suchanek

Hello,

Here are my comments about this patch:

I think "append" should also be prohibited in a read-only fs.

if (mask & (MAY_WRITE | MAY_APPEND))

About the readonly modification on the main filisystem mount, before this 
modification overlayfs already emited a warning message when mounting using a 
read only upperdir. Following is an old log:

+ COW_DIR=/tmp/TEST-sz5/COW-Mec
+ mount -t tmpfs -o ro tmpfs /tmp/TEST-sz5/COW-Mec
+ mount -t overlayfs -o rw,lowerdir=/tmp/TEST-sz5/ROOT-RO-
kei,upperdir=/tmp/TEST-sz5/COW-Mec overlayfs /tmp/TEST-sz5/ROOT-S1M
mount: block device overlayfs is write-protected, mounting read-only
(warning, return code 0)
 
+ mount -o remount,rw /tmp/TEST-sz5/ROOT-S1M
mount: cannot remount block device overlayfs read-write, is write-protected
(error, rc 32)

+ mount -l
overlayfs on /tmp/TEST-sz5/ROOT-S1M type overlayfs (ro,

but now, after appliying the last patch, the behaviour is very confused:
- there is no warning message when mounting overlayfs rw on a ro upperdir
- /proc/mounts shows overlayfs as a rw fs while really it is ro

+ mount -l
...
tmpfs on /tmp/TEST-Eo7/COW-uYW type tmpfs (ro)
overlayfs on /tmp/TEST-Eo7/ROOT-dAb type overlayfs (rw,lowerdir=/tmp/TEST-
Eo7/ROOT-RO-TfK,upperdir=/tmp/TEST-Eo7/ROOT-RO-TfK,upperdir=/tmp/TEST-Eo7/COW-
uYW)
+ mount -o remount,rw /tmp/TEST-Eo7/ROOT-dAb
mount: cannot remount block device overlayfs read-write, is write-protected

Sincerely, the previous behaviour was better,

Thanks,

Jordi Pujol

Live never ending Tale
GNU/Linux Live forever!
http://livenet.selfip.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-06-10  6:47 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-03 13:29 overlayfs: mounting overlayfs on top of overlayfs Jordi Pujol
2011-06-04  6:23 ` Jordi Pujol
2011-06-06 18:29   ` Jordi Pujol
2011-06-07  8:08     ` Miklos Szeredi
2011-06-07 13:00       ` Jordi Pujol
2011-06-08 15:06         ` Miklos Szeredi
2011-06-10  6:46           ` Jordi Pujol

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.