예를 들어, 아래와 같이 Btrfs Subvolume 이 있다고 가정해본다.
$ sudo btrfs sub list /mnt/@snapshots/ ID 260 gen 881 top level 5 path @home ID 261 gen 882 top level 5 path @var ID 262 gen 795 top level 5 path @opt ID 271 gen 856 top level 5 path @snapshots ID 273 gen 667 top level 271 path 2/snapshot ID 273 gen 668 top level 271 path 2/snapshot ID 274 gen 673 top level 271 path 3/snapshot ID 275 gen 689 top level 271 path 4/snapshot ID 277 gen 695 top level 271 path 5/snapshot ID 278 gen 882 top level 5 path @ ID 279 gen 707 top level 271 path 6/snapshot ID 280 gen 718 top level 271 path 7/snapshot ID 281 gen 719 top level 271 path 8/snapshot ID 282 gen 720 top level 271 path 9/snapshot ID 283 gen 723 top level 271 path 10/snapshot ID 284 gen 725 top level 271 path 11/snapshot ID 285 gen 726 top level 271 path 12/snapshot ID 286 gen 728 top level 271 path 13/snapshot ID 287 gen 729 top level 271 path 14/snapshot ID 288 gen 730 top level 271 path 15/snapshot ID 289 gen 732 top level 271 path 16/snapshot ID 290 gen 733 top level 271 path 17/snapshot ID 291 gen 734 top level 271 path 18/snapshot ID 292 gen 741 top level 271 path 19/snapshot ID 293 gen 754 top level 271 path 20/snapshot ID 294 gen 785 top level 271 path 21/snapshot ID 295 gen 797 top level 271 path 22/snapshot
눈에 확 들어오지는 않기 때문에, 위 상황을 아래와 같이 표현해 보도록 한다.
@snapshot(subvolid=271) | ├── /1/snapshot(subvolid=667) ├── /2/snapshot(subvolid=668) ├── /3/snapshot(subvolid=673) ├── .... └── ......
@snapshot 이라는 서브볼륨이 있고, 그 아래에 이름이 1,2,3… 인 ‘디렉토리‘들이 있으며, 각각 디렉토리안에 snapshot 으로 명명된 서브볼륨들이 존재한다.
toplevel 271(@snapshots) 하에 숫자로된 디렉토리/snapshot 들이 있음을 볼 수 있다. (눈에 잘 안들어와서 그렇지.)
지금 나는, 저 서브볼륨들을 모두 지우고 싶다.
어찌해야 하나?
간단하게, 그냥 최상위 디렉토리를 지우면 된다.
sudo rm -rf /mnt/@snapshots
이러면 @snapshot 서브볼륨은 물론, 아래 서브볼륨들까지 모두 지워진다.
허나, 이렇게 최상위 서브볼륨을 지우려고 하면 오류가 발생한다.
sudo btrfs subvolume delete /mnt/@snapshots
이럴 때는 아래에 있는 서브볼륨들을 먼저 모두 지워야만 한다.
다음과 같은 간단한 스크립트로 이 작업을 해낼 수 있다.
#!/bin/bash for i in {1..22} do filen=/mnt/@snapshots/"$i"/snapshot if [[ -d "$filen" ]]; then echo "디렉토리 있음" sudo btrfs sub delete "$filen" fi done
위의 예를 보면, 서브볼륨은 1 부터 22 까지 디렉토리 산하에 있으므로 for 문은 {1..22} 까지로 설정했다. 이건 경우에 따라 적절히 조절하면 된다.
허나, 그냥 몽땅 지워버릴 생각이라면 간단히 rm -rf
가 더 낫겠다.