live image: try to make a valid union mount
cover live image: try to make a valid union mount
From: Chen Qi <[email protected]>
This patchset cleans up the unionfs related code and tries to make a union mount with aufs or overlayfs.
The following changes since commit 042203531b10b37ac9a8201b376f5dec403e51d8:
sanity.bbclass: Fix COREBASE sanity tests (2013-06-27 12:48:56 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib ChenQi/live-image-union-mount
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/live-image-union-mount
Chen Qi (2):
initrdscripts: unionfs cleanup
init-live.sh: try to make a union mount when possible
meta/recipes-core/initrdscripts/files/init-live.sh | 71 ++++++++++++++------ .../initrdscripts/initramfs-live-boot_1.0.bb | 7 -- 2 files changed, 52 insertions(+), 26 deletions(-)
Signature · 1 line
1.7.9.5
PATCH 1/2 initrdscripts: unionfs cleanup
From: Chen Qi <[email protected]>
The unionfs has been disabled for more than a year and it's not going to be used any more.
This patch cleans up the unionfs related code.
[YOCTO #4761]
[YOCTO #1487]
--- meta/recipes-core/initrdscripts/files/init-live.sh | 22 +++----------------- .../initrdscripts/initramfs-live-boot_1.0.bb | 7 ------- 2 files changed, 3 insertions(+), 26 deletions(-)
meta/recipes-core/initrdscripts/files/init-live.sh +3 -19
@@ -7,7 +7,6 @@ ROOT_IMAGE="rootfs.img" MOUNT="/bin/mount" UMOUNT="/bin/umount" ISOLINUX="" -UNIONFS="no" # Copied from initramfs-framework. The core of this script probably should be # turned into initramfs-framework modules to reduce duplication.
@@ -140,25 +139,10 @@ case $label in boot) mkdir $ROOT_MOUNT mknod /dev/loop0 b 7 0 2>/dev/null - - - if [ "$UNIONFS" = "yes" ]; then - mkdir /rootfs-tmp - - if ! $MOUNT -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE /rootfs-tmp ; then - fatal "Could not mount rootfs image" - else - mkdir /cow - mount -t tmpfs -o rw,noatime,mode=755 tmpfs /cow - mount -t unionfs -o dirs=/cow:/rootfs-tmp=ro unionfs $ROOT_MOUNT - boot_live_root - fi + if ! $MOUNT -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then + fatal "Could not mount rootfs image" else - if ! $MOUNT -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then - fatal "Could not mount rootfs image" - else - boot_live_root - fi + boot_live_root fi ;; install|install-efi)
meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb +0 -7
@@ -7,13 +7,6 @@ SRC_URI = "file://init-live.sh" PR = "r11" -do_compile() { - #if grep -q "CONFIG_UNION_FS=y" ${STAGING_KERNEL_DIR}/.config; then - # sed -i 's/UNIONFS="no"/UNIONFS="yes"/g' ${WORKDIR}/init-live.sh - #fi - : -} - do_install() { install -m 0755 ${WORKDIR}/init-live.sh ${D}/init }
Signature · 1 line
1.7.9.5
PATCH 2/2 init-live.sh: try to make a union mount when possible
In reply to [email protected]From: Chen Qi <[email protected]>
This patch tries to make a union mount in live image. For example, if aufs is enabled with the aufs-enable.scc configuration fragment, the init-live.sh script will use aufs to make a union mount.
Although overlayfs is not supported by Yocto kernel yet, this patch still takes it into consideration with the expect that the related code should at least serve as a placeholder.
[YOCTO #1487]
[YOCTO #4761]
--- meta/recipes-core/initrdscripts/files/init-live.sh | 63 +++++++++++++++++--- 1 file changed, 56 insertions(+), 7 deletions(-)
meta/recipes-core/initrdscripts/files/init-live.sh +56 -7
@@ -135,15 +135,64 @@ do sleep 1 done +# Try to make a union mount of the root image. +# If no unification filesystem is available, mount the image read-only. +mount_and_boot() { + mkdir $ROOT_MOUNT + mknod /dev/loop0 b 7 0 2>/dev/null + + # determine which unification filesystem to use + union_fs_type="" + if grep -q -w "overlayfs" /proc/filesystems; then + union_fs_type="overlayfs" + elif grep -q -w "aufs" /proc/filesystems; then + union_fs_type="aufs" + else + union_fs_type="" + fi + + # make a union mount if possible + case $union_fs_type in + "overlayfs") + mkdir -p /rootfs.ro /rootfs.rw + if ! mount -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE /rootfs.ro; then + rm -rf /rootfs.ro /rootfs.rw + fatal "Could not mount rootfs image" + else + mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw + mount -t overlayfs -o "lowerdir=/rootfs.ro,upperdir=/rootfs.rw" overlayfs $ROOT_MOUNT + mkdir -p $ROOT_MOUNT/rootfs.ro $ROOT_MOUNT/rootfs.rw + mount --move /rootfs.ro $ROOT_MOUNT/rootfs.ro + mount --move /rootfs.rw $ROOT_MOUNT/rootfs.rw + fi + ;; + "aufs") + mkdir -p /rootfs.ro /rootfs.rw + if ! mount -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE /rootfs.ro; then + rm -rf /rootfs.ro /rootfs.rw + fatal "Could not mount rootfs image" + else + mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw + mount -t aufs -o "dirs=/rootfs.rw=rw:/rootfs.ro=ro" aufs $ROOT_MOUNT + mkdir -p $ROOT_MOUNT/rootfs.ro $ROOT_MOUNT/rootfs.rw + mount --move /rootfs.ro $ROOT_MOUNT/rootfs.ro + mount --move /rootfs.rw $ROOT_MOUNT/rootfs.rw + fi + ;; + "") + if ! mount -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then + fatal "Could not mount rootfs image" + fi + ;; + esac + + # boot the image + boot_live_root +} + case $label in boot) - mkdir $ROOT_MOUNT - mknod /dev/loop0 b 7 0 2>/dev/null - if ! $MOUNT -o rw,loop,noatime,nodiratime /media/$i/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then - fatal "Could not mount rootfs image" - else - boot_live_root - fi + mount_and_boot ;; install|install-efi) if [ -f /media/$i/$ISOLINUX/$ROOT_IMAGE ] ; then
Signature · 1 line
1.7.9.5