Markdown Preview
OpenStack Cinder에서 멈춤 볼륨 안전하게 제거하기: 단계별 가이드
Frontmatter
OpenStack Cinder에서 생성 중·삭제 중에 멈춘 볼륨을 Ceph와 데이터베이스를 직접 확인·삭제하고, 상태를 error 또는 deleted 로 변경해 안전하게 제거하는 단계별 절차를 제공한다.
서론
OpenStack 환경에서 Cinder 볼륨을 관리하다 보면, 볼륨이 "생성 중" 또는 "삭제 중" 상태에서 멈추는 문제가 간혹 발생합니다. 이번에는 이러한 문제가 무더기로 발생한 상황을 마주하게 되었습니다.
이 글에서는 상태가 멈춘 볼륨들을 안전하게 제거하는 방법을 단계별로 설명합니다. 확인 결과 해당 볼륨들은 모두 제거해도 되는 상태였기 때문에, 정리 작업을 진행하기로 결정했습니다.
이 글에서 다루는 내용
- 생성 중 상태에서 멈춘 볼륨 제거 방법
- 삭제 중 상태에서 멈춘 볼륨 제거 방법
- Ceph RBD와 Cinder 데이터베이스 직접 조작
1. 볼륨 상태 확인 및 제거 (생성 중)
볼륨이 "생성 중" 상태에서 멈춘 경우, 먼저 해당 볼륨이 실제로 Ceph에 생성되었는지 확인해야 합니다.
1.1 Ceph에서 볼륨 존재 여부 확인
Ceph 대시보드에서 RBD 이미지 목록을 확인합니다. OpenStack Cinder 볼륨은 일반적으로 볼륨 ID를 이름으로 사용하여 생성됩니다.
검색 기능을 통해 문제가 된 볼륨 ID를 조회해 봅니다.
위 이미지처럼 해당 볼륨이 Ceph에 아직 생성되지 않았다면, 처리가 비교적 간단합니다.
1.2 볼륨 상태를 error로 변경
Ceph에 실제 데이터가 없는 경우, OpenStack에서 볼륨 상태만 변경하면 삭제가 가능합니다.
방법 1: Horizon 대시보드 사용
관리자 페이지에서 볼륨의 상태를
error로 강제 업데이트할 수 있습니다.방법 2: OpenStack CLI 사용
# 볼륨 상태를 error로 변경
openstack volume set --state error <volume_id>
# 실제 예시
openstack volume set --state error 4e0e6890-d998-4af6-bcb3-4ee25ef56aab상태 변경이 완료되면 볼륨이
error 상태로 전환된 것을 확인할 수 있습니다.1.3 볼륨 삭제
error 상태가 되면 일반적인 방법으로 볼륨을 삭제할 수 있습니다.CLI를 사용하는 경우 다음 명령어를 실행합니다:
# 볼륨 삭제
openstack volume delete <volume_id>
# 실제 예시
openstack volume delete 4e0e6890-d998-4af6-bcb3-4ee25ef56aabTip: 여러 볼륨을 한 번에 처리해야 하는 경우, 볼륨 ID 목록을 파일로 저장한 후 반복문으로 처리하면 효율적입니다.
for vol in $(cat volume_ids.txt); do
openstack volume set --state error $vol
openstack volume delete $vol
done2. 볼륨 상태 확인 및 제거 (삭제 중)
이제 더 까다로운 케이스인 "삭제 중" 상태에서 멈춘 볼륨을 처리해 보겠습니다. 이런 볼륨들은 99.99999% 확률로 Ceph에 아직 데이터가 남아있는 상태입니다. Cinder가 Ceph에서 삭제를 완료하지 못했기 때문에 이런 현상이 발생합니다.
주의: 정석적인 방법은 상태를
error로 변경 후 delete --force 옵션을 사용하는 것입니다. 하지만 이 방법이 통하지 않는 경우가 있으며, 현재 상황도 그러합니다. 이 경우 Ceph와 데이터베이스를 직접 조작해야 합니다.2.1 처리 절차 개요
삭제 중 상태의 볼륨을 제거하기 위해 다음 순서로 진행합니다:
- Ceph RBD에서 해당 볼륨 이미지 조회 및 제거
- Cinder 데이터베이스에서 볼륨 상태를
deleted로 업데이트
2.2 Ceph에서 볼륨 확인
먼저 Ceph에 해당 볼륨이 존재하는지 확인합니다:
# Ceph RBD 이미지 조회
rbd ls -p volumes --id cinder | grep <volume_id>
# 실제 예시
rbd ls -p volumes --id cinder | grep 947cb78b-a6d0-48e8-9520-361f63e63d99명령어 설명
rbd ls: RBD 이미지 목록을 조회합니다.
-p volumes:volumes풀을 대상으로 조회합니다. (풀 이름은 환경에 따라 다를 수 있습니다)
--id cinder: cinder 사용자 권한으로 접근합니다.
grep <volume_id>: 특정 볼륨 ID가 포함된 이미지만 필터링합니다.
2.3 Ceph에서 볼륨 제거
볼륨이 존재하는 것을 확인했다면, 해당 이미지를 제거합니다:
# Ceph RBD 이미지 제거
rbd -p volumes --id cinder remove volume-<volume_id>
# 실제 예시
rbd -p volumes --id cinder remove volume-947cb78b-a6d0-48e8-9520-361f63e63d99✅ 삭제 중 멈춤: Ceph RBD에서 이미지 제거 → DB에서 deleted 처리
2.4 Cinder 데이터베이스 업데이트
Ceph에서 실제 데이터를 제거했으니, 이제 Cinder 데이터베이스에서도 해당 볼륨을 삭제 처리해야 합니다.
주의: 데이터베이스를 직접 수정하는 것은 위험한 작업입니다. 반드시 백업을 수행하고, 정확한 볼륨 ID를 확인한 후 진행하세요. 잘못된 쿼리 실행 시 다른 볼륨 데이터가 손상될 수 있습니다.
MySQL/MariaDB에 접속하여 다음 쿼리를 실행합니다:
-- 볼륨 상태를 deleted로 업데이트
UPDATE cinder.volumes t
SET t.deleted_at = now(),
t.deleted = 1,
t.status = 'deleted'
WHERE t.id = '<volume_id>';
-- 실제 예시
UPDATE cinder.volumes t
SET t.deleted_at = now(),
t.deleted = 1,
t.status = 'deleted'
WHERE t.id = '79993942-d2d1-4068-a914-f361c5c14461';쿼리 설명
deleted_at = now(): 삭제 시간을 현재 시간으로 설정합니다.
deleted = 1: 소프트 삭제 플래그를 활성화합니다.
status = 'deleted': 볼륨 상태를 삭제됨으로 변경합니다.
- LIKE 대신 = 사용 권장: 정확한 ID 매칭을 위해
=연산자를 사용하는 것이 더 안전합니다.
핵심 정리
이 글에서는 OpenStack Cinder에서 상태가 멈춘 볼륨을 제거하는 방법을 다루었습니다.
✅ 생성 중 멈춤: 볼륨 상태를
error로 변경 후 일반 삭제 진행✅ Ceph 확인:
rbd ls -p volumes --id cinder | grep <volume_id>로 존재 여부 확인✅ Ceph 삭제:
rbd -p volumes --id cinder remove volume-<volume_id>로 이미지 제거✅ DB 업데이트:
deleted_at, deleted, status 컬럼 업데이트로 삭제 처리주의사항
⚠️ 백업 필수: 데이터베이스 직접 수정 전 반드시 백업을 수행하세요.
⚠️ 볼륨 ID 확인: 쿼리 실행 전 볼륨 ID가 정확한지 재확인하세요.
⚠️ 운영 환경 주의: 프로덕션 환경에서는 사전 테스트 후 적용하세요.
⚠️ 근본 원인 분석: 반복적으로 발생한다면 Cinder-Ceph 연동 설정이나 네트워크 상태를 점검하세요.