VM 인스턴스 실행 불가능 ESXi/ESX error: No free space left on device
# 조치 내용
- VMware firmware (OS) Update: 보안 패치 및 안정성, 버그 수정 등 23년 1월 정기 패치 팩
- 각 VM에 sched.swap.vmxSwapEnabled : False 항목 추가
- 각 VM에 할당 된 메모리를 162G -> 160G로 변경 및 인스턴스 시작 시 fixed 100% 메모리 할당이 아닌 1/3만 할당하고, 이용률에 따라 추가 할당하는 것으로 변경
# 원인
자원을 100% 할당하여 여분공간이 없음으로 인해 발생한 현상임. 통상 10%의 여유공간 (margin)을 추는 것을 권고하고 있음.
- Memry 512G 중 VMWare 자체와 bastion을 띄우면 488G의 메모리가 남음. 3등분 하여 162G씩 할당한 것으로 보임.
- Storage 4.24TB를 100% VM에 할당 함.
# 분석
VMWare는 기본 옵션으로 memory overcommit에 대비하여, 개별 VM 인스턴스 당 스왚파일을 생성 함.
- 이 스왚 파일은 해당 VM이 가진 메모리 총량과 동일한 크기임.
- 이 스왚이 생기는 이유는 메모리 공유 기능을 이용하여 물리 메모리가 10G인데 실제 VM에는 20G를 할당할 수 있기에, 오버 커밋이 발생하여 물리 메모리가 모자란 경우 디스크에 있는 스왚파일을 메모리 처럼 이용하기 위한 기능
- 그러나 일산병원의 시스템은 메모리를 오버커밋 하지 않고 100% VM에 맞게 할당하여 이 기능이 필요 없음
- 이 기능을 끔으로서 메모리 크기와 같은 디스크 공간인 0.5G를 확보 함.
- 현재 전체 공간 4.24TB 중 사용 3.77TB
그러면 기존에는 왜 문제가 없었나?
스토리지 할당 방식이 Thin Provisioning 방식이었기 때문임.
Thin Provisioning 은 처음부터 고정 공간으로 디스크를 할당하는 것이 아닌, 사용한 만큼만 디스크를 자치하게 되어있음.
전체 스토리지 공간을 VM에 100% 할당하기는 했으나, 시스템 초기에는 공간이 남아있어 문제가 없었을 것이고, 시간이 지남에 따라 메모리 스왚 기능과 겹쳐 공간 부족을 야기 함.
VM이 실제 쓰는 사용량은 매우 적다. 공간이 부족한 것이 맞는가?
현대의 파일 시스템에서 파일을 지울 때 실제로는 지우는 것이 아니고, 인덱스에서만 제거하고 포인터만 옮겨갑니다.
시스템을 쓰면서 임시 파일이 생성되고 사라지는데, 실제로 지워지는 건 아니고 다만 빈 공간으로 포인터만 옮겨 간 것임.
때문에 Thin Provisioning 된 디스크는 시간이 지남에 따라 그 크기가 커지게 됩니다. 그리고 어느 시점에 이르러 디스크 부족 사태를 야기하게 됩니다.