diff options
author | Andrew Cady <d@jerkface.net> | 2020-05-13 20:26:03 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2020-05-13 20:31:11 -0400 |
commit | 5da330114348948f3f3fe642a96e4d2b3eaa6cdb (patch) | |
tree | 8f1057c792b3b634b79dc25310850a8f63f23144 | |
parent | 3067270c0c60ab10b803cb57f4b170f42913dd9b (diff) |
new executable: btrfs-truncate
-rwxr-xr-x | src/btrfs-utils/btrfs-truncate | 32 |
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 | |||
4 | btrfs_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 | |||
23 | if [ $# = 0 ] | ||
24 | then | ||
25 | echo 'Usage: $0 <btrfs mountpoint> [...]' >&2 | ||
26 | exit 1 | ||
27 | fi | ||
28 | |||
29 | for fs | ||
30 | do | ||
31 | btrfs_truncate "$fs" || exit | ||
32 | done | ||