精华内容
下载资源
问答
  • qemu虚拟机的关机方式

    千次阅读 2020-01-31 11:19:08
    qemu虚拟机的关闭方式主要包括如下几种方式: 通过qemu monitor的... 在虚拟机内使用Guest OS自带的关机按钮进行关闭。 通过qemu monitor的quit命令进行关闭。 在libvirt对qemu进行管理的情况下,通过virsh d...

    qemu虚拟机的关闭方式主要包括如下几种方式:

    1. 通过qemu monitor的system_powerdown命令进行关闭,
    2. 在libvirt对qemu进行管理的情况下,通过virsh shutdown命令进行关闭。
    3. 在虚拟机内使用Guest OS自带的关机按钮进行关闭。
    4. 通过qemu monitor的quit命令进行关闭。
    5. 在libvirt对qemu进行管理的情况下,通过virsh destroy命令进行关闭。
    6. 在主机端通过Ctrl+C强制关闭qemu进程关闭虚拟机。
    7. kill/pkill命令结束进程

    1. qemu monitor的system_powerdown命令

    system_powerdown是qemu monitor中支持的一个命令。

    qemu进程的主循环位于vl.c:main_loop(),在主循环会循环调用main_loop_should_exit()判断是否结束主循环。

    main_loog_should_exit()函数中会通过qemu_powerdown_requested()函数判断qemu虚拟机是否接收到了powerdown的请求,如果有该请求,则调用qemu_system_powerdown(),该函数先发出POWERDOWN的事件,然后通知注册到powerdown的notifier函数

    不同的主板,会注册不同的powerdown notifier

    以piix4为例,在piix4_pm_realize函数中,会将piix4_pm_powerdwon_req()这个notify handler注册到qemu虚拟机的powerdown notifier中。

    该notifier handler主要是调用acpi_pm1_evt_power_down()函数,在该函数中,会检测在该虚拟机主板上,电源键(Power Button)是否被使能,如果被使能了,则模拟该电源键被按下,发送SCI(System Control Interrupt)中断,触发Guest OS进行关机。

    所以qemu monitor的system_powerdown命令本质上是模拟电源键被按下触发SCI中断的动作。至于Guest OS是否会关机,则由Guest OS的行为配置决定的,如在Windows中,如果在电源设置中,将Windows的电源按键设置为不响应,则发送system_powrdown命令后,Windows将不做响应,无法实现虚拟机关机,除非Windows中将电源键功能设置为关机。

    2. virsh shutdown命令

    virsh shutdown命令会调用到libvirt的virDomainShutdown()函数,该函数会继续调用不同类型hypervisor的shutdown函数,如对于qemu而言,它会调用到qemu dirver对应的domainShutdown,即qemuDomainShutdown(),在该函数中,会执行如下操作:

    1. 检测Qemu Guest Agent是否存在,如果存在并且可用,则通过Qemu Guest Agent告知Guest OS进行关机操作。
    2. 如果Qemu Guest Agent不存在,则检测qemu虚拟机是否支持ACPI Power Button,如果支持,则调用qemuMonitorSystemPowerdown()函数,即在qemu monitor中,发送system_powerdown命令,模拟电源键被按下并出发SCI的动作,触发Guest OS进行关机。

    所以,在不用Qemu Guest Agent的情况下,virsh shutdown命令其实就对应到qemu monitor中的system_powerdown命令,只是该命令由libvirt发送。

     

    3. Guest OS关机接口

    在虚拟机内使用Guest OS自带的关机按钮/功能进行关机,以Ubuntu为例,通过systemctl poweroff命令对Ubuntu进行关机,该命令会调用到kernel/power/poweroff.c文件中定义个poweroff_work对应的工作,该工作主要是执行do_poweroff()对系统进行关机。

    kernel/power/poweroff.c:do_poweroff() -> kernel_power_off() ,该函数关闭所有的用户程序和设备,最后调用machine_power_off()函数。

    machine_power_off() -> power_off() -> native_machine_poweroff() -> pm_power_off() 若该Ubuntu运行的虚拟机支持ACPI标准,则pm_power_off将指向acpi_power_off()函数。

    acpi_power_off() -> acpi_enter_sleep_state()

    该函数将会往ACPI标准中规定的寄存器PM1 Control Registers Fixed Hardware Feature Control Bits中的SLP_TYPE和SLP_EN域写相应的数据,让虚拟机主板进入到指定的睡眠状态,即ACPI标准中定义的S0 ~ S5状态。

    而在qemu模拟器方面,在hw/acpi/core.c中会对PM1 Control Registers Fixed Hardware Feature Control Bits的写进行监控,当向SLY_TYP和SLY_EN写特定值的时候,会触发qemu调用qemu_system_shutdown_request()发出shutdown的请求。

    qemu进程的主要循环函数main_loop()中,会循环调用main_loop_should_exit()函数,该函数会检测系统中是否有shutdown的请求发出。若有shutdown的请求,则qemu进程退出主循环,结束并退出qemu虚拟机。

    4. qemu monitor的quit命令

    qemu monitor的quit命令让qemu进程直接退出。

    直接在qemu monitor中输入quit命令,将触发qemu虚拟机直接退出,Guest OS完全不知道虚拟机即将关闭,所以对Guest OS来说,将会直接闪退,类似物理机的直接掉电。

    quit命令将调度到qemu的hmp_quit()函数,该函数将会告知qemu进程在虚拟机关闭的时候退出,同时发出shutdown的请求,qemu进程的主循环main_loop()在执行main_loop_should_exit()检查是否需要退出主循环的时候,将检测到该事件,然后直接退出。

     

    5. virsh destroy命令

    libvirt提供的virsh destroy命令,将调用到qemu driver的qemuDomainDestroy() -> qemuDomainDestroyFlags() -> qemuProcessStop() -> qemuProcessKill()接口,将qemu进程关掉。

    qemuProcessKill()中,将会向qemu进程发送SIGKILL或SIGTERM信号,让qemu进程退出。

     

    在qemu这边,qemu的主进程中,会通过os_setup_signal_handling()设置对信号的响应。

    termsig_handler() -> qemu_system_killed(),在qemu_system_killed()中,将会生成shutdown的请求,并且shutdown请求的原因是host signal。该请求将会让qemu进程的主循环退出,不等Guest OS准备好关机。

     

    6. Ctrl+C组合键

    在主机端通过Ctrl+C组合键,让qemu进程退出,其实是向qemu进程发送SIGINT信号,该信号的处理方式和SIGTERM是一样的,也就是最后调用到qemu_system_killed()函数,发出shutdown请求,让qemu主进程退出,同时记录下shutdown的原因为host signal。

     

    7. kill/pkill命令

    在主机端使用kill -9 pid或者pkill -9 pname的方式,也是向主机进程发送SIGKILL信号,让进程退出的。

    展开全文
  • 本文主要讲解在VGA GPU passthrough成功后,如果关闭虚拟机windows,虚拟机的进程qemu-system-x86_64结束,然而宿主机linux(ubuntu,centos7)并没有因为虚拟机的关闭而关机,而此时屏幕不再显示,鼠标键盘而无法...

    转载注明:http://blog.csdn.net/hubbybob1/article/details/77199162
    本文主要讲解在VGA GPU passthrough成功后,如果关闭虚拟机windows,虚拟机的进程qemu-system-x86_64结束,然而宿主机linux(ubuntu,centos7)并没有因为虚拟机的关闭而关机,而此时屏幕不再显示,鼠标键盘而无法使用,这样很不科学,因此,有两种方案,
    一是将解绑的VGA和USB重新解绑回来,然后咱绑定到相应的PCI上去,这个方法比较难实现,解绑回来好可以,但是再绑定本身的驱动,是不立即生效的,原因还不知道;
    二是编写脚本在虚拟机关机后,宿主机linux也关机,这个方法很容易实现,也很科学,对于用户而言,根本无需关机两次。
    学习VGA GPU 和USB穿透,查看下面两个博客:
    http://blog.csdn.net/hubbybob1/article/details/73920296
    http://blog.csdn.net/hubbybob1/article/details/77101913

    思路就是写一个循环检测的shell脚本,那么就直接代码了

    #!/bin/bash
    
    #调用qemu进程脚本,启动虚拟机,当前目录下,也可以家绝对路径
    ./qemu.sh
    
    #打印出当前的qemu进程:grep qemu-system-x86_64查询该进程,grep -v "grep" 去掉grep进程
    QemuThread=`ps -ef | grep qemu-system-x86_64 | grep -v "grep"`
    echo $QemuThread
    
    #查qemu-system-x86_64进程个数:wc -l 返回行数
    count=`ps -ef | grep qemu-system-x86_64 | grep -v "grep" | wc -l`
    echo $count
    
    sec=2 #2秒检测一次
    #开始一个循环,以判断进程是否关闭
    
    for((var=0;var<1000;))
    do
    #每次都检测是否进程退出
     count=`ps -ef | grep qemu-system-x86_64 | grep -v "grep" | wc -l`
     if [ $count -gt 0 ]; then
      #若进程还未关闭,则脚本sleep 2秒
      echo sleep $sec second the $var time, the QEMU thread is still alive
      sleep $sec
     else
      #若进程已经关闭,则跳出循环
      echo "break 退出循环"
      break
     fi
    done
    
    #if [ $count -eq 0 ]; then
    # echo "nohup startMethodServer.sh &"
    # nohup startMethodServer.sh &
    #else
    # echo "It's better to check the thread!!!"
    #fi
    
    #调用关机脚本
    #nohup startMethodServer.sh &
    shutdown -h now
    #ls
    #reboot

    真正在写脚本的时候可以把那些打印信息全部去掉

    展开全文
  • qemu虚机扩容

    2020-08-07 14:46:17
    #确保虚机为关机状态 virsh list Id Name State ---------------------------------------------------- 10 qemu_test running # qemu_test映射的qcow文件为test.qcow2 qemu-img info test.qcow2 > image: /...
    #确保虚机为关机状态
    virsh list
    
     Id    Name                           State
    ----------------------------------------------------
     10    qemu_test                      running
    
    # qemu_test映射的qcow文件为test.qcow2
    qemu-img info test.qcow2
    
    >
    image: /home/test.qcow2
    file format: qcow2
    virtual size: 3.0G (3221225472 bytes)
    disk size: 912M
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
    
    # shutdown
    virsh shutdown qemu_test
    
    >
    Domain qemu_test is being shutdown

    扩容:

    qemu-img resize test.qcow2 +5G
    
    >
    Image resized.
    
    
    # 查看
    qemu-img info test.qcow2

    进入虚机:

    # 查看
    fdisk -l
    
    >
    Disk /dev/vda: 5516 MB, 7516192768 bytes, 14680064 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x000e6c2f
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *        2048     1026047      512000   83  Linux
    /dev/vda2         1026048     6291455     2632704   83  Linux
    
    
    # 创建磁盘分区
    fdisk /dev/vda
    
    # m -> n -> Enter (default partition) -> w(exit)
    > /dev/vda3
    
    # 刷新分区
    partprobe
    
    # 格式化
    mkfs -t ext4 /dev/vda3
    
    # mount
    mount /dev/vda3 /home
    
    # 查看
    df -h
    
    # 查看uuid
    blkid
    
    # 开启自动挂载
    vim /etc/fstab
    
    UUID=ef662434-4f76-4b78-a540-3b8727ec5b96 /                       ext4    defaults        1 1
    UUID=409e3f0f-6959-4e40-939f-6ba8d75e3fdb /boot                   ext4    defaults        1 2
    UUID=849c471e-8318-4990-85b7-703dd1fdac35 /home/soft              ext4    defaults        1 1
    

     

    展开全文
  • yum install qemu-img qemu-kvm qemu-kvm-tools virt-manager virt-viewer virt-v2v virt-top libvirt libvirt-python libvirt-client python-virtinst bridge-utils tunctl 问题解决 1、启动virt-manger报错:...

    环境

    系统:redhat6.3
    在虚拟机安装时,需要启用CPU的虚拟化功能(关机状态下方能勾选)
    在这里插入图片描述

    安装

    安装kvm

    yum install qemu-img qemu-kvm qemu-kvm-tools virt-manager virt-viewer virt-v2v virt-top libvirt libvirt-python libvirt-client python-virtinst bridge-utils tunctl
    

    问题解决

    1、启动virt-manger报错:unsupported format character
    原因:virt-manager版本导致
    解决方法:
    卸载0.9.0-34版本

    yum remove virt-manager
    

    安装0.9.0-31版本

    yum -y install virt-manager-0.9.0-31.el6.x86_64.rpm
    

    2、KVM is not available

    modprobe kvm 	加载kvm模块
    lsmod |grep kvm 查看是否加载
    

    虚机安装

    打开图形管理界面virt-manager
    在这里插入图片描述
    新建虚机
    在这里插入图片描述
    选择镜像
    在这里插入图片描述
    配置选择按照默认,完成配置
    在这里插入图片描述

    文章参考

    https://blog.csdn.net/u013378306/article/details/88370078
    https://blog.51cto.com/11293100/2286232

    展开全文
  • QEMU虚机关闭流程

    2019-11-29 16:28:26
    本文以虚拟机关机为例,试图描述虚拟化整个中断框架和流程
  • libvirt/qemu特性之快照

    千次阅读 2014-02-22 22:46:14
    快照分类 磁盘快照 对磁盘数据进行快照。主要用于虚拟机备份等场合。 按快照信息保存为可以可以...关机态快照 数据可以保证一致性。 运行态快照 数据无法保证一致性,类似与系统crash后的磁盘数据。使用是可能需要f
  • 目的nova 下的 instance 可以通过 qemu guest agent 进行管理, 包括 开关机, 监控, 等操作 instance kernel 默认需要大于 2.6.28
  • VMware安装centos或其他linux系统后,安装qemu-kvm虚拟机 KVM是Kernel-based Virtual Machine的简称,是一个开源的...在虚拟机安装时,需要启用CPU的虚拟化功能(关机状态下方能勾选) 二、kvm安装步骤 1、安装qemu-kv...
  • 虚拟机的迁移: ...冷迁移:需要关机 cd images scp 域.qcow2 ip:/root rsync -avz比scp更快 “若是也能c” 哈哈哈   热迁移: 宿主机 KVM VMWare    NFS 为什么说很快?因为nfs挂载
  • 内容系本人学习、研究和总结,如有雷同,实属荣幸! 快照分类 磁盘快照 对磁盘数据进行快照。主要用于虚拟机备份等场合。...关机态快照 数据可以保证一致性。 运行态快照 数据无法保
  • 问题描述:KVM上的虚拟机centos7无法使用virsh shutdown命令关机。且无法使用acpid服务关机。 解决方案:使用qga(qemu-guest-agent)工具
  • sysrq有多种功能,对于ARM Linux这种嵌入式没键盘...实验平台:QEMU模拟的ARM Linux内核版本: # uname -aLinux (none) 4.0.0-rc1+ #46 SMP Thu Nov 2 20:43:41 CST 2017 armv7l GNU/Linux一键内核崩溃# cd /proc/# ec
  • Linux KVM 安装使用手册

    2021-05-01 18:11:41
    virsh 管理 qemu 虚拟机的信息三、使用1、查看所有虚拟机状态2、查看指定虚拟机状态3、手动启动虚拟机4、手动关闭虚拟机5、直接通过主机配置文档启动主机6、关机虚拟机7、重启虚拟机8、手动挂起/恢复虚拟机9、断电...
  • 公司IDC机器用的kvm, 需要克隆机器做水平扩展, 但是virt-manager的克隆功能需要关机, 开机状态下直接复制qcow2磁盘文件启动后会提示磁盘错误 安装qemu-kvm包 yum install -y qemu-kvm 或 apt-get install qemu-kvm ...
  • yum install -y qemu-kvm.x86_64 qemu-kvm-tools.x86_64 python-virtinst.noarch qemu-img.x86_64 bridge-utils.x86_64 libvirt virt-manager 2.验证当前主机是否满足KVM的运行条件: 将虚拟机关机后,处理器开启...
  • 2017年2月15日实习日记

    2017-02-16 00:06:52
    可能是qemu的问题,也可能是 .img 文件多次重启(之前几乎都是强制杀死qemu进程而关机的,img可以有所损伤)。 不过终于加载了 vgpu。 发个图庆祝一下,哈哈,还好没放弃。 Mentor说运行帧数不对,明天再看看是...
  • 创建/还原/删除快照

    千次阅读 2018-08-06 15:43:46
    创建/还原/删除快照 快照的作用:在虚拟机...虚拟机必须关机下进行 路径/var/lib/libvirt/images Øqemu-img快照管理基本操作: 创建快照:qemu-imgsnapshot-c快照名qcow2磁盘 列出快照:qemu-imgsnapshot-lqc...
  • KVM静态迁移

    2020-03-21 17:05:12
    1.静态迁移KVM 先关机 virtsh shutdown kvmname scp /var/lib/libvirt/images/KVM.qcow2 root@ipaddress:/var/lib/libvirt/images/ scp /etc/libvirt/qemu/KVM.xml root@ipaddress:/etc/libvirt/qemu...
  • kvm快照应用

    2012-09-17 17:33:17
    kvm也具有快速恢复的方法,前提是必须处于关机状态才可以执行,否则会出现各种莫名其妙的问题 创建镜像: qemu-imgsnapshot-cinitialsmokeping_falcon_test0917.qcow2 恢复镜像: qemu-imgsnapshot-...
  • kvm的基本命令使用

    2021-01-13 19:23:36
    虚拟机域的开关机 开机: virsh start 虚拟机名称 关机:virsh shutdown 虚拟机名称 强制关机:virsh destroy 虚拟机名称 1、导出配置: virsh dumpxml 原配置文件 > 新配置文件 xml配置文件默认在/etc/libvrit/...
  • 原理:源主机和目标主机有相同的目录结构,源主机上的VM,可以不关机的情况下热迁移。速度比冷迁移要快。 001.png 主机名 IP规划 内存 所需软件 网络 虚拟化 备注 KVM01 10.0.0.11 2G yum install -y ...
  • kvm 虚拟机分配内存和cpu

    千次阅读 2019-07-24 11:38:50
    虚拟机不关机修改,否则会显示找不到cpu文件 ①切换管理员用户 sudo su ②找到虚拟机文件 cd /etc/libvirt/qemu/XXX.xml ③编辑文件 修改memory 和 vcpu ④关闭虚拟机 virsh shutdown XXX(去掉xml)(始终在/etc/...
  • KVM管理虚拟机命令

    2018-08-11 12:25:42
    KVM基本功能管理 ...cd /etc/libvirt/qemu 下有.xml的文件 查看虚拟机的状态 virsh list --all 虚拟机关机与开启 virsh shutdown c1 //关机 virsh start c1 //开机 强行关闭虚拟 virsh destroy cc...
  • 一个KVM虚机在宿主机中其实是一个qemu-kvm进程,与其他Linux进程一样被调度 一个KVM虚拟机就是宿主机上的一个进程 将VM1关机,然后查看进程 将VM1开机,然后查看进程 虚机中的每一个虚拟vCPU则对应qemu-kvm...
  • 本文是继续上一篇文章kvm安装,...ls /etc/libvirt/qemu/ 2、列表查看所有虚拟机的状态 virsh list --all 3、虚拟机开机、关机、开机自启等操作 1)开机 virsh start 虚拟机名称 2)关机(两种方式) //关机 virsh ...
  • 1、将KVM虚拟机关机2、找到虚拟机磁盘文件所在路径3、执行命令cd/path/to/vm_disk qemu-imgconverttest_vm.img-Ovmdk/tmp/test_vm.vmdk#将img格式转换为vmdk qemu-imgconverttest_vm.qcow2-Ovmdk/tmp/test_vm.vmdk#...
  • 1、emulator模拟器实际上是一个基于qemu的arm环境模拟器,其源码在external/qemu里面,编译出来的目录在/host/linux-x86。 export ANDROID_PRODUCT_OUT=~/google_r2/out/target/product/generic export PATH=$PATH...
  • centos上安装kvm系统

    2020-08-05 17:37:42
    今天在自己电脑的虚拟机系统centos6.5上装了一个KVM(基于内核的虚拟机) 安装准备: 在虚拟机系统处理器选择虚拟引擎模式(关机修改) 关闭防火墙和selinux ...yum -y install kvm kmod-kvm qemu kvm-qemu-img virt-v

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

qemu关机