Btrfs+LXC: LXC 컨테이너를 호스팅하는 할당량 하위 볼륨에 대한 대략적인 추정 여유 공간을 표시할 수 있는 방법이 있습니까?

Btrfs+LXC: LXC 컨테이너를 호스팅하는 할당량 하위 볼륨에 대한 대략적인 추정 여유 공간을 표시할 수 있는 방법이 있습니까?

Btrfs를 백업 저장소로 사용하여 LXC를 실험하고 있습니다. Btrfs는 간편한 스냅샷/중복 제거를 허용하며 여러 "의사 VM"을 가동하는 데 이상적입니다.

제가 겪고 있는 문제는 제가 테스트한 일부 앱이 많은 데이터를 디스크에 덤프한다는 것입니다. Btrfs 볼륨의 사용을 제한하려고 하여 특정 컨테이너에 대해 LXC에서 생성한 하위 볼륨에 할당량을 할당했습니다.

앱에는 오류 방지 테스트가 있습니다. 파일 시스템에서 사용 가능한 디스크 공간이 특정 양(예: 512MB) 미만인 경우 새 로그를 위한 공간을 확보하기 위해 오래된 로그를 지우기 시작합니다.

문제는 할당량이 적용된 경우에도 LXC 루트 파일 시스템이 여전히 호스트 Btrfs 파일 시스템의 전체 크기를 보고한다는 것입니다.

-B btrfs예: Btrfs 파일 시스템이 250GB이고 및 옵션을 사용하여 LXC 컨테이너를 생성한 경우 -s이제 Btrfs 파일 시스템에 이 새 컨테이너의 루트를 나타내는 하위 볼륨이 있습니다. 그런 다음 컨테이너가 차지하는 공간을 제한하고 싶기 때문에 컨테이너에 32GB의 qgroup 제한을 적용합니다. 그러나 이 df명령은 LXC 컨테이너에서 실행될 때 여전히 총 ​​파일 시스템 크기가 250GB로 표시되며 대략 호스트 파일 시스템의 실제 여유 공간을 기반으로 한 여유 공간이 표시됩니다. 즉, 할당량 제한은 에 표시되지 않습니다 df.

이는 내 로그 앱이 전체 할당량을 채울 수 있고 여전히 쓸 수 있는 공간이 200GB 이상이라고 믿으므로 이전 데이터를 재활용하지 않는다는 의미입니다. 결국 할당량이 초과되고 COW 파일 시스템의 한계로 인해 할당량을 비활성화하고 오래된 로그를 수동으로 삭제해야 합니다. 할당량이 여전히 동일한 크기로 적용되면 데이터를 삭제할 수 없습니다. 삭제 작업을 위한 추가 공간이 없습니다.

나는 Btrfs에서 "여유 공간"이라는 개념이 혼란스럽고 해결하기 어려울 수 있다는 것을 이해하기 위해 Btrfs에 대해 충분히 읽고 이해했습니다. 그러나 LXC 내에서 "야구장" 수치를 얻을 수 있는 방법이 있습니까? 할당량 공간이 얼마나 남았나요? 가급적이면 디스크 여유 공간(사용하는 API)을 얻기 위한 표준 API를 사용하여 수행해야 합니다 df. 이는 파일 시스템에 액세스하고 대략적인 여유 공간을 알아야 하는 다른 앱에도 적용된다는 의미이기 때문입니다.

예를 들어 실제 여유 공간(할당량에 따라 제공됨)의 1GB 정도에 도달할 수 있다면 파일 시스템이 할당량을 초과하지 않도록 로그 만료 매개변수를 조정하는 데 충분할 것입니다.

답변1

btrfs 하위 볼륨 공간 할당을 처리하기 위해 찾은 최고의 도구는 다음과 같습니다. BTRFS 스냅샷의 크기 확인 | PoisonPacket 블로그

모든 크레딧은 Kyle Agronick(이 스크립트 작성자)에게 전달됩니다.

관련 정보