如何显示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如果需要,请更改字段编号(-f7-f9)。

相关内容