Tüm btrfs dosya sistemleri alt birimleri hakkında C'ye başvurmadan, yani POSIX kabuğunda bilgi almanın uygun bir yolu var mı ?
/sys/fs/btrfs
yalnızca dosya sistemlerinde bilgi içerir, alt hacimlerde hiçbir şey yoktur, bu yüzden şu anda tüm dosya sistemlerini geçici bir klasöre bağlayarak, bunları tararken btrfs subvol list
, elde edilen çıktıyı ayrıştırır. Söylemeye gerek yok, bu oldukça çirkin.
Bu, 3.16.x çekirdeği ve btrfs-progs v3.14.1 (stok Ubuntu 14.10'dan ).
Aşağıda şu anda kullandığım (çirkin) komut dosyası var. Saf C kullanarak ihtiyacım olan bilgiyi alabileceğimi biliyorum ve muhtemelen bunu yapacağım, ama daha basit, daha zarif bir yol olup olmadığını merak ediyordum.
#!/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