¿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/btrfscontiene 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 listy 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

Respuestas:
/sys/fs/btrfsno enumera todos los sistemas de archivos btrfs (por ejemplo, uno no montado), probado en Debian / Ubuntu (4.14.0-1 / 4.10.0-42).Usaría btrfs progs para buscarlos:
Y dado que los programas btrfs pueden enumerar subvolúmenes solo de fs montados, su script no está lejos de lo que usaría:
No probado contra el sistema de archivos de múltiples dispositivos (raid-0/1/10/5/6)
fuente