- 출처 / 참고: VMware Broadcom Knowledge Base (Consolidating snapshots in vSphere - KB 2003638, Determining if there are leftover delta files - KB 1005049)
명령어:
vim-cmd,vmkfstools,esxcli,find,grep,lsof
키워드: Consolidation Needed, Virtual machine disks consolidation is needed, Snapshot, delta disk, vSphere Client, CID mismatch, File Lock
사용처: vSphere Client에서 가상 머신 스냅샷 삭제 실패 후 ‘통합 필요’ 경고 발생 시 디스크 잠금 해제 및 CLI 기반 수동 통합
실행예제
vSphere Client 또는 ESXi 호스트에서 가상 머신(VM)에 가상 시스템 디스크 통합 필요(Virtual machine disks consolidation is needed) 경고가 표시되고 GUI에서 통합(Consolidate) 작업이 파일 잠금(Lock) 등의 이유로 실패할 때, ESXi SSH 셸에서 잔존 델타 디스크와 잠금 프로세스를 진단합니다.
# 1. ESXi 호스트에 등록된 모든 가상 머신 목록과 VMID 확인
$ vim-cmd vmsvc/getallvms | grep -E "Vmid|Web-Server-01"
# Vmid Name File Guest OS Version
# 42 Web-Server-01 [datastore1] Web-Server-01/Web-Server-01.vmx rhel8_64Guest vmx-19
# 2. 대상 VM의 디스크 통합 필요(Consolidation Needed) 상태 여부 확인
$ vim-cmd vmsvc/get.summary 42 | grep -i "consolidation"
# needsConsolidation = true,
# -> needsConsolidation 값이 true로 설정되어 있어 GUI 경고 발생 확인
# 3. 대상 VM의 데이터스토어 디렉터리로 이동하여 스냅샷 델타(Delta) VMDK 잔존 확인
$ cd /vmfs/volumes/datastore1/Web-Server-01/
$ ls -lh *-00000[0-9]*.vmdk
# -rw------- 1 root root 16.0M Oct 23 11:20 Web-Server-01-000001.vmdk
# -rw------- 1 root root 24.5G Oct 23 14:10 Web-Server-01-000001-sesparse.vmdk
# -rw------- 1 root root 16.0M Oct 23 11:25 Web-Server-01-000002.vmdk
# -rw------- 1 root root 8.2G Oct 23 15:00 Web-Server-01-000002-sesparse.vmdk
# -> 스냅샷 관리자 UI에는 스냅샷이 없으나 실제 디스크에는 델타 체인이 남아있음 확인
# 4. vmkfstools를 사용하여 스냅샷 디스크 체인의 정합성 및 부모 CID 링크 검증
$ vmkfstools -e Web-Server-01-000002.vmdk
# Disk chain is consistent.
# -> 체인이 정상이면 파일 잠금(Lock) 또는 프로세스 점유 문제로 좁혀짐
# 5. 디스크 파일을 잠그고 있는 ESXi 호스트 및 프로세스(Lock 소유자) 식별
$ vmkfstools -D Web-Server-01-000002-sesparse.vmdk
# [출력 예시]
# Lock [type 10c00001 offset 12542100 v 154, hb offset 3854336
# gen 12, mode 1, owner 5f9a1240-3b1a8f90-1204-e4434b219010]
# -> 백업 솔루션(Veeam, Commvault 등) 가상 어플라이언스 또는 다른 ESXi 호스트가 락을 쥔 상태 확인
스크립트
ESXi 호스트 셸에서 실행되어 통합이 필요한 가상 머신(needsConsolidation = true)을 자동 검색하고, 잔여 델타 디스크 파일 목록을 추출한 뒤 CLI 명령(vim-cmd vmsvc/disks.consolidate)을 통해 안전하게 디스크 통합을 시도하는 자동 점검 및 조치 스크립트입니다.
#!/bin/sh
# esxi_vm_consolidate.sh - Diagnose and Fix VMware ESXi "Consolidation Needed" VMs
echo "=========================================="
echo " [VMware ESXi 가상 머신 디스크 통합 진단]"
echo "=========================================="
# 1. 모든 VM 목록 조회 및 consolidation 상태 전수 검사
ALL_VMS=$(vim-cmd vmsvc/getallvms 2>/dev/null | awk 'NR>1 {print $1}')
if [ -z "$ALL_VMS" ]; then
echo " [오류] 가상 머신 목록을 가져올 수 없습니다. hostd 데몬 상태를 확인하십시오."
exit 1
fi
NEEDS_CONSOLIDATION_LIST=""
for VMID in $ALL_VMS; do
VM_NAME=$(vim-cmd vmsvc/get.summary "$VMID" 2>/dev/null | grep "name =" | head -n 1 | awk -F'"' '{print $2}')
CONSOL_STATE=$(vim-cmd vmsvc/get.summary "$VMID" 2>/dev/null | grep -i "needsConsolidation" | awk -F'=' '{print $2}' | tr -d ' ,')
if [ "$CONSOL_STATE" = "true" ]; then
echo " [경고] 통합 필요 가상 머신 감지: [VMID: ${VMID}] ${VM_NAME}"
NEEDS_CONSOLIDATION_LIST="${NEEDS_CONSOLIDATION_LIST} ${VMID}:${VM_NAME}"
fi
done
if [ -z "$NEEDS_CONSOLIDATION_LIST" ]; then
echo " [정상] 디스크 통합(Consolidation)이 필요한 가상 머신이 없습니다."
exit 0
fi
# 2. 통합 대상 가상 머신에 대한 조치 안내 및 처리
echo -e "\n[1] 델타 디스크 확인 및 통합 명령 실행:"
for ITEM in $NEEDS_CONSOLIDATION_LIST; do
T_VMID=$(echo "$ITEM" | cut -d':' -f1)
T_NAME=$(echo "$ITEM" | cut -d':' -f2)
echo "------------------------------------------------------------------"
echo " >> 대상 VM: ${T_NAME} (VMID: ${T_VMID})"
# 가상 머신 VMX 파일 경로 추출
VMX_PATH=$(vim-cmd vmsvc/get.summary "$T_VMID" | grep "vmPathName =" | awk -F'"' '{print $2}')
VM_DIR=$(dirname "$VMX_PATH")
echo " 경로: ${VM_DIR}"
echo " 잔존 델타 디스크:"
ls -lh "${VM_DIR}"/*-00000[0-9]*.vmdk 2>/dev/null | awk '{print " - " $9 " (" $5 ")"}'
echo " 디스크 통합(Consolidation) 트리거 중..."
RESULT=$(vim-cmd vmsvc/disks.consolidate "$T_VMID" 2>&1)
if echo "$RESULT" | grep -qi "fault\|failed"; then
echo " [실패] 통합 작업 실패: ${RESULT}"
echo " -> 조치: VM 스냅샷 수동 생성 후 '모두 삭제(Delete All)'를 시도하거나 백업 프록시 VM의 디스크 마운트 해제 여부를 확인하십시오."
else
echo " [성공] 통합 태스크가 제출되었습니다. 백그라운드 머지 진행 중."
fi
done
echo -e "\n=========================================="
echo " [진단 완료]"
echo "=========================================="
해설
vSphere 환경에서 가상 머신에 Consolidation Needed (가상 시스템 디스크 통합 필요) 경고가 발생하는 원인은 스냅샷 삭제(Delete / Delete All) 명령을 내렸을 때, 백그라운드에서 스냅샷 델타 디스크(-000001.vmdk, -sesparse.vmdk)의 변경 데이터를 기본 베이스 디스크(base disk)로 병합(Commit/Merge)하는 과정이 파일 잠금(File Lock), I/O 타임아웃, 디스크 용량 부족 등으로 인해 정상 완료되지 못하고 중간에 중단되었기 때문입니다.
1. 주요 발생 원인
- 백업 솔루션(Veeam, Commvault, Veritas 등)의 디스크 잠금(HotAdd 잔여):
- 백업 솔루션이 스냅샷을 뜬 후 가상 백업 프록시(Backup Proxy) VM에 해당 스냅샷 디스크를 HotAdd 방식으로 마운트하여 데이터를 백업합니다.
- 백업 완료 후 프록시 VM에서 디스크 언마운트(Release)를 하지 못하고 잡고 있으면 vCenter가 스냅샷 델타 파일을 잠금 해제하지 못해 통합이 실패합니다.
- 과도한 I/O 발생으로 인한 통합 타임아웃:
- DB 서버처럼 변경 블록(Write)이 극도로 많은 가상 머신은 스냅샷 데이터를 베이스 디스크로 합치는 속도보다 새로 생성되는 델타 데이터 속도가 더 빠르면 ESXi가 지정된 타임아웃(반복 루프 한도)을 초과하여 작업을 중단합니다.
- 데이터스토어 여유 공간 부족:
- 스냅샷 통합 과정 중 임시 블록 재배치 및 메타데이터 업데이트를 위한 최소한의 데이터스토어 여유 용량이 부족한 경우.
- vCenter/ESXi 관리 에이전트(hostd/vpxa)의 세션 꼬임:
- 실제 파일 잠금은 풀렸으나 ESXi 관리 데몬이 이전 잠금 상태를 캐싱하고 있어 통합 상태 플래그를 갱신하지 못하는 경우.
2. 단계별 트러블슈팅 및 해결 방법
1) vSphere Client GUI 통합 시도
가장 기본적 조치로 VM 우클릭 $\rightarrow$ 스냅샷(Snapshots) $\rightarrow$ 통합(Consolidate)을 실행합니다.
2) “더미 스냅샷(Helper Snapshot)” 기법 적용
GUI 통합이 계속 오류로 튕길 때 가장 효과적인 해결책입니다.
- 대상 VM의 스냅샷 관리자에서 신규 스냅샷(이름:
TestConsolidate, 메모리 스냅샷 체크 해제)을 새로 1개 생성합니다. - 생성이 완료되면 스냅샷 관리자에서 “모든 스냅샷 삭제(Delete All)”를 실행합니다.
- ESXi가 신규 스냅샷을 커밋하면서 이전에 고아(Orphaned) 상태로 꼬여있던 이전 델타 체인 디스크까지 강제로 하나로 묶어 베이스 디스크로 깔끔하게 병합합니다.
3) 백업 프록시 VM의 유령 디스크 마운트 해제
Veeam 등의 백업 솔루션을 쓴다면 백업 프록시 VM의 가상 시스템 설정 편집에 들어가 대상 VM의 델타 디스크(...-000001.vmdk)가 하드 디스크로 마운트되어 있는지 확인하고, “가상 시스템에서 제거(디스크 파일은 삭제하지 않음)”로 마운트를 끊어줍니다.
4) ESXi 호스트 관리 에이전트 재기동
파일 잠금이 풀리지 않을 때 ESXi 호스트의 관리 데몬을 재시작합니다 (구동 중인 VM 운영에는 영향 없음).
/etc/init.d/hostd restart
/etc/init.d/vpxa restart
주의사항
- 통합 중 가상 머신 강제 전원 끄기(Power Off) 절대 금지:
- 수십~수백 GB 크기의 델타 디스크 통합 작업은 스토리지 속도에 따라 수십 분에서 수 시간이 걸릴 수 있습니다. 진행률이 99%에서 오래 머물러 있다고 해서 VM을 강제 종료하거나 ESXi를 리부팅하면 VMDK 체인이 깨져 가상 머신 부팅 불가(Data Corruption) 참사가 발생합니다.
- 통합 전 데이터스토어 여유 공간 사전 확인:
- 델타 디스크가 크다면 통합 작업 중 일시적으로 스토리지 여유 블록이 필요합니다. 데이터스토어 잔여 용량이 거의 0%인 상태에서 무리하게 통합을 돌리면 스토리지 풀(Storage Full)로 인해 동일 데이터스토어의 모든 VM이 일제히 일시 중단(Suspend)될 수 있습니다.
- 스냅샷 델타 파일 임의
rm삭제 금지:- SSH 콘솔에서
rm *-000001.vmdk명령으로 델타 파일을 직접 지우면 안 됩니다. 스냅샷 생성 이후의 변경 데이터가 델타 파일에 저장되어 있으므로, 직접 삭제하면 디스크 체인이 영구 단절되어 파일시스템이 완전히 손상됩니다. 반드시vim-cmd또는 vSphere의 정상 병합 절차를 거쳐야 합니다.
- SSH 콘솔에서