¿Hay alguna manera conveniente de obtener información sobre todos los subvolúmenes de sistemas de archivos btrfs sin recurrir a C, es decir, en el shell POSIX ?
/sys/fs/btrfs
contiene información solo sobre sistemas de archivos, nada sobre subvolúmenes, por lo que actualmente termino montando todos los sistemas de archivos en una carpeta temporal, escaneándolos btrfs subvol list
y luego analizando la salida resultante. No hace falta decir que eso es bastante feo.
Esto es con un kernel 3.16.x y btrfs-progs v3.14.1 (del stock Ubuntu 14.10).
A continuación se muestra el script (feo) que estoy usando actualmente. Sé que podría obtener la información que necesito usando C puro, y eso es probablemente lo que terminaré haciendo, pero me preguntaba si había una manera más simple y 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