C'è un modo conveniente per ottenere informazioni su tutti i sottovolumi dei filesystem btrfs senza ricorrere a C, cioè nella shell POSIX ?
/sys/fs/btrfs
contiene informazioni solo sui filesystem, niente sui sottovolumi, quindi attualmente finisco per montare tutti i filesystem in una cartella temporanea, scansionandoli con btrfs subvol list
, quindi analizzando l'output risultante. Inutile dire che è abbastanza brutto.
Questo è con un kernel 3.16.xe btrfs-progs v3.14.1 (dallo stock Ubuntu 14.10).
Di seguito è riportato lo (brutto) script che sto attualmente utilizzando. So che potrei ottenere le informazioni di cui ho bisogno usando la C pura, ed è probabilmente quello che finirò per fare, ma mi chiedevo se ci fosse un modo più semplice ed 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