diff -urN old/etc/initrd.scripts new/etc/initrd.scripts --- old/etc/initrd.scripts 2022-08-28 23:56:02.769909400 +0000 +++ new/etc/initrd.scripts 2022-08-28 23:53:32.146581030 +0000 @@ -326,6 +326,22 @@ findmediamount "cdrom" "${SUBDIR}/${CDROOT_MARKER}" \ "REAL_ROOT" "${CDROOT_PATH}" ${DEVICES} + if [ -n "${overlayfs_persist_dev}" ]; then + persist_dev=/mnt/persist + 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} + else + persist_dev=/mnt/persist + mkdir "${persist_dev}" + findmediamount "persist" "${overlayfs_persist}" \ + "PERSIST" "${persist_dev}" ${DEVICES} + fi + fi + if [ "${VERIFY}" = '1' ] then cd "${CDROOT_PATH}" @@ -408,6 +424,19 @@ run rm -rf ${NEW_ROOT}/mnt/image.* 2>/dev/null run rm -rf ${NEW_ROOT}/mnt/zisofs 2>/dev/null fi + if [ -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=/mnt + fi + fi fi fi } @@ -818,6 +847,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 @@ -832,17 +862,29 @@ mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOPEXT}${LOOP}" "${static}" mount -t tmpfs none "${overlay}" - mkdir "${upperdir}" "${workdir}" + mkdir "${upperdir}" "${workdir}" "${persist}" + + if [ -n "${overlayfs_persist}" ]; then + if ([ -n "${overlayfs_persist_dev}" ] || [ -n "${persist_dev}" ]) && [ -f "${persist_dev}/${overlayfs_persist}" ]; then + persist_path="${persist_dev}/${overlayfs_persist}" + elif [ -n "${ISOBOOT}" ] && [ -f "/mnt/iso/${overlayfs_persist}" ]; then + persist_path="/mnt/iso/${overlayfs_persist}" + fi + + if [ -n "${persist_path}" ]; then + mount -t squashfs -o loop,ro "${persist_path}" "${persist}" + fi + 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/init new/init --- old/init 2022-08-28 23:56:02.809909399 +0000 +++ new/init 2022-08-28 23:24:15.689972277 +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#*=}