/sys/fs/btrfs
não lista todo o sistema de arquivos btrfs (por exemplo, não montado), testado no Debian / Ubuntu (4.14.0-1 / 4.10.0-42).
Eu usaria o btrfs progs para pesquisá-los:
btrfs filesystem show | awk '/ path /{print $NF}'
E como os progs do btrfs podem listar subvolumes apenas de fs montados, seu script não está longe do que eu usaria:
#!/bin/bash
readarray -t btdev < <(sudo btrfs filesystem show | awk '/ path /{print $NF}' )
for i in "${btdev[@]}"; do
device="${i}"
mountpoint=/var/lib/btrfs/tmp/mnt/$(basename "$i")
[ -d "$mountpoint" ] || mkdir "$mountpoint"
grep -qs $mountpoint /proc/mounts
[ $? -ne 0 ] && mount -v "$device" "$mountpoint"
while read -r subvol; do
# whatever you want
done < <(btrfs subvolume list "$mountpoint")
umount $mountpoint
rmdir $mountpoint
done
Não testado em sistemas de arquivos de vários dispositivos (raid-0/1/10/5/6)