Cに頼らずに、つまりPOSIXシェルで、すべてのbtrfsファイルシステムのサブボリュームに関する情報を取得する便利な方法はありますか?
/sys/fs/btrfs
ファイルシステムに関する情報のみが含まれ、サブボリュームには何も含まれないため、現在私はすべてのファイルシステムを一時フォルダーにマウントし、でスキャンして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