#!/bin/sh [ "$(id -u)" = 0 ] || exec sudo "$0" "$@" btrfs_truncate() { btrfs filesystem show --raw "$1" | while read devid d size s used u path p do [ "$devid $size $used $path" = 'devid size used path' ] || continue case "$p" in /dev/loop*) dev=$(losetup -n -l -O back-file "$p") ;; *) dev=$p ;; esac if [ -f "$dev" ] then [ "$s" = "$(stat -c %s "$dev")" ] || truncate -s "$s" "$dev" || break fi done } if [ $# = 0 ] then echo 'Usage: $0 [...]' >&2 exit 1 fi for fs do btrfs_truncate "$fs" || exit done