I have been doing this since Debian Squeeze with a patched 9990-misc-helpers in my live initrd. I can use (optionally) a single-partition live usb with RW access and a persistence file.
It is activated only if "mountmode=rw,noatime" is on cmdline. I never had any problem with this (although some use cases might) there fore it is not "default" I posted this here before but there was no positive interest. Anyway, here is my latest (done with diff -u) for live-boot_1:20160511
--- 9990-misc-helpers.sh.original 2016-05-11 14:44:15.000000000 +0100 +++ 9990-misc-helpers.sh 2016-05-13 14:12:33.948155440 +0100 @@ -2,6 +2,30 @@ #set -e +## Patched for version: live-boot-1:20160511 + +## New cmdline parameter " mountmode=rw" +## Overrides the live-media partition default RO mount +## +## Then the partition containing the live-media will be writable +## Persistent loopback files in the same partition should then work +## +## If " mountmode=rw" is not specified: +## No changes will be made to original defaults (ro,noatime) + +## PATCH (addition to support rw mount of live-media partition) ## + +if cat /proc/cmdline|grep -q "mountmode=rw" ; then + custom_mountmode=rw,noatime + echo -e "\n Custom mount options were selected" + echo -e " The live-media device will be mounted ${custom_mountmode} \n" + sleep 2 +# else live-media partition mount opts default to "ro,noatime" +fi + +## PATCH end ## + + is_live_path() { DIRECTORY="${1}/${LIVE_MEDIA_PATH}" @@ -126,6 +150,26 @@ then mkdir /live/fromiso mount -t $fs_type "$ISO_DEVICE" /live/fromiso + + +## PATCH (addition to support rw mount of live-media partition) ## + + ## custom_mountmode: if set, remount /live/fromiso + if [ -n "${custom_mountmode}" ]; then + + if [ "$fstype" = "vfat" ]; then + custom_mountopts=rw,noatime,umask=000 + else + custom_mountopts=${custom_mountmode} + fi + + umount /live/fromiso + mount -t ${fstype} -o ${custom_mountopts} "$ISO_DEVICE" /live/fromiso + + fi +## PATCH end + + ISO_NAME="$(echo $FROMISO | sed "s|$ISO_DEVICE||")" loopdevname=$(setup_loop "/live/fromiso/${ISO_NAME}" "loop" "/sys/block/loop*" "" '') devname="${loopdevname}" @@ -196,6 +240,26 @@ devuid=$(blkid -o value -s UUID "$devname") [ -n "$devuid" ] && grep -qs "\<$devuid\>" /var/lib/live/boot/devices-already-tried-to-mount && continue mount -t ${fstype} -o ro,noatime "${devname}" ${mountpoint} || continue + + +## PATCH (addition to support rw mount of live-media partition) ## + + ## custom_mountmode: if set, remount the live-media device + ## but only if is_live_path (we might be "findiso") + if is_live_path ${mountpoint} && [ -n "${custom_mountmode}" ]; then + + if [ "$fstype" = "vfat" ]; then + custom_mountopts=rw,noatime,umask=000 + else + custom_mountopts=${custom_mountmode} + fi + umount ${mountpoint} + mount -t ${fstype} -o ${custom_mountopts} "${devname}" ${mountpoint} || continue + fi + +## PATCH end + + [ -n "$devuid" ] && echo "$devuid" >> /var/lib/live/boot/devices-already-tried-to-mount if [ -n "${FINDISO}" ] @@ -205,6 +269,25 @@ umount ${mountpoint} mkdir -p /live/findiso mount -t ${fstype} -o ro,noatime "${devname}" /live/findiso + + +## PATCH (addition to support rw mount of live-media partition) ## + + ## custom_mountmode: if set, remount /live/findiso + if [ -n "${custom_mountmode}" ]; then + + if [ "$fstype" = "vfat" ]; then + custom_mountopts=rw,noatime,umask=000 + else + custom_mountopts=${custom_mountmode} + fi + + umount /live/findiso + mount -t ${fstype} -o ${custom_mountopts} "${devname}" /live/findiso || continue + fi +## PATCH end + + loopdevname=$(setup_loop "/live/findiso/${FINDISO}" "loop" "/sys/block/loop*" 0 "") devname="${loopdevname}" mount -t iso9660 -o ro,noatime "${devname}" ${mountpoint} @@ -719,6 +802,26 @@ mkdir -p "${backing}" old_backing="$(where_is_mounted ${device})" + + +## PATCH (addition to support rw mount of live-media partition) ## + + ## custom_mountmode: (only if) is set rw + ## set ${backing} and stop if live-media device is already mounted + ## + if [ -n "${custom_mountmode}" ]; then + + if [ "${old_backing}" = "/live/findiso" ] || [ "${old_backing}" = "/live/fromiso" ] || [ "${old_backing}" = "/live/medium" ] + then + backing=${old_backing} + echo ${backing} + return 0 + fi + fi + +## PATCH end + + if [ -z "${old_backing}" ] then fstype="$(get_fstype ${device})" @@ -1031,6 +1134,19 @@ black_listed_devices="${black_listed_devices} $(what_is_mounted_on d)" done + +## PATCH (addition to support rw mount of live-media partition) ## + + ## custom_mountmode: If used with persistence, unset black_listed_devices + ## persistence files in the live-media partition can then be used (but note warning above) + + if cat /proc/cmdline|grep -q " persistence" && [ -n "${custom_mountmode}" ]; then + black_listed_devices="" + fi + +## PATCH end + + for dev in $(storage_devices "${black_listed_devices}" "${white_listed_devices}") do local result luks_device