X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=mount-latest-subvol;h=7a179c4fd604480b50af48136d81990a25cef69b;hb=9c77c557e60d21caceeef1e78e35b35ed968fca9;hp=93a085a8e20e764e85d43153480f1a58b924507d;hpb=103a2e153f844343c359882079936b2521c82f15;p=distro-setup diff --git a/mount-latest-subvol b/mount-latest-subvol index 93a085a..7a179c4 100644 --- a/mount-latest-subvol +++ b/mount-latest-subvol @@ -268,13 +268,6 @@ else do_o=false fi -if [[ $HOSTNAME == frodo ]]; then - fstab <=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 - tmp=$(mktemp) - # in testing, same subvol is 136 bytes. allow some overhead. 32 happens sometimes under systemd. - # $ errno 32 - # EPIPE 32 Broken pipe - btrfs send --no-data -p $bsub $leaf | head -c 1000 > $tmp || [[ $? == 141 || ${PIPESTATUS[0]} == 32 ]] - if (( $(stat -c%s $tmp) < 1000)); then - # example output for an empty diff: - # Found a valid Btrfs stream header, version 1 - # o.leaf.2019-05-15T14:00:50-0400;snapshot: uuid=ba045ea30737dd449003f1ee40ec12d0, ctrasid=109533, clone_uuid=3c7e3544e486834aa71d89e5b8f30056, clone_ctransid=109533 - lines=$(/a/opt/btrfs-snapshots-diff/btrfs-snapshots-diff.py -s -f $tmp | \ - grep -vxF "Found a valid Btrfs stream header, version 1" | \ - grep -cv "^[^;]*;snapshot: ") ||: - if [[ $lines == 0 ]]; then - # rotate in case we find a bug, weve got 2 old ones - tmpleaf=($vol.tmpleaf2.*) - if (( ${#tmpleaf[@]} )); then - x btrfs sub del ${tmpleaf[@]} - fi - tmpleaf=($vol.tmpleaf1.*) - if (( ${#tmpleaf[@]} )); then - x mv ${tmpleaf[0]} $vol.tmpleaf2.${tmpleaf[0]#$vol.tmpleaf1.} - fi - echo suspected identical: $bsub $leaf - x mv $leaf $vol.tmpleaf1.${leaf#$vol.leaf.} - fi - fi + 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 + tmp=$(mktemp) + # 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 ###