btrfs 하위 볼륨을 제거하여 사용 가능한 공간이 얼마나됩니까? 없습니다” 라는 것을

Btrfs 디스크에서 하나 또는 여러 개의 서브 볼륨을 제거하면 (실제로 제거하지 않고) 여유 공간을 계산할 수있는 방법이 있습니까? “현재 계산할 코드가 없습니다” 라는 것을 알고 있습니다. 어떻게 하시겠습니까?

또한 그들이 왜 그렇게 느리다고 말하는지 궁금합니다. 실제로 하위 볼륨을 제거하고 여유 공간에 대해 묻는 것이 내 경험에서 매우 빠릅니다. 왜 같은 일을 가상으로 수행하는 것이 그렇게 느릴까요?



답변

btrfs quotaand btrfs qgroups(quota groups)를 살펴보십시오 .

기본적으로 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에서

# 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에서 스냅 샷을 생성하면 (일반적으로) 스냅 샷을 포함하는 새로 생성 된 하위 볼륨의 모든 실제 데이터가 스냅 샷의 소스와 공유됩니다. 소스에서 파일이 변경되거나 교체 될 때만 다른 내용 (범위)을 가리 킵니다. 다른 서브 볼륨과 공유되는 모든 공간을 고려해야하기 때문에 서브 볼륨이 삭제 된 경우 실제로 얼마나 많은 공간이 확보되는지 평가하기가 매우 어렵습니다.