summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2020-05-13 20:26:03 -0400
committerAndrew Cady <d@jerkface.net>2020-05-13 20:31:11 -0400
commit5da330114348948f3f3fe642a96e4d2b3eaa6cdb (patch)
tree8f1057c792b3b634b79dc25310850a8f63f23144
parent3067270c0c60ab10b803cb57f4b170f42913dd9b (diff)
new executable: btrfs-truncate
-rwxr-xr-xsrc/btrfs-utils/btrfs-truncate32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/btrfs-utils/btrfs-truncate b/src/btrfs-utils/btrfs-truncate
new file mode 100755
index 0000000..0075844
--- /dev/null
+++ b/src/btrfs-utils/btrfs-truncate
@@ -0,0 +1,32 @@
1#!/bin/sh
2[ "$(id -u)" = 0 ] || exec sudo "$0" "$@"
3
4btrfs_truncate()
5{
6 btrfs filesystem show --raw "$1" |
7 while read devid d size s used u path p
8 do
9 [ "$devid $size $used $path" = 'devid size used path' ] || continue
10
11 case "$p" in
12 /dev/loop*) dev=$(losetup -n -l -O back-file "$p") ;;
13 *) dev=$p ;;
14 esac
15
16 if [ -f "$dev" ]
17 then
18 [ "$s" = "$(stat -c %s "$dev")" ] || truncate -s "$s" "$dev" || break
19 fi
20 done
21}
22
23if [ $# = 0 ]
24then
25 echo 'Usage: $0 <btrfs mountpoint> [...]' >&2
26 exit 1
27fi
28
29for fs
30do
31 btrfs_truncate "$fs" || exit
32done