내 루트 파일 시스템은 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(삭제하고 싶지 않은)의 하위 볼륨을 반환합니다. 이로 인해 세 가지 질문이 발생합니다.
이 옵션의
-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
세 번째 질문에 답하려면 다음을 사용할 수 있습니다.btrfs-rm.
전체 docker 디렉토리를 주기적으로 정리하기 위해 btrfs에서 실행되는 docker 설치에서 이것을 사용합니다. 사용에 따른 위험은 본인 부담이지만 나에게는 효과가 있습니다(TM).
sudo ./btrfs-rm /var/lib/docker/* # create clean empty dir for docker