btrfs 하위 볼륨 트리를 표시하는 방법은 무엇입니까?

btrfs 하위 볼륨 트리를 표시하는 방법은 무엇입니까?

아래와 같이 btrfs 하위 볼륨 트리를 만드는 방법이 있습니까? (하위 볼륨만 해당 - 일반 디렉터리나 파일은 제외됩니다.)

# tree /mnt/1
/mnt/1
├── a
├── snapshot
│   ├── a
│   └── subv
└── subv
    └── b

이 예제는 일반 디렉터리나 파일 없이 "샘플" btrfs에서 생성되었습니다.
tree <mountpoint>하위 볼륨뿐만 아니라 모든 디렉터리와 파일을 표시합니다. 이 옵션을 사용하면 -d디렉터리만 표시됩니다. 이 방법이 더 좋지만 하위 볼륨이 아닌 디렉터리도 계속 표시합니다.

따라서 설치된 시스템에서는 다음을 얻을 수 있습니다.

# tree /
/
├── bin -> usr/bin
├── boot
│   ├── grub
│   │   ├── fonts
│   │   │   └── unicode.pf2
│   │   ├── grub.cfg
│   │   ├── grub.cfg.example
│   │   ├── grubenv
│   │   ├── i386-pc
│   │   │   ├── 915resolution.mod
│   │   │   ├── acpi.mod
│   │   │   ├── adler32.mod
│   │   │   ├── affs.mod
... <over 242,000 lines snipped>

답변1

이 솔루션을 참조하세요. 명령에서 하위 볼륨 목록을 가져와 btrfs경로 열만 제거한 다음 2개의 도구를 통해 전달합니다. 첫 번째 도구는 경로 목록을 계층적으로 들여쓰기된 텍스트로 변환하고, 두 번째 도구는 들여쓰기된 위치에 ASCII 아트 트리를 추가합니다.

btrfs subvol list / | cut -f9 -d' ' | sed -e 's/^/ROOT\//' | paths2indent | indent2tree

여기에서 2개의 Perl 스크립트를 찾을 수 있습니다.경로 2 들여쓰기그리고들여쓰기 2 트리

하위 볼륨 목록의 예:

ID 1883 top level 5 path slash
ID 2004 top level 5 path logs
ID 2005 top level 5 path dbase
ID 2006 top level 5 path sdata
ID 2007 top level 5 path users
ID 2937 top level 5 path slash/snaps/by-procedure/quota-yazzy/users
ID 2938 top level 5 path slash/snaps/by-date/2019-11-21_0100/dbase
ID 2939 top level 5 path slash/snaps/by-date/2019-11-21_0100/slash
ID 2940 top level 5 path slash/snaps/by-date/2019-11-21_0100/logs
ID 2941 top level 5 path slash/snaps/by-date/2019-11-21_0100/sdata
ID 3004 top level 5 path slash/snaps/home/2019-12-04_0600

출력 예:

ROOT
├── dbase
├── slash
│   └── snaps
│       ├── by-procedure
│       │   └── quota
│       │       └── users
│       ├── by-date
│       │   └── 2019-11-21_0100
│       │       ├── dbase
│       │       ├── slash
│       │       ├── sdata
│       │       └── logs
│       └── home
│           └── 2019-12-04_0600
├── users
├── sdata
└── logs

편집하다: 최신 버전에서는 출력 형식이 다르므로 필요한 경우 cut필드 번호( -f7AND )를 변경하세요.-f9

관련 정보