인프라/스토리지·백업

Ceph RBD 스냅샷 삭제 전 점검: clone 의존성·flatten·snaptrim과 용량 회수

filefind

VM 템플릿이나 오래된 RBD 스냅샷을 정리하다가 삭제가 거부되거나 예상보다 용량이 줄지 않을 수 있습니다. 이때 보호 설정만 해제하기 전에 부모 스냅샷과 자식 clone의 연결, flatten에 필요한 공간, 비동기 snaptrim을 확인해야 합니다. 이 글의 예시는 Ceph Reef 문서를 기준으로 하며 실제 버전과 clone 형식의 차이를 먼저 확인합니다.

1. 이미지와 스냅샷 목록부터 확인하기

아래 vm-pool/base-image와 snap-01은 예시입니다. 관리 플랫폼에서 사용하는 이미지라면 VM·템플릿과 RBD 이름을 먼저 연결합니다. Proxmox나 OpenStack 같은 상위 플랫폼이 관리하는 스냅샷은 해당 플랫폼의 관리 절차를 우선합니다.

ceph version
ceph -s
rbd info vm-pool/base-image
rbd snap ls vm-pool/base-image
rbd du vm-pool/base-image

이미지의 provisioned 크기는 실제 사용량과 다릅니다. rbd du가 표시하는 값도 복제 계수와 OSD의 전체 물리 사용량을 그대로 나타내는 값은 아닙니다. fast-diff 등 기능 상태에 따라 조회 비용이 커질 수 있으므로 대규모 pool에서는 범위를 좁혀 확인합니다.

2. 부모와 자식 의존성 조회하기

clone은 변경된 데이터를 자신의 이미지에 기록하면서 미변경 데이터를 부모 스냅샷에서 참조할 수 있습니다. 따라서 부모 스냅샷을 독립적인 오래된 복사본으로 보고 바로 제거하면 안 됩니다.

rbd children vm-pool/base-image@snap-01
rbd info vm-pool/child-image
rbd snap ls vm-pool/child-image

자식이 다른 pool이나 namespace에 있을 수 있으므로 출력된 전체 위치를 기록합니다. 조회 권한이 제한되어 있다면 빈 목록을 모든 의존성이 없다는 증거로 바로 사용하지 않습니다. 현재 설치 버전의 rbd help와 관리 시스템 정보를 대조합니다.

3. 정리 방법에 따른 영향 비교하기

방법 효과 검토 항목
부모 보존 clone의 기존 참조 유지 보존 비용과 템플릿 관리
자식 flatten 공유 블록을 자식에 복사해 부모 의존성 제거 추가 사용량·I/O·작업 시간
사용하지 않는 자식 정리 해당 clone 자체 제거 VM 연결·백업·소유자 확인
부모 스냅샷 정리 더 이상 필요 없는 복구 시점 제거 다른 자식과 보존 정책

flatten은 용량을 줄이는 압축 작업이 아닙니다. 자식에 공유 블록을 복사하므로 진행 중 또는 완료 후 공간이 증가할 수 있습니다. 자식 스냅샷과 deep-flatten 기능 등의 동작도 확인하고, 작업 후 의존성을 다시 조회합니다.

4. flatten을 계획할 때 확인할 것

다음은 변경 명령의 형식 예시입니다. 실제로는 상위 플랫폼의 지원 절차, 백업, 클러스터 여유, 복구 부하를 확인한 뒤 유지보수 작업으로 수행합니다. nearfull 상태에서 의존성을 없애겠다며 대량 flatten을 시작하지 않습니다.

# 변경 작업 예시: 사용 중인 이미지·플랫폼 절차 확인 후 실행
rbd flatten vm-pool/child-image
# 작업 후 의존성 재확인
rbd info vm-pool/child-image
rbd children vm-pool/base-image@snap-01
ceph -s

보호 해제·삭제·rollback은 이 조회 절차와 별도로 결정합니다. 특히 rollback은 현재 데이터를 과거 시점으로 덮어쓰는 작업이므로 정리용 명령으로 취급하지 않습니다.

5. 삭제 후 용량이 즉시 돌아오지 않는 이유

스냅샷 삭제 후 OSD는 snaptrim을 통해 데이터를 비동기로 정리합니다. 다른 스냅샷이나 clone이 참조하는 데이터가 남을 수도 있습니다. 단순히 삭제 명령이 성공했는지보다 ceph 상태와 용량 변화, 잔여 의존성을 시간을 두고 비교합니다.

점검 완료 기준

  • 이미지·스냅샷·VM 또는 템플릿 매핑을 확보했다.
  • 부모와 자식의 전체 의존성을 확인했다.
  • flatten에 필요한 공간과 부하를 검토했다.
  • 정리 후 snaptrim·용량·VM 정상 동작을 확인했다.

참고자료