Existe-t-il un moyen pratique d'obtenir des informations sur tous les sous-volumes des systèmes de fichiers btrfs sans recourir au C, c'est-à-dire dans le shell POSIX ?
/sys/fs/btrfscontient des informations uniquement sur les systèmes de fichiers, rien sur les sous-volumes, donc actuellement je finis par monter tous les systèmes de fichiers dans un dossier temporaire, en les analysant avec btrfs subvol list, puis en analysant la sortie résultante. Inutile de dire que c'est assez moche.
C'est avec un noyau 3.16.x et btrfs-progs v3.14.1 (du stock Ubuntu 14.10).
Voici le script (moche) que j'utilise actuellement. Je sais que je pourrais obtenir les informations dont j'ai besoin en utilisant du C pur, et c'est probablement ce que je finirai par faire, mais je me demandais s'il y avait une manière plus simple et plus élégante.
#!/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