Existe uma maneira conveniente de obter informações sobre todos os subvolumes do sistema de arquivos btrfs sem recorrer ao C, ou seja, no shell POSIX ?
/sys/fs/btrfs
contém informações apenas em sistemas de arquivos, nada em subvolumes, então, atualmente, acabo montando todos os sistemas de arquivos em uma pasta temporária, digitalizando-os btrfs subvol list
e analisando a saída resultante. Escusado será dizer que isso é bastante feio.
Isso ocorre com o kernel 3.16.x e o btrfs-progs v3.14.1 (do Ubuntu 14.10).
Abaixo está o script (feio) que estou usando atualmente. Sei que poderia obter as informações necessárias usando C puro, e provavelmente é isso que acabarei fazendo, mas estava pensando se havia uma maneira mais simples e elegante.
#!/bin/bash
for i in /sys/fs/btrfs/*[!features]; do
device="/dev/$(basename $i/devices/*)"
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