dsnap-sync: inculde btrfs quota check
* get size of snapshot from 'btrfs qgroup show' function * precise size information needs sync, which can take a while but is far cheeper then du --sum on big subvolume Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
@@ -178,7 +178,10 @@ create_snapshot () {
|
|||||||
fi
|
fi
|
||||||
snapper_source_snapshot=$SUBVOLUME/.snapshots/$snapper_source_id/snapshot
|
snapper_source_snapshot=$SUBVOLUME/.snapshots/$snapper_source_id/snapshot
|
||||||
snapper_source_info=$SUBVOLUME/.snapshots/$snapper_source_id/info.xml
|
snapper_source_info=$SUBVOLUME/.snapshots/$snapper_source_id/info.xml
|
||||||
|
|
||||||
|
btrfs quota enable $snapper_source_snapshot
|
||||||
sync
|
sync
|
||||||
|
|
||||||
if [ $verbose -ge 3 ]; then
|
if [ $verbose -ge 3 ]; then
|
||||||
printf "${MAGENTA}Snapper source snapshot ${GREEN}'%s'${MAGENTA} created${NO_COLOR}\n" "$snapper_source_id"
|
printf "${MAGENTA}Snapper source snapshot ${GREEN}'%s'${MAGENTA} created${NO_COLOR}\n" "$snapper_source_id"
|
||||||
fi
|
fi
|
||||||
@@ -1156,9 +1159,57 @@ run_backup () {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# TODO: to report correct values btrfs-quota must be activated for the source subvol!
|
# report correct subvolume size via btrfs quota
|
||||||
snapper_source_snapshot_size=$(du --sum $snapper_source_snapshot 2>/dev/null | awk -F ' ' '{print $1}')
|
if [ $verbose -ge 2 ]; then
|
||||||
snapper_source_snapshot_size=$(($snapper_source_snapshot_size / 1024 / 1024))G
|
printf "${MAGENTA}Get size for given source snapshot (id=${GREEN}'%s'${MAGENTA}, path=${GREEN}'%s'${MAGENTA})${NO_COLOR} ...\n" \
|
||||||
|
"$snapper_source_id" "$snapper_source_snapshot"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmd=$(eval btrfs qgroup show -f --raw $snapper_source_snapshot 2>/dev/null | grep -q 'quotas not enabled')
|
||||||
|
if [ $verbose -ge 3 ]; then
|
||||||
|
printf "${MAGENTA}BTRFS qgroiup show result: ${GREEN}'%s', '%s'${NO_COLOR}\n" \
|
||||||
|
"$?" "$cmd"
|
||||||
|
fi
|
||||||
|
#if [ $? -eq 1 ]; then
|
||||||
|
# subvolume is not configured for quota, (temporary?) enable that
|
||||||
|
#btrfs_quota_tmp=1
|
||||||
|
#btrfs quota enable $snapper_source_snapshot 2>/dev/null
|
||||||
|
#btrfs quota rescan -w $snapper_source_snapshot 2>/dev/null
|
||||||
|
# TODO: until a rescan is not completed, given feedback is not precisely correct
|
||||||
|
# do we accept to wait?
|
||||||
|
#cmd=$(btrfs qgroup show --sync -f --gbytes $snapper_source_snapshot 2>/dev/null
|
||||||
|
# | grep -q -e "rescan is running" -e "data inconsistent")
|
||||||
|
#$(eval $cmd)
|
||||||
|
#if [ $? -eq 1 ]; then
|
||||||
|
# if [ $verbose -ge 3 ]; then
|
||||||
|
# printf "${RED}WIP:${NO_COLOR} Quota was disabled. Waiting for rescan to finish ...\n"
|
||||||
|
# fi
|
||||||
|
# while true; do
|
||||||
|
# sleep 2
|
||||||
|
# $(eval $cmd)
|
||||||
|
# if [ $? -eq 0 ]; then
|
||||||
|
# break
|
||||||
|
# fi
|
||||||
|
# done
|
||||||
|
#fi
|
||||||
|
#fi
|
||||||
|
|
||||||
|
# qgroup for given path, exclude ancestrals
|
||||||
|
# qgroup identifiers conform to level/id where level 0 is reserved to the qgroups associated with subvolumes
|
||||||
|
# need to substitue btrfs 'GiB' suffix, since pv will need 'G'
|
||||||
|
snapper_source_snapshot_size=$(eval btrfs qgroup show -f --gbytes $snapper_source_snapshot 2>/dev/null \
|
||||||
|
| awk 'FNR>2 { gsub(/.[0-9][0-9]GiB/,"G"); print $2}')
|
||||||
|
if [ $verbose -ge 2 ]; then
|
||||||
|
printf "${MAGENTA}BTRFS quota size for ${GREEN}source snapshot${MAGENTA}: id=${GREEN}'%s'${MAGENTA}, size=${GREEN}'%s'${NO_COLOR} ...\n" \
|
||||||
|
"$snapper_source_id" "$snapper_source_snapshot_size"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# should we disable quota usage again?
|
||||||
|
#if [ $btrfs_quota_tmp -eq 1 ]; then btrfs quota disable $snapper_source_snapshot; fi
|
||||||
|
|
||||||
|
#snapper_source_snapshot_size=$(du --sum $snapper_source_snapshot 2>/dev/null \
|
||||||
|
# | awk -F ' ' '{print $1}')
|
||||||
|
#snapper_source_snapshot_size=$(($snapper_source_snapshot_size / 1024 / 1024))G
|
||||||
|
|
||||||
# settings for interactive progress status
|
# settings for interactive progress status
|
||||||
if [ $do_pv_cmd -eq 1 ]; then
|
if [ $do_pv_cmd -eq 1 ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user