모든 정보를 편리하게 얻을 수 있는 방법이 있나요?BTFS파일 시스템하위 볼륨C에 의지하지 않고, 즉POSIX 쉘?
/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
답변1
/sys/fs/btrfs
Debian/Ubuntu(4.14.0-1/4.10.0-42)에서 테스트된 모든 btrfs 파일 시스템은 나열되지 않았습니다(예: 마운트 해제된 파일 시스템).
btrfs progs를 사용하여 검색합니다.
btrfs filesystem show | awk '/ path /{print $NF}'
btrfs progs는 fs가 마운트된 하위 볼륨만 나열할 수 있으므로 귀하의 스크립트는 내가 사용하는 것과 크게 다르지 않습니다.
#!/bin/bash
readarray -t btdev < <(sudo btrfs filesystem show | awk '/ path /{print $NF}' )
for i in "${btdev[@]}"; do
device="${i}"
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
다중 장치 파일 시스템에 대해서는 테스트되지 않음(raid-0/1/10/5/6)