important fix
authorIan Kelling <ian@iankelling.org>
Wed, 26 Jul 2023 01:36:25 +0000 (21:36 -0400)
committerIan Kelling <ian@iankelling.org>
Wed, 26 Jul 2023 01:36:25 +0000 (21:36 -0400)
mount-latest-subvol

index 0e456a2407728610c3b77ad40af8572b4b85781e..3844e7279e488d33d8f479820650a9c4c2bb895a 100644 (file)
@@ -385,50 +385,51 @@ for vol in ${all_vols[@]}; do
   if [[ -e $vol  ]]; then
     if [[ $vol == qd ]]; then
       m btrfs sub del qd
-    fi
-    leaf=$vol.leaf.$(date +%Y-%m-%dT%H:%M:%S%z)
-    m mv $vol $leaf
-    m btrfs property set -ts $leaf ro true
-
-    ### begin check if leaf is different, delete it if not ###
-    parentid=$(btrfs sub show $leaf | awk '$1 == "Parent" && $2 == "UUID:" {print $3}')
-    bsubs=(btrbk/$vol.*)
-    bsub= # base subvolume
-    # go in reverse order as its more likely to be at the end
-    for ((i=${#bsubs[@]}-1; i>=0; i--)); do
-      if [[ $parentid == $(btrfs sub show ${bsubs[i]} | awk '$1 == "UUID:" {print $2}') ]]; then
-        bsub=${bsubs[i]}
-        break
-      fi
-    done
-    if [[ $bsub ]]; then
-      # in testing, same subvol is 136 bytes. allow some overhead. 32 happens sometimes under systemd.
-      # $ errno 32
-      # EPIPE 32 Broken pipe
-      lines=$(btrfs send --no-data -p $bsub $leaf | btrfs receive --dump | head -n 100 | wc -l || [[ $? == 141 || ${PIPESTATUS[0]} == 32 ]])
-      if [[ $lines == 0 ]]; then
-        # example output of no differences:
-        # snapshot        ./qrtest                        uuid=c41ff6b7-0527-f34d-95ac-190eecf54ff5 transid=2239 parent_uuid=64949e1b-4a3e-3945-9a8e-cd7b7c15d7d6 parent_transid=2239
-        echo suspected identical: $bsub $leaf
-        x btrfs sub del $leaf
+    else
+      leaf=$vol.leaf.$(date +%Y-%m-%dT%H:%M:%S%z)
+      m mv $vol $leaf
+      m btrfs property set -ts $leaf ro true
+
+      ### begin check if leaf is different, delete it if not ###
+      parentid=$(btrfs sub show $leaf | awk '$1 == "Parent" && $2 == "UUID:" {print $3}')
+      bsubs=(btrbk/$vol.*)
+      bsub= # base subvolume
+      # go in reverse order as its more likely to be at the end
+      for ((i=${#bsubs[@]}-1; i>=0; i--)); do
+        if [[ $parentid == $(btrfs sub show ${bsubs[i]} | awk '$1 == "UUID:" {print $2}') ]]; then
+          bsub=${bsubs[i]}
+          break
+        fi
+      done
+      if [[ $bsub ]]; then
+        # in testing, same subvol is 136 bytes. allow some overhead. 32 happens sometimes under systemd.
+        # $ errno 32
+        # EPIPE 32 Broken pipe
+        lines=$(btrfs send --no-data -p $bsub $leaf | btrfs receive --dump | head -n 100 | wc -l || [[ $? == 141 || ${PIPESTATUS[0]} == 32 ]])
+        if [[ $lines == 0 ]]; then
+          # example output of no differences:
+          # snapshot        ./qrtest                        uuid=c41ff6b7-0527-f34d-95ac-190eecf54ff5 transid=2239 parent_uuid=64949e1b-4a3e-3945-9a8e-cd7b7c15d7d6 parent_transid=2239
+          echo suspected identical: $bsub $leaf
+          x btrfs sub del $leaf
+        fi
       fi
+      ### end check if leaf is different, delete it if not ###
+
+      ## begin expire leaf vols ##
+      leaf_vols=($vol.leaf.*)
+      count=${#leaf_vols[@]}
+      leaf_limit_time=$(( EPOCHSECONDS - 60*60*24*60 )) # 60 days
+      leaf_new_limit_time=$(( EPOCHSECONDS - 60*60*24 * 5 )) # 5 days this
+      # goes backwards from oldest. leaf_new_limit_time is a safety
+      # measure to ensure we don't delete very recent leafs.
+      for leaf in ${leaf_vols[@]}; do
+        leaf_time=$(date -d ${leaf#"$vol".leaf.} +%s)
+        if (( leaf_limit_time > leaf_time || ( leaf_new_limit_time > leaf_time && count > 30 ) )); then
+          x btrfs sub del $leaf
+        fi
+        count=$((count-1))
+      done
     fi
-    ### end check if leaf is different, delete it if not ###
-
-    ## begin expire leaf vols ##
-    leaf_vols=($vol.leaf.*)
-    count=${#leaf_vols[@]}
-    leaf_limit_time=$(( EPOCHSECONDS - 60*60*24*60 )) # 60 days
-    leaf_new_limit_time=$(( EPOCHSECONDS - 60*60*24 * 5 )) # 5 days this
-    # goes backwards from oldest. leaf_new_limit_time is a safety
-    # measure to ensure we don't delete very recent leafs.
-    for leaf in ${leaf_vols[@]}; do
-      leaf_time=$(date -d ${leaf#"$vol".leaf.} +%s)
-      if (( leaf_limit_time > leaf_time || ( leaf_new_limit_time > leaf_time && count > 30 ) )); then
-        x btrfs sub del $leaf
-      fi
-      count=$((count-1))
-    done
     ## end expire leaf vols ##
   fi
   #### end dealing with leaf vols ####