diff --git a/src/disk.sh b/src/disk.sh index f699f81..4021cd0 100644 --- a/src/disk.sh +++ b/src/disk.sh @@ -261,7 +261,7 @@ convertDisk() { checkFS () { local DISK_FILE=$1 - local DIR FS FA + local DIR FS DIR=$(dirname "$DISK_FILE") [ ! -d "$DIR" ] && return 0 @@ -282,11 +282,15 @@ checkFS () { fi fi - if [ -f "$DISK_FILE" ] ; then - FA=$(lsattr "$DISK_FILE") - [[ "$FA" == *"C"* ]] && FA=$(lsattr -d "$DIR") - else + local FA="" + [ -f "$DISK_FILE" ] && FA=$(lsattr "$DISK_FILE") + + if [[ "$FA" == "" || "$FA" == *"C"* ]]; then FA=$(lsattr -d "$DIR") + if [[ "$FA" != *"C"* ]]; then + { chattr -R +C "$DIR"; } || : + FA=$(lsattr -d "$DIR") + fi fi if [[ "$FA" != *"C"* ]]; then diff --git a/src/install.sh b/src/install.sh index 3dae06d..cdf90e1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -54,9 +54,14 @@ FS=$(stat -f -c %T "$STORAGE") if [[ "$FS" == "overlay"* ]]; then info "Warning: the filesystem of $STORAGE is OverlayFS, this usually means it was binded to an invalid path!" fi + if [[ "$FS" == "xfs" || "$FS" == "zfs" || "$FS" == "btrfs" || "$FS" == "bcachefs" ]]; then FA=$(lsattr -d "$STORAGE") if [[ "$FA" != *"C"* ]]; then + { chattr -R +C "$STORAGE"; } || : + FA=$(lsattr -d "$STORAGE") + fi + if [[ "$FA" != *"C"* ]]; then info "Warning: the filesystem of $STORAGE is ${FS^^}, and COW (copy on write) is not disabled for that folder!" info "This will negatively affect performance, please empty the folder and disable COW (chattr +C )." fi