diff -urN old/defaults/initrd.scripts new/defaults/initrd.scripts --- old/defaults/initrd.scripts 2022-08-29 02:54:00.979978613 +0000 +++ new/defaults/initrd.scripts 2022-08-29 03:13:30.209940026 +0000 @@ -326,6 +326,24 @@ findmediamount "cdrom" "${SUBDIR}/${CDROOT_MARKER}" \ "REAL_ROOT" "${CDROOT_PATH}" ${DEVICES} + if [ -n "${overlayfs_persist_dev}" ]; then + persist_dev=/mnt/persist_dev + mkdir "${persist_dev}" + findmediamount "persist" "${overlayfs_persist}" \ + "PERSIST" "${persist_dev}" ${overlayfs_persist_dev} + elif [ -n "${overlayfs_persist}" ]; then + if [ -f "${CDROOT_PATH}/${overlayfs_persist}" ]; then + persist_dev=${CDROOT_PATH} + elif [ -n "${ISOBOOT}" ] && [ -f "/mnt/iso/${overlayfs_persist}" ]; then + persist_dev=/mnt/iso + else + persist_dev=/mnt/persist_dev + mkdir "${persist_dev}" + findmediamount "persist" "${overlayfs_persist}" \ + "PERSIST" "${persist_dev}" ${DEVICES} + fi + fi + if [ "${VERIFY}" = '1' ] then cd "${CDROOT_PATH}" @@ -407,6 +425,18 @@ run rm -rf ${NEW_ROOT}/mnt/livecd.* 2>/dev/null run rm -rf ${NEW_ROOT}/mnt/image.* 2>/dev/null run rm -rf ${NEW_ROOT}/mnt/zisofs 2>/dev/null + elif [ -n "${overlayfs_persist}" ] && [ -n "${persist_dev}" ]; then + good_msg "Copying persist file for caching ..." + # Verify that the needed directory exists + run mkdir -p "$(dirname ${NEW_ROOT}/mnt/${overlayfs_persist})" + run cp -a ${persist_dev}/${overlayfs_persist} ${NEW_ROOT}/mnt/${overlayfs_persist} + if [ $? -ne 0 ] + then + warn_msg "Failed to cache the persist file! Lack of RAM?" 0 + run rm -rf ${NEW_ROOT}/mnt/${overlayfs_persist} 2>/dev/null + else + persist_dev=${NEW_ROOT}/mnt + fi fi fi fi @@ -818,6 +848,7 @@ local overlay=/mnt/overlay local upperdir="${overlay}/.upper" local workdir="${overlay}/.work" + local persist="${overlay}/.persist" local static=/mnt/livecd run_debug_shell overlayfs @@ -830,19 +861,27 @@ run modprobe overlay >/dev/null 2>&1 checkfs overlay - mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOPEXT}${LOOP}" "${static}" + if [ -f "${NEW_ROOT}/mnt/${LOOP}" ]; then + mount -t squashfs -o loop,ro "${NEW_ROOT}/mnt/${LOOP}" "${static}" + else + mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOPEXT}${LOOP}" "${static}" + fi mount -t tmpfs none "${overlay}" - mkdir "${upperdir}" "${workdir}" + mkdir "${upperdir}" "${workdir}" "${persist}" + + if [ -n "${overlayfs_persist}" ] && [ -n "${persist_dev}" ] && [ -f "${persist_dev}/${overlayfs_persist}" ]; then + mount -t squashfs -o loop,ro "${persist_dev}/${overlayfs_persist}" "${persist}" + fi is_union_modules overlayfs - run mount -t overlay overlay -o lowerdir="${static}${mod_path}",upperdir="${upperdir}",workdir="${workdir}" "${NEW_ROOT}" + run mount -t overlay overlay -o lowerdir="${persist}:${static}${mod_path}",upperdir="${upperdir}",workdir="${workdir}" "${NEW_ROOT}" [ ! -d "${NEW_ROOT}${overlay}" ] && mkdir -p "${NEW_ROOT}${overlay}" [ ! -d "${NEW_ROOT}${static}" ] && mkdir -p "${NEW_ROOT}${static}" - echo "overlay / overlay defaults 0 0" > "${NEW_ROOT}"/etc/fstab + [ ! -f ${persist}/etc/fstab ] && echo "overlay / overlay defaults 0 0" > "${NEW_ROOT}"/etc/fstab - for i in "${overlay}" "${static}" + for i in "${overlay}" "${static}" "${persist}" do run mount --bind "${i}" "${NEW_ROOT}${i}" done diff -urN old/defaults/linuxrc new/defaults/linuxrc --- old/defaults/linuxrc 2022-08-29 02:54:01.016645277 +0000 +++ new/defaults/linuxrc 2022-08-29 02:54:06.929978416 +0000 @@ -429,6 +429,13 @@ overlayfs_dev=${x#*=} fi ;; + # Allow user to specify persistent image on top of image.squashfs + overlayfs_persist\=*) + overlayfs_persist=${x#*=} + ;; + overlayfs_persist_dev\=*) + overlayfs_persist_dev=${x#*=} + ;; # Allow user to specify the modules location overlayfs.modules\=*) overlayfs_modules_dir=${x#*=}