셸의 모든 btrfs 파일 시스템 및 하위 볼륨 나열

셸의 모든 btrfs 파일 시스템 및 하위 볼륨 나열

모든 정보를 편리하게 얻을 수 있는 방법이 있나요?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/btrfsDebian/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)

관련 정보