From 7ca06298bb35fb0b643861007aa435188dab0d14 Mon Sep 17 00:00:00 2001 From: BodgeMaster <> Date: Thu, 29 Jun 2023 20:13:18 +0200 Subject: [PATCH] backup-fs: Deal with overlay showing up as multiple file systems Before, we would simply pass -one-file-system to mksquashfs, now we go through all mount points to generate a list of all directories to exclude and add the mount points as pseudo files to the squashfs. --- opt/backup-fs | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/opt/backup-fs b/opt/backup-fs index 88dbd3b..ddfe13e 100644 --- a/opt/backup-fs +++ b/opt/backup-fs @@ -27,14 +27,40 @@ function yesno { done } -#TODO: remove -bash -i < $TTY_OR_CONSOLE +# cutting off the leading slash allows us to just ignore empty lines below +readarray -t MOUNT_LIST <<< "$(findmnt --output TARGET --noheadings --raw | sed -e 's|^/||' | sort)" +# always ignore /tmp and the package cache +EXCLUDE_LIST=("tmp" "var/cache/xbps") + +for I in ${!MOUNT_LIST[@]}; do + if [ ! -z "${MOUNT_LIST[$I]}" ]; then + FOUND=0 + for J in ${!EXCLUDE_LIST[@]}; do + if grep "${EXCLUDE_LIST[$J]}" > /dev/null <<< "${MOUNT_LIST[$I]}"; then + FOUND=1 + break + fi + done + # if no parent dir of ${MOUNT_LIST[$I]} is found in $EXCLUDE_LIST + if [ $FOUND -eq 0 ]; then + EXCLUDE_LIST+=("${MOUNT_LIST[$I]}") + fi + fi +done + +touch /run/void-usb/backup-fs-excludes +touch /run/void-usb/backup-fs-pseudo +for I in ${!EXCLUDE_LIST[@]}; do + echo "/${EXCLUDE_LIST[$I]}" >> /run/void-usb/backup-fs-excludes + FILE_PERMS="$(stat -c '%a %u %g' "${EXCLUDE_LIST[$I]}")" + echo "\"/${EXCLUDE_LIST[$I]}\" d $FILE_PERMS" >> /run/void-usb/backup-fs-pseudo +done #TODO: refuse to run if system is running -#TODO: add a way to tell the system whether to back up before shutting down +#TODO: add a way to force backing up without asking (for example a file in /run/void-usb) -#TODO: colors +#TODO: colors (bright white / light gray for readability) echo "Back up system changes to disk? This only affects things outside the /home directory. @@ -43,9 +69,7 @@ Backing up the system will take some time. if yesno; then echo "Backing up..." - #TODO: fiddle with squashfs parameters to find optimal settings - #TODO: exclude /tmp - mksquashfs / /run/void-usb/container/new_squashfs.img -b 1M -comp xz -one-file-system -progress -noappend -e /var/cache/xbps + mksquashfs / /run/void-usb/container/new_squashfs.img -b 1M -comp xz -progress -noappend -pf /run/void-usb/backup-fs-pseudo -ef /run/void-usb/backup-fs-excludes #TODO: check if enough disk space # yes -> create new image next to old image # no -> create new image in RAM