summaryrefslogtreecommitdiff
path: root/list-all-subvolumes
diff options
context:
space:
mode:
Diffstat (limited to 'list-all-subvolumes')
-rwxr-xr-xlist-all-subvolumes30
1 files changed, 30 insertions, 0 deletions
diff --git a/list-all-subvolumes b/list-all-subvolumes
new file mode 100755
index 0000000..89ffc15
--- /dev/null
+++ b/list-all-subvolumes
@@ -0,0 +1,30 @@
1#!/bin/bash
2set -e -o pipefail
3btrfs_subvolume_list_args=('-sr')
4btrfs_subvolume_list_args=('-a' "$@")
5
6list_all_subvolumes()
7{
8 for dev in $(list_btrfs)
9 do
10 [ -b "$dev" ] || return
11 d=/run/btrfs-temp-mount/$(systemd-escape "$dev")
12 (
13 mkdir -p "$d"
14 trap 'umount "$d"; rmdir "$d"' EXIT
15 set -x
16 mountpoint -q "$d" || mount -o ro,subvol=/ "$dev" "$d" || return
17 btrfs subvolume list "$@" "$d"
18 ) || return
19 done
20}
21
22list_btrfs()
23{
24 mount -t btrfs | while read
25 do
26 printf '%s\n' "${REPLY%% *}"
27 done | sort -u
28}
29
30list_all_subvolumes "${btrfs_subvolume_list_args[@]}"