Skip to content

Mold - Incremental Backup 및 Restore #793

@Dajeong-Park

Description

@Dajeong-Park

추가 확인 필요사항

  • 호스트 재부팅 후 체크포인트 유지 확인
  • 스토리지 마이그레이션 시 체크포인트 확인

백업 테스트

  • Incremental Backup Command 실행
  • VM snapshot revert와 incremental 백업 충돌
  • 체크 포인트 없는 경우 incremental 백업 동작 실패 확인
  • 가상머신 마이그레이션시 체크포인트 상실
  • VM 정지 상태에서 incremental 가능 여부 확인
  • VM disk 변경 시 incremental chain 영향 확인
  • volume resize 후 incremental 백업 가능 여부 확인
  • checkpoint metadata 없이 incremental restore 가능 여부 확인

Incremental Backup Command 실행

  • 백업 관련 디렉토리 생성
#mkdir -p /backup/i-2-999-VM
#mkdir -p /backup/i-2-299-VM/full
#mkdir -p /backup/i-2-299-VM/inc1
#mkdir -p /backup/i-2-299-VM/inc2
#mkdir -p /backup/i-2-299-VM/checkpoints
  • 가상머신 볼륨 확인
#virsh domblklist i-2-299-VM --details >> sda /mnt/glue-gfs/96da846d-d731-4cc3-b752-85bf79d07dcc
  • FULL 백업 진행
#vi backup-full.xml
<domainbackup mode='push'>
  <disks>
    <disk name='sda' type='file'>
      <target file='/backup/i-2-299-VM/full/root.full.qcow2'/>
      <driver type='qcow2'/>
    </disk>
  </disks>
</domainbackup>
#virsh backup-begin i-2-299-VM backup-full.xml
#virsh domjobinfo i-2-299-VM
  • 체크포인트1 생성
#virsh checkpoint-create-as i-2-299-VM chk1
  • 가상머신 내부 데이터 변경 작업 진행
  • Incremental 백업 진행
#vi backup-inc1.xml
<domainbackup mode='push'>
  <incremental>chk1</incremental>
  <disks>
    <disk name='sda' type='file'>
      <target file='/backup/i-2-299-VM/inc1/root.inc1.qcow2'/>
      <driver type='qcow2'/>
    </disk>
  </disks>
</domainbackup>
#virsh checkpoint-list i-2-299-VM
#virsh backup-begin i-2-299-VM backup-inc1.xml
#virsh domjobinfo i-2-299-VM --completed
  • 체크포인트2 생성
#virsh checkpoint-create-as i-2-299-VM chk2
  • 가상머신 내부 데이터 변경 작업 진행
  • Incremental 백업 진행
#vi backup-inc2.xml
<domainbackup mode='push'>
  <incremental>chk2</incremental>
  <disks>
    <disk name='sda' type='file'>
      <target file='/backup/i-2-299-VM/inc2/root.inc2.qcow2'/>
      <driver type='qcow2'/>
    </disk>
  </disks>
</domainbackup>
#virsh backup-begin i-2-299-VM backup-inc2.xml
  • 체크포인트 메타데이터 저장
#virsh checkpoint-dumpxml i-2-299-VM chk1  > /backup/i-2-299-VM/checkpoints/chk1.xml
#virsh checkpoint-dumpxml i-2-299-VM chk2  > /backup/i-2-299-VM/checkpoints/chk2.xml
  • 체크포인트 확인
#virsh checkpoint-list i-2-299-VM

VM snapshot revert와 incremental 백업 충돌

  • VM snapshot 생성
#virsh snapshot-create-as i-2-299-VM snap1
  • 가상머신 내부 데이터 변경 작업 진행
  • VM snapshot 복원
#virsh snapshot-revert i-2-299-VM snap1
error: Failed to revert snapshot snap1 error: operation failed: load of internal snapshot 'snap1' job failed: Could not load snapshot 'snap1' on 'libvirt-2-format': Device has active dirty bitmaps
>> incremental backup을 위해 생성된 bitmap(checkpoint) 이 존재하고 있기 때문에 snapshot revert가 차단
  • 체크포인트 삭제
#virsh checkpoint-delete i-2-299-VM chk1
#virsh checkpoint-delete i-2-299-VM chk2
  • VM snapshot 복원 시 정상 확인

