클라우드 마이그레이션
AWS EC2와 PureCVisor 간 양방향 VM 이전을 지원한다.
cloud_migration.c + aws_client.c + disk_converter.c로 구성.
11.1 AWS EC2 Import
섹션 제목: “11.1 AWS EC2 Import”표준 Import (6단계)
섹션 제목: “표준 Import (6단계)”1. AMI → Snapshot → S3 Export (aws ec2 create-store-image-task)2. S3 다운로드 (멀티파트)3. qemu-img convert (VMDK/VHD → qcow2/raw)4. virt-customize (cloud-init 제거, 네트워크 재설정)5. virDomainDefineXML (VM 정의)6. virDomainCreate (VM 시작)Near-Live Import 2-Phase (v1.0)
섹션 제목: “Near-Live Import 2-Phase (v1.0)”다운타임을 최소화하는 2단계 이전:
Phase 1: 사전 동기화 (다운타임 0) ├── 소스 EC2 실행 중 상태로 디스크 스냅샷 생성 ├── 스냅샷을 qcow2로 변환 + 전송 └── PureCVisor에 VM 정의 (시작하지 않음)
Phase 2: 최종 전환 (다운타임 2~5분) ├── aws ec2 stop-instances (소스 중지) ├── aws ec2 create-snapshot (최종 스냅샷) ├── aws ec2 wait snapshot-completed ├── pcv_disk_apply_delta (증분 적용) ├── virt-customize (최종 커스터마이즈) ├── virDomainCreate (VM 시작) └── 소스 EC2 종료 확인# CLI — 표준 Importpcvctl cloud import --ami ami-0abcdef1234567890 \ --vm-name web-prod --vcpu 4 --memory 8192
# CLI — Near-Live Importpcvctl cloud import --ami ami-0abcdef1234567890 \ --vm-name web-prod --near-live
# 최종 전환pcvctl cloud finalize --name web-prod
# RPCecho '{"jsonrpc":"2.0","method":"cloud.import","params":{ "ami_id":"ami-0abcdef1234567890", "vm_name":"web-prod", "vcpu":4, "memory_mb":8192, "near_live": true},"id":"1"}' | nc -U /var/run/purecvisor/daemon.sock11.2 AWS EC2 Export (5단계)
섹션 제목: “11.2 AWS EC2 Export (5단계)”1. VM 중지 + ZFS/qcow2 스냅샷2. qemu-img convert (qcow2 → VMDK/VHD)3. S3 업로드 (멀티파트)4. aws ec2 import-image (AMI 등록)5. aws ec2 run-instances (EC2 시작)# CLIpcvctl cloud export --name web-prod --region ap-northeast-2 \ --instance-type t3.large --bucket purecvisor-exports11.3 Job 관리
섹션 제목: “11.3 Job 관리”SQLite Job 영속화 (v1.0)
섹션 제목: “SQLite Job 영속화 (v1.0)”마이그레이션 작업 상태를 SQLite에 영속 저장하여 데몬 재시작 후에도 복구 가능.
AWAITING_CUTOVER 타임아웃 (v1.0)
섹션 제목: “AWAITING_CUTOVER 타임아웃 (v1.0)”Near-Live Import의 Phase 1 완료 후 AWAITING_CUTOVER 상태에서 2시간 내에 finalize하지 않으면 자동 타임아웃.
# 작업 목록pcvctl cloud jobs
# 영속 저장소 조회 (v1.0)echo '{"jsonrpc":"2.0","method":"cloud.jobs.persist.list","params":{},"id":"1"}' \ | nc -U /var/run/purecvisor/daemon.sock
# 작업 취소pcvctl cloud cancel --name web-prod
# RPCecho '{"jsonrpc":"2.0","method":"cloud.jobs.list","params":{},"id":"1"}' \ | nc -U /var/run/purecvisor/daemon.sock
echo '{"jsonrpc":"2.0","method":"cloud.job.cancel","params":{ "vm_name":"web-prod"},"id":"1"}' | nc -U /var/run/purecvisor/daemon.sock11.4 GCancellable 취소
섹션 제목: “11.4 GCancellable 취소”진행 중인 작업은 GCancellable을 통해 안전하게 취소된다.
다운로드/변환 중 즉시 중단하며, 중간 파일을 정리한다.