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
Odpowiedzi:
/sys/fs/btrfs
nie wyświetla wszystkich systemów plików btrfs (np. niezainstalowanych), przetestowanych na Debianie / Ubuntu (4.14.0-1 / 4.10.0-42).Używałbym progów btrfs do ich przeszukiwania:
A ponieważ programy btrfs mogą wyświetlać podobjętości tylko zamontowanych plików fs, twój skrypt nie jest daleki od tego, czego bym użył:
Nie testowano na systemie plików z wieloma urządzeniami (raid-0/1/10/5/6)
źródło