Comment supprimer un répertoire avec plusieurs sous-volumes btrfs?

9

Mon système de fichiers racine se trouve sur une partition btrfs. Mon /chrootrépertoire contient un certain nombre de sous-volumes btrfs qui m'empêchent de le supprimer avec rm -rf /chroot. Dans une tentative de supprimer tous les sous-volumes, j'ai essayé de répertorier uniquement les sous-volumes ci-dessous /chrooten utilisant le -o, dont la page de manuel indique "imprimer uniquement les sous-volumes sous le chemin spécifié".

# 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

À ma grande surprise, cela renvoie le sous-volume dans / var / lib / macines (que je ne veux pas supprimer). Cela m'amène à 3 questions:

  1. Que fait l' -ooption?

  2. Comment répertorier uniquement les sous-volumes ci-dessous /chroot

  3. Comment supprimer un répertoire avec un nombre inconnu de sous-volumes?

J'utilise Arch Linux avec le noyau 4.2.5 et btrfs-progs v4.3.1

StrongBad
la source
Quel noyau utilisez-vous et quelle version des outils btrfs avez-vous installé? C'est probablement un bug dans les outils.
David King
@DavidKing voir modifier. J'utilise un noyau et des programmes btrfs assez récents.
StrongBad
Je déposerais un rapport de bogue avec btrfs. Dans l'intervalle, pourriez-vous diriger la liste des répertoires grep chroot?
David King

Réponses:

2

La commande suivante supprime tous les sous-volumes du /chrootrépertoire:

ls /chroot | xargs btrfs subvolume delete

Dans le cas où il y a des fichiers ou des répertoires qui ne sont pas des sous-volumes btrfs présents, une erreur sera imprimée, mais ils ne seront pas supprimés.

(Testé sur Debian avec le noyau 4.6.0 et btrfs-progs v3.17)

Bram
la source
0

Pour répondre à votre troisième question, vous pouvez utiliser btrfs-rm .

Je l'utilise sur une installation de docker fonctionnant sur btrfs, pour nettoyer régulièrement le répertoire docker entier. Utilisez à vos risques et périls, mais fonctionne pour moi (TM).

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

Téléchargement: https://github.com/DirkTheDaring/btrfs-rm

Mandragor
la source