Btrfs 디스크에서 하나(또는 그 이상)의 하위 볼륨을 삭제하는 경우(실제로 삭제하지 않고) 얼마나 많은 공간을 확보할 수 있는지 계산하는 방법이 있습니까? 나는 거기에 있다는 것을 안다"현재 계산을 대신 수행할 수 있는 코드는 없습니다.", 하지만 당신은 어떻게 하시겠습니까?
나는 또한 그들이 왜 그렇게 느리다고 말하는지 알고 싶습니다. 내 경험에 따르면 실제로 하위 볼륨을 삭제하고 여유 공간을 요청하는 것은 모두 매우 빠릅니다. 왜 동일한 작업을 수행하는 것이 훨씬 느리다고 가정합니까?
답변1
btrfs quota
및 btrfs 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
위해 플래그를 추가했습니다 .)parent
qgroups
이제 이 줄은 qgroup
1/0
삭제하려는 두 하위 볼륨이 참조하는 공간의 양을 알려주고, 더 중요한 것은 할당된 공간의 양을 알려줍니다.오직. 이는 두 하위 볼륨을 모두 삭제한 후 확보되는 공간의 양입니다.
나는 또한 그들이 왜 그렇게 느리다고 말하는지 알고 싶습니다.
이는 btrfs 및 스냅샷의 기록 중 복사 특성 때문입니다. btrfs에서 스냅샷을 생성하는 경우(일반적으로) 스냅샷이 포함된 새로 생성된 하위 볼륨의 모든 실제 데이터가 스냅샷 소스와 공유됩니다. 소스의 파일이 변경되거나 대체되는 경우에만 다른 내용(범위)을 가리킵니다. 이렇게 하면 다른 하위 볼륨과 공유되는 모든 공간을 고려해야 하므로 하위 볼륨을 삭제하여 실제로 얼마나 많은 공간이 확보되는지 평가하기가 매우 어렵습니다.