
Q: QEMU vm을 실행할 수 있는 방법이 있습니까? 온라인 또는 오프라인으로 복원 지점을 저장할 수 있는 옵션이 있습니까?
조사가 포함된 긴 텍스트, 이미 검토한 대안 및 작은 호언장담:
vm 및 디스크의 상태/변경 사항을 저장하고 삭제하는 여러 가지 완전히 호환되지 않는 qemu 방법을 파악하는 데 어려움을 겪고 있습니다.
거기에는-snapshot
깃발. 하지만 아직 끝나지 않은 것 같습니다 (문서 인용
이는 진행 중인 작업이므로 진행에 따라 상황이 변경될 수 있습니다.
)에 따라 달라집니다.게스트 에이전트, 이는 또한 완료되지 않은 것 같고 개발자가 QMP에서 QAPI로 마이그레이션할 때 기어를 변경한 다음 libvirt 과잉 "솔루션" 작업을 위해 중간에 긁어서 다소 손상되었습니다.
두 문서 모두 QEMU 버전 0.16~17을 언급하고 있지만 내 시스템은 모두 버전 7.2+이므로 내부 lib 버전인지 아니면 정말 오래된 문서인지 확실하지 않습니다.
그럼 거기에파일 시스템 스냅샷 -drive file=hda.qcow2,snapshot=on
내 시스템에서는 작동하지 않는 것 같습니다. 내 말은, 해당 옵션을 사용할 때 모든 것이 항상 버려지기 때문에 작동한다는 것입니다. 실제로 QCOW2 이미지에 대한 스냅샷에 데이터를 커밋할 수 있는 방법은 없습니다.
그렇다면,savevm
모니터 명령, 그러나 실제로 QCOW2 스냅샷 기능을 활용하는 것으로 보이는 유일한 기능인 동시에 바람직하지 않은 CPU/메모리 상태도 많이 저장합니다(나중에 문제를 일으키는 성가심이 더 많으며 드문 QA 사례에만 실제로 도움이 됩니다). , 그리고 다음 실행 시 쉽게 폐기하고 QCOW2 변경 사항만 유지하는 방법이 없습니다)
그리고 내가 원했던 것이 있습니다. 항상 변경 사항을 커밋하는 방법이지만 머신이 커밋될 때 방법이 있습니다.오프라인그 지점을스냅샷으로 저장.
그러나 마지막 방법은 qemu 및 이미지와 완전히 연결이 끊어졌습니다. 저장 상태를 추가하는 대신 진행하면서 새 파일 이름을 만들어야 합니다.
이상적인 상태는 이러한 오프라인 상태 방법을 사용하지만 다른 파일 대신 내부 QCOW2 스냅샷 지원을 사용하는 것입니다.
마지막으로,다른 옵션이것이 마지막 오프라인 사용 사례이지만 온라인에서 수행되었습니다. 즉, vm을 실행하는 동안 qemu 에이전트를 통해 실행을 일시 중지하고, 외부 호스트에 새 스냅샷 파일을 생성하고, 실행 중인 인스턴스에 새 스냅샷 오버레이로 전환하고 실행을 재개하도록 지시합니다.
답변1
예측 가능하다는 말이 무슨 뜻인지 이해하지 못하지만 다음을 찾고 계실 것 같습니다.
List, apply, create or delete snapshots in image FILENAME.
qemu-img snapshot \
[--object OBJECTDEF] [--image-opts] [-U] [-q] \
[-l | -a SNAPSHOT | -c SNAPSHOT | -d SNAPSHOT] FILENAME
Parameters to snapshot subcommand:
SNAPSHOT
Is the name of the snapshot to create, apply or delete
-a Applies a snapshot (revert disk to saved state)
-c Creates a snapshot
-d Deletes a snapshot
-l Lists all snapshots in the given image
(qemu-img 맨페이지에서 &https://www.qemu.org/docs/master/tools/qemu-img.html#cmdoption-qemu-img-commands-arg-snapshot)
이 명령은내부qcow2 vm 이미지 내의 스냅샷/체크포인트(다른 디스크 형식과 작동하는지 확실하지 않음).
qemu-img snapshot create -f qcow2 -b <backing.file> -F qcow2 <image.file>
( 디스크에 새로운 이미지 파일을 생성하고 기존 이미지 파일을 백업 파일로 사용하는 형식과 다릅니다 . - 불변 아카이브에 적합합니다.)
특정 qemu 버전에서 지원되는 전체 기능 목록을 보려면 qemu-img --help
출력을 확인하세요.
예:
$ qemu-img snapshot -l myamazingqemuvm.qcow2
$ qemu-img snapshot -c testing myamazingqemuvm.qcow2
$ qemu-img snapshot -l myamazingqemuvm.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT
1 testing 0 B 2023-05-21 00:57:50 00:00:00.000 0
$ qemu-img snapshot -d testing myamazingqemuvm.qcow2
$ qemu-img snapshot -l myamazingqemuvm.qcow2
$
스냅샷을 생성하려면,qemu-img
쓰기 잠금이 필요합니다즉, 오프라인 VM에서만 작동한다는 의미입니다.
생성하려면스냅 사진~에온라인 VM, 실행 중인 프로세스 내에서 "HMP" 명령을 사용해야 합니다 qemu-system
.
(qemu) savevm my_snapshot
(qemu) loadvm my_snapshot
스냅샷을 각각 저장하고 로드합니다. 터미널 시작 VM에서 이러한 콘솔을 얻으려면 다음 monitor
인수를 사용하여 시작할 수 있습니다.
qemu-system-x86_64 [...] -monitor unix:/tmp/qemu-mon_${VMNAME}.sock,server,nowait
그러면 VM과 통신하기 위한 Unix 소켓이 생성됩니다.
#!/bin/sh
#
# connect to qemu monitor socket
# disconnect from it with Ctrl-C
MACHINE="${1}"
SOCKET="/tmp/qemu-mon_${MACHINE}.sock"
echo "CONNECTING TO ${MACHINE} ..."
socat ${SOCKET} STDIN
그러면 당신이 해야 할 일은
$ ./qemu-monitor.sh myamazingqemuvm
CONNECTING TO myamazingqemuvm ...
QEMU 5.2.0 monitor - type 'help' for more information
(qemu) savevm testsnap
savevm testsnap
(qemu) loadvm testsnap
loadvm testsnap
...그리고 다시 오프라인이 되면 다음을 사용하여 다시 전환할 수 있습니다 qemu-img snapshot
.
$ qemu-img snapshot -l myamazingqemuvm.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT
1 testing 0 B 2023-05-21 00:57:50 00:00:00.000 0
2 testsnap 14.3 MiB 2023-05-21 01:03:45 00:05:32.995