私のルートファイルシステムはbtrfsパーティションにあります。私のディレクトリ/chroot
にbtrfsサブボリュームが多いため、使用できませんrm -rf /chroot
。すべてのサブボリュームを削除するには、/chroot
以下のサブボリュームのみをリストしてみました-o
。マニュアルページには、「指定されたパスの下のサブボリュームのみを印刷する」と記載されています。
# btrfs subvolume list -o /chroot
ID 593 gen 6616 top level 5 path chroot/base-devel/root
ID 594 gen 6618 top level 5 path chroot/multilib-devel/root
ID 595 gen 6620 top level 5 path chroot/base/root
ID 597 gen 6624 top level 5 path chroot/twm/root
ID 599 gen 6628 top level 5 path chroot/lxde/root
ID 601 gen 6655 top level 5 path chroot/wheezy/root
ID 602 gen 6684 top level 5 path chroot/sid/root
ID 603 gen 6862 top level 5 path var/lib/machines
驚くべきことに、これは/var/lib/macines(削除したくない)のサブボリュームを返します。これにより、3つの質問が発生します。
このオプションの
-o
機能は何ですか?下にサブボリュームのみをリストする方法
/chroot
サブボリュームの数が不明なディレクトリを削除する方法は?
私は4.2.5カーネルとbtrfs-progs v4.3.1がインストールされているArch Linuxを実行しています。
答え1
次のコマンドは、/chroot
ディレクトリ内のすべてのサブボリュームを削除します。
ls /chroot | xargs btrfs subvolume delete
btrfsサブボリュームの一部ではないファイルまたはディレクトリがある場合、エラーは印刷されますが削除されません。
(4.6.0カーネルとbtrfs-progs v3.17を使用してDebianでテスト済み)
答え2
btrfs subvolume delete <path>
サポートされるパスワイルドカード。
たとえば、スナップショットを作成するサブボリュームがあり、各スナップショットは独自のサブボリュームです。 (つまり、/mnt/newDrive/.snapshots/1/snapshot/new_subvol
独自のサブボリューム):
user@machine:/mnt/newDrive/.snapshots$ tree
.
├── 1
│ ├── info.xml
│ └── snapshot
│ └── new_subvol
├── 104
│ ├── info.xml
│ └── snapshot
│ └── new_subvol
├── 111
│ ├── info.xml
│ └── snapshot
│ └── new_subvol
これらすべてのサブボリュームを削除するには、私がすべきことは次のとおりです。
sudo btrfs subvolume delete /mnt/newDrive/.snapshots/*/snapshot/new_subvol
その後、すべてのサブボリュームが消えて簡単に/mnt/newDrive/.snapshots
削除できます。
rm -rf /mnt/newDrive/.snapshots
役に立ったことを願っています!
答え3
3番目の質問に答えるには、次のものを使用できます。btrfs-rm。
docker ディレクトリ全体を定期的にクリーンアップするために、btrfs で実行される docker インストールでこれを使用します。使用によるリスクは本人負担ですが、私には効果があります(TM)。
sudo ./btrfs-rm /var/lib/docker/* # create clean empty dir for docker