Apakah ada cara mudah untuk mendapatkan informasi tentang semua subvolume sistem file btrfs tanpa menggunakan C, yaitu dalam shell POSIX ?
/sys/fs/btrfs
hanya berisi info tentang filesystem, tidak ada pada subvolume, jadi saat ini saya akhirnya memasang semua filesystem di folder temp, memindai dengan btrfs subvol list
, lalu menguraikan output yang dihasilkan. Tak perlu dikatakan, itu cukup jelek.
Ini dengan kernel 3.16.x dan btrfs-progs v3.14.1 (dari stok Ubuntu 14.10).
Di bawah ini adalah skrip (jelek) yang saya gunakan saat ini. Saya tahu saya bisa mendapatkan info yang saya butuhkan menggunakan C murni, dan mungkin itulah yang akhirnya saya lakukan, tetapi saya bertanya-tanya apakah ada cara yang lebih sederhana, lebih elegan.
#!/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
Jawaban:
/sys/fs/btrfs
tidak mencantumkan semua sistem file btrfs (mis. tidak dipasang satu), diuji pada Debian / Ubuntu (4.14.0-1 / 4.10.0-42).Saya akan menggunakan prog btrfs untuk mencari mereka:
Dan karena prog btrfs dapat mendaftar hanya subvolume dari fs yang dipasang, skrip Anda tidak jauh dari apa yang akan saya gunakan:
Tidak diuji terhadap sistem file multi-perangkat (raid-0/1/10/5/6)
sumber