以下のように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つのツールを介して渡します。最初のツールはパスのリストを階層的にインデントされたテキストに変換し、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
AND)を変更してください。-f9