如何删除具有多个btrfs子卷的目录?


9

我的根文件系统在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个问题:

  1. -o选项有什么作用?

  2. 我如何仅在下面列出子卷 /chroot

  3. 如何删除子卷数未知的目录?

我正在运行带有4.2.5内核和btrfs-progs v4.3.1的Arch Linux


您正在运行什么内核以及已经安装了什么版本的btrfs工具?这可能是工具中的错误。
大卫·金

@DavidKing参见编辑。我正在运行一个相当新的内核和btrfs-progs。
StrongBad 2015年

我会向btrfs提交错误报告。同时,您可以通过管道传输目录列表grep chroot吗?
戴维·金

Answers:


2

以下命令删除/chroot目录中的所有子卷:

ls /chroot | xargs btrfs subvolume delete

如果存在不属于btrfs子卷的文件或目录,将打印错误,但不会将其删除。

(已在Debian上使用4.6.0内核和btrfs-progs v3.17进行测试)


0

要回答第三个问题,可以使用btrfs-rm

我在运行于btrfs的docker安装中使用它,以定期清理整个docker目录。使用后果自负,但对我有效(TM)。

sudo ./btrfs-rm  /var/lib/docker/*   # create clean empty dir for docker

下载:https : //github.com/DirkTheDaring/btrfs-rm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.