btrfs 하위 볼륨을 삭제하면 얼마나 많은 공간이 확보됩니까?

btrfs 하위 볼륨을 삭제하면 얼마나 많은 공간이 확보됩니까?

Btrfs 디스크에서 하나(또는 그 이상)의 하위 볼륨을 삭제하는 경우(실제로 삭제하지 않고) 얼마나 많은 공간을 확보할 수 있는지 계산하는 방법이 있습니까? 나는 거기에 있다는 것을 안다"현재 계산을 대신 수행할 수 있는 코드는 없습니다.", 하지만 당신은 어떻게 하시겠습니까?

나는 또한 그들이 왜 그렇게 느리다고 말하는지 알고 싶습니다. 내 경험에 따르면 실제로 하위 볼륨을 삭제하고 여유 공간을 요청하는 것은 모두 매우 빠릅니다. 왜 동일한 작업을 수행하는 것이 훨씬 느리다고 가정합니까?

답변1

btrfs quotabtrfs qgroups(할당량 그룹)을 살펴봐야 합니다 .

기본적으로 qgroups요청한 대로 정확하게 수행하면 하위 볼륨에 할당된 공간이 얼마나 되는지 추적할 수 있습니다. 파일 시스템 qgroup기능을 활성화하려면 btrfs다음을 수행해야 합니다.

# btrfs quota enable /path/to/btrfs/filesystem

그러나 이 작업을 수행하기 전에경고 받다이렇게 하면 데이터의 전체 재계산이 트리거되는데 qgroup, 특히 하위 볼륨이 많은 대규모 파일 시스템의 경우 시간이 좀 걸립니다. 이 프로세스는 백그라운드에서 비동기적으로 실행됩니다. 이미 qgroups상태를 확인할 수 있습니다.

# btrfs qgroup show /path/to/btrfs/filesystem

그러면 다음과 같은 출력이 제공됩니다.

WARNING: rescan is running, qgroup data may be incorrect
qgroupid         rfer         excl
--------         ----         ----
0/5         843.69GiB     61.91MiB
0/4881      811.06GiB      9.34GiB
0/7990      867.32GiB    329.91MiB
0/8400      867.17GiB     37.64MiB

(재검색이 실행되는 동안 첫 번째 줄의 경고가 표시됩니다.)

Btrfs는 qgroup각 하위 볼륨에 대해 자동으로 하나를 생성합니다. 이 예에는 하위 볼륨 ID가 4881, 7990, 8400인 세 개의 하위 볼륨이 있습니다. 슬래시 앞 부분은 입니다 qgroup. 각 하위 볼륨 qgroup은 레벨 0입니다. 또한 qgroup레벨 0에는 ID가 항상 5이고 btrfs 파일 시스템의 루트에 해당하는 특수 하위 볼륨이 있습니다.

각각에 대해 qgroup위의 출력은 참조하는 공간의 양을 보여줍니다. 이는 해당 하위 볼륨에 표시된 숫자와 동일한 전체 크기의 파일이 포함되어 있음을 의미합니다.

그러나 스냅샷 및 btrfs 하위 볼륨의 쓰기 시 복사 특성으로 인해 파일이 공유될 수 있습니다. 이는 파일의 내용(또는 실제로 범위)이 여러 하위 볼륨에서 참조될 수 있음을 의미합니다. 이는 공간이 얼마나 되는지를 나타내는 두 번째 숫자로 표시됩니다.오직각 하위 볼륨별로 할당되며 다른 하위 볼륨과 공유되지 않습니다. 하위 볼륨을 삭제하면 실제로 해제되는 공간입니다.

여러 하위 볼륨을 삭제하여 얼마나 많은 공간이 확보되는지 알고 싶다면 위 수준을 사용할 수 있습니다. qgroups계층적으로 구성됨상위 수준(0보다 큼)의 그룹은 하위 수준의 정보를 집계합니다.

따라서 위의 예에서 하위 볼륨 4881 및 7990을 삭제하면 얼마나 많은 공간이 확보되는지 확인하려면 qgroup레벨 1에 새 볼륨을 생성하십시오(임의의 ID 0이지만 여기에서 원하는 것을 선택할 수 있음).

# btrfs qgroup create 1/0 /path/to/btrfs/filesystem

그런 다음 새로 생성된 하위 볼륨을 삭제하려는 하위 볼륨의 qgroup상위 볼륨 으로 지정합니다.qgroups

# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem

이렇게 하면 할당량 정보에 대한 또 다른 재검색이 시작되며 시간이 걸릴 수 있습니다. 완료되어 지금 발행하는 경우

# btrfs qgroup show -p /path/to/btrfs/filesystem

다음과 같은 출력을 얻게 됩니다.

qgroupid         rfer         excl parent
--------         ----         ---- ------
0/5           1.38TiB      2.51GiB ---
0/4881        1.11TiB     10.86GiB 1/0
0/7990        1.23TiB    502.41MiB 1/0
0/8400        1.34TiB      1.69GiB 1/0
1/0           1.51TiB    132.23GiB ---

( 상위/하위 관계를 표시하는 출력에 열을 추가하기 -p위해 플래그를 추가했습니다 .)parentqgroups

이제 이 줄은 qgroup 1/0삭제하려는 두 하위 볼륨이 참조하는 공간의 양을 알려주고, 더 중요한 것은 할당된 공간의 양을 알려줍니다.오직. 이는 두 하위 볼륨을 모두 삭제한 후 확보되는 공간의 양입니다.

나는 또한 그들이 왜 그렇게 느리다고 말하는지 알고 싶습니다.

이는 btrfs 및 스냅샷의 기록 중 복사 특성 때문입니다. btrfs에서 스냅샷을 생성하는 경우(일반적으로) 스냅샷이 포함된 새로 생성된 하위 볼륨의 모든 실제 데이터가 스냅샷 소스와 공유됩니다. 소스의 파일이 변경되거나 대체되는 경우에만 다른 내용(범위)을 가리킵니다. 이렇게 하면 다른 하위 볼륨과 공유되는 모든 공간을 고려해야 하므로 하위 볼륨을 삭제하여 실제로 얼마나 많은 공간이 확보되는지 평가하기가 매우 어렵습니다.

관련 정보