From d5bb90f012c30a11cca1018b84a3b9d13d3faf59 Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 13 Aug 2026 16:03:19 +0200 Subject: [PATCH] fix: Disable COW for Virtual DSM boot image on Btrfs (#1376) --- src/install.sh | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index 2042b5a..a44b8e2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -178,8 +178,35 @@ createSystemImage() { return 67 fi - 7z x -y -o"$tmp" "$DSM_BOOT" >/dev/null || return $? - DSM_BOOT="${DSM_BOOT%.zip}" + local bootTmp="$tmp/boot" bootBase + bootBase="$(basename "${DSM_BOOT%.zip}")" + + rm -rf "$bootTmp" || return $? + + if ! makeDir "$bootTmp"; then + error "Failed to create directory \"$bootTmp\" !" + return 93 + fi + + if [[ "${fs,,}" == "btrfs" ]]; then + { chattr +C "$bootTmp"; } || : + fi + + 7z x -y -o"$bootTmp" "$DSM_BOOT" >/dev/null || return $? + DSM_BOOT="$bootTmp/$bootBase" + + if [ ! -s "$DSM_BOOT" ]; then + error "The PAT boot image could not be extracted." + return 67 + fi + + if [[ "${fs,,}" == "btrfs" ]]; then + local attrs + attrs=$(lsattr "$DSM_BOOT") || return $? + if [[ "$attrs" != *"C"* ]]; then + error "Failed to disable COW for boot image $DSM_BOOT on ${fs^^} filesystem." + fi + fi SYSTEM="$STORAGE/$BASE.system.img" rm -f "$SYSTEM" || return $?