当前位置:   article > 正文

qemu-kvm创建虚机整体流程以及问题解决_qemu虚拟机使用教程

qemu虚拟机使用教程

    关于qemu-kvm介绍不在阐述,本文以实际工作项目中所遇问题总结下qemu-kvm的创建过程,期间融合了各种实际碰到的问题,以此记录并给后来者提供一定参考。

直接进入主题:

1.首先我们需要检查一下我们的当前主机是否支持cpu虚拟化:

(若没有请#modprobe kvm,或者某些内核需安装kernel-**-kvm.rpm)

# lsmod | grep kvm

kvm_intel             253952  6

kvm                       811008  1 kvm_intel

irqbypass              16384  3 kvm

安装qemu-kvm包

 # yum -y install qemu-kvm

2.安装kvm虚拟机要提前做好准备工作,包括iso文件(提前下载好),硬盘文件linux.qcow2,虚拟机配置文件linux.xml(也可参考网上某些模板)

  1. <domain type='kvm'>
  2. <name>linux</name>
  3. <memory unit='GiB'>8</memory>
  4. <vcpu>4</vcpu>
  5. <os>
  6. <type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type>
  7. </os>
  8. <features>
  9. <acpi/>
  10. </features>
  11. <cpu mode='host-passthrough'>
  12. </cpu>
  13. <clock offset='utc'/>
  14. <on_poweroff>shutdown</on_poweroff>
  15. <on_reboot>restart</on_reboot>
  16. <on_crash>destroy</on_crash>
  17. <devices>
  18. <emulator>/usr/libexec/qemu-kvm</emulator>
  19. <disk type='file' device='disk'>
  20. <driver name='qemu' type='qcow2' cache='none'/>
  21. <source file='/root/virbcl/linux.qcow2'/>
  22. <target dev='sda' bus='ide'/>
  23. <boot order='2'/>
  24. </disk>
  25. <disk type='file' device='cdrom'>
  26. <driver name='qemu' type='raw'/>
  27. <source file='/root/virbcl/Linux-xxxx.iso'/>
  28. <target dev='sdb' bus='ide'/>
  29. <readonly/>
  30. <boot order='1'/>
  31. </disk>
  32. <interface type='network'>
  33. <source network='default'/>
  34. <model type='virtio'/>
  35. </interface>
  36. <serial type='pty'>
  37. <target type='isa-serial' port='0'>
  38. <model name='isa-serial'/>
  39. </target>
  40. </serial>
  41. <console type='pty'>
  42. <target type='serial' port='0'/>
  43. </console>
  44. <input type='mouse' bus='ps2'/>
  45. <graphics type='vnc' listen='0.0.0.0'/>
  46. </devices>
  47. </domain>

首先我们需要创建一个虚拟磁盘,相当于我们的系统盘:

  # qemu-img  create -f qcow2  /root/linux.qcow2   40G

Formatting 'linux.qcow2', fmt=qcow2 size=42949672960 cluster_size=65536 lazy_refcounts=off refcount_bits=16

以下开始就可以分为qemu安装 或 libvirt安装两种方法了:

a.libvirt辅助安装

首先安装libvirt相应rpm包,然后执行 virsh 命令定义一台虚机(保证光盘、硬盘都在root用户目录下以获得权限)

 # virsh define linux.xml

(若define有qemu:x:107:107报错可参考,没有则跳过此步骤):

 # vim /etc/libvirt/qemu.conf

……

user="root"

group="root"

#  systemctl restart libvirt

执行 virsh 命令启动一台虚机

 # virsh start linux.xml

查看虚拟机状态

# virsh  list --all

 Id    名称                         状态

----------------------------------------------------

17    linux              running

b.纯qemu命令行安装

  1. 创建虚机:
  2. /usr/libexec/qemu-kvm -m 4G -smp 2 -name jcf --enable-kvm -boot d \
  3. -hda /root/linux.img \
  4. -cdrom /root/CentOS-8.5.2111-ppc64le-dvd1.iso \
  5. -vnc :1

        其中上述磁盘.img和光盘.iso需要换成你自己的路径。

3.虚拟机启动后,用VNC新建链接session查看,连接的 ip 地址为宿主机的 ip 地址,可以通过 ip a进行查看。

 此时若vnc链接不到虚拟机,请考虑如下排查手段:

A.如果系统是最小化安装的,要安装xorg-x11-xauth.rpm包 ,不然在使用ssh连接主机时图形无法支持

 # yum -y install xorg-x11-xauth

B.关闭防火墙,关闭SELINUX

#systemctl status firewalld

#systemctl stop firewalld

#systemctl disable firewalld

#getenforce

#setenforce 0

#vim  /etc/selinux/config

……

SELINUX=disable

4.由于第一次进入系统,显示出安装系统的界面,我们正常进行安装就可以了。

安装完成后,系统就写入对应的虚拟磁盘中了,若是通过libvirt安装的,这时重启后会依然进行安装,原因在于linux.xml中配置启动顺序为先iso,后qcow2; 所以需要更改配置文件(xml) 中的启动项,将其从 cdrom 启动改为从磁盘启动。

执行 virsh 命令关闭虚机(shutdown命令失效就用destroy),编辑虚机,重启虚机

 # virsh shutdown linux.xml

# virsh edit linux.xml

# virsh start linux.xml

(其中第二步edit只需将iso和qcow2的 <boot order='1/2'/>顺序数字互换一下即可)

之后便可正常启动虚拟机,进行后续工作。

重启后若虚拟机无法联网,考虑将网络配置由network改成网桥bridge模式。

  1. # virsh edit linux.xml
  2. ……
  3. <interface type='bridge'>
  4. <mac address='52:54:00:ae:d4:8a'/>
  5. <source bridge='virbr0'/>
  6. <model type='virtio'/>
  7. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  8. </interface>

对于用qemu安装的没有此问题,重启系统后就直接是可以运行的操作系统。

5.修改默认登录命令行界面

linux一开始安装完成后是默认进入图形界面的,我们如果想改成命令行,可以用下面命令:

  1. systemctl isolate multi-user.target 切换为多用户模式(命令行模式)
  2. systemctl set-default multi-user.target 设置默认开机为命令行模式

6.后续启动虚机

(1).对于libvirt控制的虚机,直接virsh start xxx即可启动虚机,一般不会报错。此处针对其他架构如ppc而言因为有独立的bios固件,所以经常会报错:failed to find romfile "vgabios-stdvga.bin"

这是因为qemu在启动时会自动去搜寻相匹配的固件bios,常见的路径有

  • /usr/share/qemu/firmware

  • /etc/qemu/firmware

  • $XDG_CONFIG_HOME/qemu/firmware

而ppc需要的启动bios如针对pseries虚机的slof.bin和vga设备的vgabios-stdvga.bin都不会自动放到以上目录中,所以解决办法就是将虚机需要的*.bin直接拷贝至/usr/share/qemu/ 目录下即可,或者通过软连接的方式也行:

  1. ln -s xxx/qemu-6.2.0/pc-bios/slof.bin /usr/share/qemu/slof.bin
  2. ln -s xxx/qemu-6.2.0/pc-bios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin

(2).纯qemu命令行安装的虚机可以继续用命令行启动虚机,只需要-boot 选项的d(光盘启动) 改为c(磁盘启动),所以此时命令行带不带iso的参数都行

  1. 启动虚机:
  2. /usr/libexec/qemu-kvm -m 4G -smp 4 -name bcl-qemu --enable-kvm -boot cd \
  3. -hda /root/linux-qemu.qcow2 \
  4. -vnc :2 -monitor stdio

7.监控&远程登录虚机

A.提供三种命令行添加monitor监控方式:
 

  1. 方式1 stdio直接看
  2. host# qemu-kvm ... -monitor stdio
  3. 方式2 UNIX套接字
  4. host console1# qemu-kvm ... -monitor unix:qemu-monitor-socket,server,nowait //qemu-monitor-socket可任意命名,但console2连接需在本目录下
  5. host console2# nc -U qemu-monitor-socket
  6. host console2# socat - unix-connect:qemu-monitor-socket
  7. 方式3 telnet
  8. host console1# qemu-kvm ... -monitor telnet:127.0.0.1:4444,server,nowait
  9. host console2# telnet 127.0.0.1 4444

B.提供两种命令行host远程登录guest的方式,以便使用MobaXterm远程连接到guest

  1. host console1#qemu-system-ppc64 -m 8G -smp 4 -name pseries --enable-kvm -boot cd -hda linux.img -serial unix:qemu-monitor-socket,server,nowait //qemu-monitor-socket可任意命名,但console2连接需在本目录下
  2. host console2#nc -U qemu-monitor-socket
  3. host console1#qemu-system-ppc64 -m 8G -smp 4 -name pseries --enable-kvm -boot cd -hda linux.img -serial tcp::4444,server=on,wait=off
  4. host console2#telnet 127.0.0.1 4444

其实还有专门的hostfwd命令选项,但由于这个很依赖特定的版本,所以有需要可查询官方手册QEMU User Documentation — QEMU documentation

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/217412
推荐阅读
相关标签
  

闽ICP备14008679号