Có cách nào thuận tiện để lấy thông tin về tất cả các subvolume của hệ thống tập tin btrfs mà không cần dùng đến C, tức là trong vỏ POSIX không?
/sys/fs/btrfs
chỉ chứa thông tin trên các hệ thống tệp, không có gì trên các tệp con, vì vậy hiện tại tôi kết thúc việc gắn tất cả các hệ thống tệp trong thư mục tạm thời, quét chúng btrfs subvol list
, sau đó phân tích kết quả đầu ra. Không cần phải nói, đó là khá xấu xí.
Đây là với kernel 3.16.x và btrfs-pross v3.14.1 (từ stock Ubuntu 14.10).
Dưới đây là tập lệnh (xấu) tôi hiện đang sử dụng. Tôi biết tôi có thể nhận được thông tin tôi cần bằng cách sử dụng C thuần túy và đó có lẽ là điều tôi sẽ làm, nhưng tôi tự hỏi liệu có cách nào đơn giản hơn, thanh lịch hơn không.
#!/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