是否有一种便捷的方法来获取所有btrfs文件系统子卷上的信息而无需使用C,即在POSIX shell中?
/sys/fs/btrfs
仅包含有关文件系统的信息,不包含有关子卷的信息,因此当前我最终将所有文件系统装入temp文件夹,使用进行扫描btrfs subvol list
,然后解析结果输出。不用说,这很丑陋。
这是一个3.16.x内核和btrfs-progs v3.14.1(来自Ubuntu 14.10的现货)。
以下是我当前正在使用的(丑陋)脚本。我知道我可以使用纯C获得所需的信息,而这也许最终我会做的,但是我想知道是否有一种更简单,更优雅的方法。
#!/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
您最终为此编写了C程序吗?如果您愿意分享,我相信其他人会发现它很有用。
—
etskinner's