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

このソリューションを参照してください。コマンドからサブボリュームのリストを取得し、パス列のみを削除してから、btrfs2つのツールを介して渡します。最初のツールはパスのリストを階層的にインデントされたテキストに変換し、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

おすすめ記事