有没有办法制作如下所示的 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
)。