Есть ли в эмуляторе qemu функция контрольной точки?

Я использую эмулятор qemu для aarch64 и хочу создать внешнюю контрольную точку (или быструю переадресацию), чтобы сохранить все, что мне нужно для перезапуска системы, только с того момента, когда я создаю контрольную точку. (На самом деле, я хочу пропустить шаг загрузки) Я нашел кое-что только по снапшоту ВМ qemu и быстрой переадресации, но это не работает для эмулятора. Есть ли функция контрольной точки для эмулятора qemu?


person Zhang Jiaqi    schedule 24.10.2016    source источник


Ответы (2)


Снимок savevm должен делать то, что вы хотите. Короткий ответ: вам нужно настроить диск QCOW2 для сохранения моментальных снимков, а затем в мониторе вы можете использовать команду «savevm», чтобы сделать снимок. Затем параметр командной строки «-loadvm» позволит вам продолжить оттуда. Все это отлично работает в эмуляции AArch64.

https://translatedcode.wordpress.com/2015/07/06/tricks-for-debugging-qemu-savevm-snapshots/ содержит более подробное руководство.

person Peter Maydell    schedule 31.10.2016
comment
Может ли гость сообщить QEMU, когда делать снимок? - person Ciro Santilli 新疆再教育营六四事件ۍ 10.02.2018

Минимальный пример

Ответ Питера только что сработал для меня, но позвольте мне привести полностью воспроизводимый пример.

Я полностью автоматизировал все по адресу: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/1e0f0b492855219351b0bfa2eec4d3a6811fcaaa#snapshot

Ключевым шагом является преобразование изображения в qcow2, как описано по адресу: https://docs.openstack.org/image-guide/convert-images.html

cd buildroot/output.x86_64~/images
qemu-img convert -f raw -O qcow2 rootfs.ext2 rootfs.ext2.qcow2

И последняя использованная команда QEMU:

./buildroot/output.x86_64~/host/usr/bin/qemu-system-x86_64 -m 128M -monitor telnet::45454,server,nowait -netdev user,hostfwd=tcp::45455-:45455,id=net0 -smp 1  -M pc -append 'root=/dev/vda nopat nokaslr norandmaps printk.devkmsg=on printk.time=y console=ttyS0' -device edu -device virtio-net-pci,netdev=net0 -drive file=./buildroot/output.x86_64~/images/rootfs.ext2.qcow2,if=virtio,format=qcow2 -kernel ./buildroot/output.x86_64~/images/bzImage  -nographic

Чтобы проверить это, войдите в виртуальную машину и запустите:

i=0; while true; do echo $i; i=$(($i + 1)); sleep 1; done

Затем в другой оболочке откройте монитор:

telnet localhost 45454
savevm my_snap_id

Подсчет продолжается. Затем, если мы загрузим виртуальную машину:

loadvm my_snap_id

отсчет возвращается к тому месту, где мы сохранили. Это показывает, что состояния ЦП и памяти были восстановлены.

Мы также можем убедиться, что состояние диска также изменилось на противоположное. Гость:

echo 0 >f

Монитор:

savevm my_snap_id

Гость:

echo 1 >f

Монитор:

loadvm my_snap_id

Гость:

cat f

И выход 0.

person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 10.02.2018
comment
Я преобразовал ubuntu-16.04-server-cloudimg-arm64-uefi1.img с помощью приведенной выше команды, однако при попытке загрузить новый образ qcow2 он оказывается в: UEFI Interactive Shell v2.1 EDK II UEFI v2.50 ( EDK II, 0x00010000) Таблица сопоставления BLK3: Псевдоним(ы): VenHw(F9B94AE2-8BA6-409B-9D56-B9B417F53CB3) BLK0: Псевдоним(ы): VenHw(8047DB4B-7E9C-4C0C-8EBC-DFBBAACACE8F) BLK1: Псевдоним(ы) ) - person hayesti; 15.08.2020
comment
@hayesti аргхх, значит, замена ext на qcow2 сама по себе вызывает проблемы? Я рекомендую следующее: 1) в качестве отчаянной попытки попробуйте установить EFI, как показано на superuser.com/questions/942657/ и фактически предоставить его в QEMU (там не делается) 2) создать новый вопрос и СС Питер :-) - person Ciro Santilli 新疆再教育营六四事件ۍ 16.08.2020