Czy istnieje wygodny sposób na uzyskanie informacji o wszystkich podwoluminach systemów plików btrfs bez uciekania się do C, tj. W powłoce POSIX ?
/sys/fs/btrfs
zawiera informacje tylko o systemach plików, nic o podwoluminach, więc obecnie kończę montowanie wszystkich systemów plików w folderze tymczasowym, skanowanie ich btrfs subvol list
, a następnie analizowanie wynikowego wyniku. Nie trzeba dodawać, że jest to dość brzydkie.
Dzieje się tak z jądrem 3.16.xi btrfs-progs v3.14.1 (z magazynu Ubuntu 14.10).
Poniżej znajduje się (brzydki) skrypt, którego aktualnie używam. Wiem, że mogę uzyskać informacje, których potrzebuję, używając czystego C, i prawdopodobnie tak właśnie skończę, ale zastanawiałem się, czy istnieje prostszy, bardziej elegancki sposób.
#!/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