Wie lösche ich ein Verzeichnis mit mehreren btrfs-Subvolumes?

9

Mein Root-Dateisystem befindet sich auf einer btrfs-Partition. Mein /chrootVerzeichnis enthält eine Reihe von btrfs-Subvolumes, mit denen ich es nicht löschen kann rm -rf /chroot. Bei dem Versuch, alle Subvolumes zu löschen, habe ich versucht, nur die Subvolumes unten aufzulisten, indem ich /chrootdas verwendete -o, auf dem in der Manpage "Nur Subvolumes unter dem angegebenen Pfad drucken" steht.

# 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

Zu meiner Überraschung gibt dies das Subvolumen in / var / lib / macines zurück (das ich nicht löschen möchte). Dies führt mich zu 3 Fragen:

  1. Was macht die -oOption?

  2. Wie liste ich unten nur Subvolumes auf? /chroot

  3. Wie kann ich ein Verzeichnis mit einer unbekannten Anzahl von Subvolumes löschen?

Ich verwende Arch Linux mit dem 4.2.5-Kernel und btrfs-progs v4.3.1

StrongBad
quelle
Welchen Kernel führen Sie aus und welche Version der btrfs-Tools haben Sie installiert? Dies ist wahrscheinlich ein Fehler in den Tools.
David King
@ DavidKing siehe bearbeiten. Ich verwende einen ziemlich neuen Kernel und btrfs-progs.
StrongBad
Ich würde einen Fehlerbericht bei btrfs einreichen. Könnten Sie in der Zwischenzeit die Liste der Verzeichnisse durchpfeifen grep chroot?
David King

Antworten:

2

Der folgende Befehl entfernt alle Subvolumes im /chrootVerzeichnis:

ls /chroot | xargs btrfs subvolume delete

Falls Dateien oder Verzeichnisse vorhanden sind, für die keine btrfs-Subvolumes vorhanden sind, wird ein Fehler gedruckt, die jedoch nicht entfernt werden.

(Getestet auf Debian mit dem 4.6.0 Kernel und btrfs-progs v3.17)

Bram
quelle
0

Um Ihre dritte Frage zu beantworten, können Sie btrfs-rm verwenden .

Ich verwende es in einer Docker-Installation, die auf btrfs ausgeführt wird, um das gesamte Docker-Verzeichnis regelmäßig zu bereinigen. Die Verwendung erfolgt auf eigenes Risiko, funktioniert aber für mich (TM).

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

Download: https://github.com/DirkTheDaring/btrfs-rm

Mandragor
quelle