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 ####