체크 포인트 없는 경우 incremental 백업 동작 실패 확인

  • Incremental 백업
#virsh backup-begin i-2-299-VM backup-inc.xml
error: Domain checkpoint not found: Checkpoint 'chk' for incremental backup of disk 'sda' not found

가상머신 마이그레이션시 체크포인트 상실

  • 체크포인트 확인
#virsh checkpoint-list i-2-299-VM
Name   Creation Time
-----------------------------------
 chk1   2026-03-16 11:03:44 +0900
 chk2   2026-03-16 11:04:49 +0900
  • 다른 호스트로 가상머신 마이그레이션
  • 다른호스트에서 체크포인트 확인
#virsh checkpoint-list i-2-299-VM
 Name   Creation Time
-----------------------
  • 다시 기존 호스트로 가상머신 마이그레이션해도 체크포인트 없음 확인
  • 기존 호스트에서 체크포인트 생성시 migration 과정에서 libvirt checkpoint metadata 는 사라졌지만 qcow2 내부 persistent dirty bitmap chk1 는 남아 있음
    error: internal error: unable to execute QEMU command 'transaction': Bitmap already exists: chk1
  • 가상머신 비트맵 삭제
#qemu-img info -U /mnt/glue-gfs/96da846d-d731-4cc3-b752-85bf79d07dcc
#qemu-img bitmap --remove /mnt/glue-gfs/96da846d-d731-4cc3-b752-85bf79d07dcc chk1
#qemu-img bitmap --remove /mnt/glue-gfs/96da846d-d731-4cc3-b752-85bf79d07dcc chk2
  • 체크포인트 생성시 정상 확인

메타데이터를 checkpoint-dumpxml 로 저장한 후 마이그레이션 후 checkpoint-create 로 복구 필요해보임

VM 정지 상태에서 incremental 가능 여부 확인

  • 가상머신 종료
  • 가상머신 Incremental 백업 실행
#virsh backup-begin i-2-299-VM backup-inc1.xml
error: failed to get domain 'i-2-299-VM'

VM disk 변경 시 incremental chain 영향 확인

  • 루트 볼륨 FULL 백업 후 체크포인트1 생성, 내부 데이터 작업 진행 후 incremental 백업 후 체크포인트2 생성 후 리스트 확인
# virsh checkpoint-list i-2-299-VM
 Name   Creation Time
-----------------------------------
 chk1   2026-03-16 13:40:43 +0900
 chk2   2026-03-16 13:43:31 +0900
  • 데이터 디스크 연결 후 체크포인트 리스트 확인
# virsh checkpoint-list i-2-299-VM
 Name   Creation Time
-----------------------

디스크 topology 변경(attach/detach) 시 checkpoint chain이 무효화됨 확인

volume resize 후 incremental 백업 가능 여부 확인

  • 루트 볼륨 FULL 백업 후 체크포인트1 생성, 내부 데이터 작업 진행 후 incremental 백업 후 체크포인트2 생성 후 리스트 확인
# virsh checkpoint-list i-2-299-VM
 Name   Creation Time
-----------------------------------
 chk1   2026-03-16 13:40:43 +0900
 chk2   2026-03-16 13:43:31 +0900
  • 디스크 크기 변경 후 incremental 백업 후 작업 결과 확인 시
# virsh domjobinfo i-2-299-VM --completed
Job type:         Completed
Operation:        Backup
Time elapsed:     680          ms
File processed:   100.058 GiB
File remaining:   0.000 B
File total:       100.058 GiB

resize 후 incremental이 아니라 사실상 Full 수준으로 백업이 수행된 상황이며, libvirt 공식 권장은 resize 발생 시 체인 reset 후 full backup 수행

checkpoint metadata 없이 incremental restore 가능 여부 확인

  • 체크포인트 XML 저장
#virsh checkpoint-dumpxml i-2-299-VM chk1 > chk1.xml
  • 체크포인트 삭제
#virsh checkpoint-delete i-2-299-VM chk1
  • XML로 체크포인트 재추가
#virsh checkpoint-create VM chk1.xml
  • incremental 백업 실행

checkpoint xml만 복구하면 incremental chain 유지 가능 확인

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions