• [技术干货] 【虚拟化】CentOS7.7直接使用qemu安装虚拟机时使能--ebable-kvm选项卡主
    【虚拟化】CentOS7.7直接使用qemu安装虚拟机时使能--ebable-kvm选项卡主                   问题1       问题描述:编译安装qemu-4.2.0后,使用qemu安装OS时,使能--enable-kvm后卡主,不使能--enable-kvm则能正常进入安装界面1)使能--enable-kvm的安装命令,安装后卡主:qemu-system-aarch64  -bios /home/QEMU_EFI.bios -M virt -m 8G  -cpu host --enable-kvm  -cdrom /home/OS/CentOS-7-aarch64-Everything-1810.iso –nographic –curses2)不使能--enable-kvm的安装命令,安装后能正常进入安装界面:qemu-system-aarch64 -bios QEMU_EFI.bios -M virt -m 8G -cpu cortex-a57 -cdrom home/OS/CentOS-7-aarch64-Everything-1810.iso -nographic -curses编译qemu-4.2.0wget https://download.qemu.org/qemu-4.2.0.tar.xztar -xf qemu-4.2.0.tar.xzcd qemu-4.2.0./configure –prefix=/usr/local/qemu-4.2.0make -j 16 && make install 2       问题分析:1.尝试在启动命令中添加串口输出-serial file:/tmp/serial.out,发现串口无任何输出,串口参数设置参考:http://blog.sina.com.cn/s/blog_a1e6528101019xmm.html2.换到CentOS7.6操作系统执行同样命令,发现有coredump报错:qemu-system-aarch64: PMU: KVM_SET_DEVICE_ATTR: Invalid argumentqemu-system-aarch64: failed to set irq for PMUAborted (core dumped)找到解决办法https://vanducuy.wordpress.com/2019/09/09/qemu-install-fedora-28-on-aarch64-failed/,需要添加-machine gic-version=33.换到CentOS7.7上添加-machine gic-version=3,成功进入安装界面,问题解决3       问题结论:CentOS7.7上进程无法coredump,在CetnOS7.6上执行coredump,根据报错发现需要指定GICV3的版本,添加-machine gic-version=3选项后解决。
  • [交流分享] OS的initrd启动过程小结
    1 qemu-kvm1.1 qemu-kvmKVM只负责CPU和内存的虚拟化,加载了它以后,用户就可以进一步通过工具创建虚拟机(KVM提供接口),但仅有KVM还是不够的,用户无法直接控制内核去做事情(KVM只提供接口,怎么创建虚拟机,分配vCPU等并不在它上面进行),还必须有个运行在用户空间的工具才行,KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,并对其进行了修改,最后形成了QEMU-KVM。在Qemu-KVM中,KVM运行在内核空间,Qemu运行在用户空间,实际模拟创建、管理各种虚拟硬件,Qemu将KVM整合了进来,通过/ioctl 调用 /dev/kvm,从而将CPU指令的部分交给内核模块来做,KVM实现了CPU和内存的虚拟化,但KVM不能虚拟其他硬件设备,因此Qemu还有模拟IO设备(磁盘,网卡,显卡等)的作用,KVM加上Qemu后就是完整意义上的服务器虚拟化。QEMU-KVM具有两个功能:1>提供对cpu,内存(KVM负责),IO设备(QEMU负责)的虚拟2>对各种虚拟设备的创建,调用进行管理(QEMU负责)1.2 libvirtlibvirt是一个针对各种虚拟化平台的虚拟机管理的API库,libvirt本身不是一种工具,它是一种可以建立工具来管理操作系统的API。libvirt本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。Libvirt可以简单的认为是个虚拟机管理工具,仍然需要通过用户空间的QEMU来与KVM进行交互qemu-kvm启动虚拟机需要指定kernel和initrd以及append等信息,这些都是作为qemu-kvm的启动参数指定的:kernel : 提供内核镜像,bzImageinitrd : 提供initramfsappend : 提供内核参数,指引rootfs所在分区,指引init命令路径2 initrd2.1 initrd启动流程初始RAM磁盘(initrd)是在实际根文件系统(rootfs)可用之前挂载到系统中的一个初始根文件系统(initramfs)。initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。然后内核会将这个 initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。Initrd启动方式中在切根到rootfs之前的各个阶段服务分别是cmdline|pre-udev|pre-trigger|initqueue|pre-mount|mount|pre-pivot|cleanup每个阶段都会有相应的打印日志,比如进入cmdline阶段如下:一个正常的启动流程会拉起很多服务,有些服务是在同一阶段并行拉起的,但是有些服务是有先后顺序的,先后顺序会在服务的配置文件中定义,比如dracut-pre-udev.service,它的前置服务是dracut-cmdline.service,后置服务是systemd-udevd.service和dracut-pre-trigger.service。这些服务的配置文件一般存放在lib/systemd/system/或/etc/systemd/system目录下,不过实际上这些服务是dracut中的模块,如下:更详细的各服务的先后顺序如下图所示,红色显示的服务是基础服务,一般在启动过程中都会有打印,而且可以break进入调试,具体调试方式见下一小节:                                    systemd-journal.socket                                               |                                               v                                    dracut-cmdline.service                                               |                                               v                                    dracut-pre-udev.service                                               |                                               v                                     systemd-udevd.service                                               |                                               vlocal-fs-pre.target                dracut-pre-trigger.service         |                                     |         v                                     v (various mounts)  (various swap  systemd-udev-trigger.service         |           devices...)               |             (various low-level   (various low-level         |               |                     |             services: seed,       API VFS mounts:         v               v                     v             tmpfiles, random     mqueue, configfs,  local-fs.target   swap.target     dracut-initqueue.service    sysctl, ...)        debugfs, ...)         |               |                     |                    |                    |         \_______________|____________________ | ___________________|____________________/                                              \|/                                               v                                        sysinit.target                                               |                             _________________/|\___________________                            /                  |                    \                            |                  |                    |                            v                  |                    v                        (various               |              rescue.service                       sockets...)             |                    |                            |                  |                    v                            v                  |              rescue.target                     sockets.target            |                            |                  |                            \_________________ |                                 emergency.service                                              \|                                         |                                               v                                         v                                         basic.target                             emergency.target                                               |                        ______________________/|                       /                       |                       |                       v                       |            dracut-pre-mount.service                       |                       |                       |                       v                       |                  sysroot.mount                       |                       |                       |                       v                       |             initrd-root-fs.target           (custom initrd services)            |                       |                       v                       |             dracut-mount.service                       |                       |                       |                       v                       |            initrd-parse-etc.service                       |                       |                       |                       v                       |            (sysroot-usr.mount and                       |             various mounts marked                       |               with fstab option                       |                x-initrd.mount)                       |                       |                       |                       v                       |                initrd-fs.target                       \______________________ |                                              \|                                               v                                          initrd.target                                               |                                               v                                    dracut-pre-pivot.service                                               |                                               v                                     initrd-cleanup.service                                          isolates to                                    initrd-switch-root.target                                               |                                               v                        ______________________/|                       /                       |                       |        initrd-udevadm-cleanup-db.service                       |                       |           (custom initrd services)            |                       |                       |                       \______________________ |                                              \|                                               v                                   initrd-switch-root.target                                               |                                               v                                   initrd-switch-root.service                                               |                                               v                                          switch-root2.2 调试若是哪个环节出了问题,可以打断点进入shell界面,方法是在append参数中添加,比如切根失败了,可以在cleanup的时候进入,然后手动尝试切根chroot:rd.break=断点处(如cleanup)其他常用的rd参数是:rd.shell:如果root挂载失败,则允许进入到shellrd.debug:打开debug详细日志更多rd参数可以参考dracut.cmdline官方手册:https://man7.org/linux/man-pages/man7/dracut.cmdline.7.html另外,启动过程中可能出现某个服务异常导致挂起,此时可以用systemd参数:systemd.unit=emergency.target:进入紧急模式,小系统(initramfs)切换到大系统(rootfs)后立马登录shellsystemd.unit=rescue.target:进入救援模式,切换到大系统后哪里出问题了再登录shell3 initramfs和rootfs上一节提到切根,initrd启动方式就是从小文件系统initramfs切换到大文件系统rootfs。Initramfs是在 kernel 2.5中引入的技术,实际上它的含义就是:在内核镜像中附加一个cpio包,这个cpio包中包含了一个小型的文件系统,当内核启动时,内核将这个cpio包解开,并且将其中包含的文件系统释放到rootfs中,内核中的一部分初始化代码会放到这个文件系统中,作为用户层进程来执行。grub2找到kernel和initramfs后, 控制权交给kernel, 然后解压缩initramfs在内存中创建一个rootfs 在这个初始的小型文件系统里,加载一些基本的内核模块, 使OS能识别一些关键的外围设备. 比方说virtio块设备, virtio网络设备 这就是为什么在CentOS7下要将kvm驱动通过dracut打入initramfs的原理. 如果无法识别硬盘, 那么就无法真正的mount到磁盘的根目录.当initramfs文件系统挂在后, kernel将控制权交给pid为1的进程Initramfs是一个精简的文件系统,如下图我们可以看到它是gzip压缩包格式的文件,实际上解压后可以看出它里面是经过cpio压缩过的文件系统,下面我们来解压一下:mv initramfs.lkp-5.4.0-4-arm64.img initramfs.lkp-5.4.0-4-arm64.img.gz:更改后缀名为.gzgunzip initramfs.lkp-5.4.0-4-arm64.img.gz:解压gz文件得到内部的cpio格式文件cpio --no-absolute-filenames -idumv < ./$initrd.img:解压cpio格式文件到当前目录以上就是解压出来的initramfs,可以看出是我们熟悉的根文件系统的结构了。系统加载完一些必要的服务之后,就可以使用网络文件系统进行挂载了,目前我们使用的有nfs和cifs两种挂载方式。
  • [技术干货] qemu-kvm虚拟化遇到virsh shutdown一直无法关闭客户机解决方法
    【问题现象】qemu-kvm虚拟化在宿主机执行virsh shutdown vm1后执行virsh list --all发现vm1一直处于running状态,只能通过执行virsh destory vm1才能关闭vm;【解决方法】安装acpi服务,执行yum -y install acpid(一般系统都会自带acpid的rpm安装包,对于Ubuntu等系统则执行apt-get -y install acpid进行安装)然后执行systemctl start acpid.service启动acpi服务再次执行virsh shutdown vm1即可立即关闭vm1
  • [经验案例] 【服务器系列 04】CentOS 7.6安装QEMU-KVM并基于QEMU安装虚拟机指南
    1、安装CentOS 7.6如果系统无法访问外网,按如下方式挂载系统iso镜像配置本地yum源:将iso镜像上传到/home路径,挂载OS镜像:mount -o loop /home/CentOS-7-aarch64-Everything-1810.iso /mnt/CentOS/或者再KVM页面挂载系统iso镜像,然后执行如下命令挂载:mount -o loop /dev/sr0 /mnt/CentOS/修改/etc/yum.repos.d/CentOS-Base.repo文件,配置yum本地源:[base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl= file:///mnt/CentOS gpgcheck=1 gpgkey= file:///mnt/CentOS/RPM-GPG-KEY-CentOS-7 file:///mnt/CentOS/RPM-GPG-KEY-CentOS-7-aarch64运行下面的命令,使yum源配置生效:yum clean all yum makecache2、安装依赖包1)安装系统相关依赖yum -y install gcc* glibc* bison java-1.8* autoconf automake libtool git make cmake openssl* ncurses-devel zlib zlib-devel bzip2* readline readline-devel libaio2)安装虚拟化相关组件yum -y install qemu* libvirt* AAVMF virt* applydeltarpm mesa*3、创建qemu-kvm软链接执行如下命令创建qemu-kvm软链接ln -sv /usr/libexec/qemu-kvm /usr/bin/4、创建网桥并绑定本地物理网卡1)创建网桥br0nmcli con add type bridge ifname br02)查看已创建的br0设备nmcli con show 3)禁用网桥br0的STPnmcli con modify bridge-br0 bridge.stp no 4)设置网桥br0无转发延迟nmcli con modify bridge-br0 bridge.forward-delay 05)配置网桥br0的静态IPnmcli con mod bridge-br0 ipv4.method "static" ipv4.address '192.168.2.18/24'6)绑定物理网卡到网桥(绑定物理网卡后物理网卡不能设置ip,即使设置了也不生效)nmcli con add type bridge-slave ifname enp125s0f0 master bridge-br0enp125s0f0为实际物理网口名(根据实际网口名进行绑定),需要为连接状态,可以执行ethtool enp125s0f0检查;【注】:配置后自动生成网络scripts脚本,执行service network restart重启网络5、开启libvirtd服务执行如下命令开启libvirtd服务:systemctl start libvirtd; systemctl enable libvirtd;修改/etc/libvirt/qemu.conf文件,将root的用户和组的注释去掉,如下:6、创建分配给虚拟机的磁盘1)创建images路径作为镜像存储路径,用于给虚拟机分配存储mkdir -p /home/kvm-data/images【注】/home/kvm-data/为单独磁盘挂载路径,建议用使用一块大容量物理盘或raid盘;2)修改home/kvm-data/images属组chown root:root / home/kvm-data/images3)修改home/kvm-data/images权限chmod 755 / home/kvm-data/images4)定义存储pool为StoragePool并指定路径virsh pool-define-as StoragePool --type dir --target /home/kvm-data/images5)创建存储poolvirsh pool-build StoragePool6)启动存储poolvirsh pool-start StoragePool7)设置存储pool自启virsh pool-autostart StoragePool8)查看存储pool信息virsh pool-info StoragePool9)查看存储pool列表virsh pool-list7、安装虚拟机1)安装虚拟机       执行如下命令创建vm并安装vm(根据安装界面进行系统安装)virt-install --name=vm1 --vcpus=4 --ram=8192 --disk path=/home/kvm-data/images/1.img,format=qcow2,size=500,bus=virtio --cdrom /home/iso/CentOS-7-aarch64-Everything-1810.iso --network bridge=br0,model=virtio --force --autostart【注】需要提前上传操作系统iso镜像安装包到/home/iso/路径,相关命令参数说明如下:    --name=虚拟机名称,不重复即可    --vcpus=待分配的虚拟机core的数量    --ram=分配的内存,单位M    --path=/home/kvm-data/images/1.img,format=qcow2,size=200,bus=virtio中的1.img为虚拟机VM的images名称,自己命名不重复即可,size=磁盘大小,单位G    --cdrom后面为安装虚拟机VM使用的系统iso镜像    --network 选择网桥br0,模式使用virtio2)安装虚拟机网络配置(1)安装系统后在操作系统中配置,跟在服务器中配置网络一致(执行virsh console vm1可以通过串口进入虚拟机系统,其中vm1是虚拟机名称);(2)通过编辑虚拟机配置进行网络配置(执行virsh edit vm1可以查看并编辑虚拟机配置,其中vm1是虚拟机名称)执行virsh edit vm1后到最后修改网络配置如下,如果增加网卡可以直接在配置文件中增加,然后重启虚拟机,virsh reboot vm1配置生效增加一个网络:启动后在物理机通过brctl show看网桥状态,配置中绑定了br0的vnet0会自动绑定绑定到br0网桥上,没有绑定则在virbr0上,物理网卡绑定在br0,只有vnet0和物理网卡都绑定在br0上且vnet0和网桥ip相同,虚拟机和物理机的网络就连通了。8、虚拟机常用命令
  • [问题求助] 【ECS上面的鲲鹏服务器】【BoostKit ARM】Could not access KVM kernel module
    【功能模块】BoostKit ARM打算搭建安卓模拟器,启动AVD失败。【操作步骤&问题现象】1、ECS购买鲲鹏服务器,2、使用官方android-sdk-linux。3、创建AVD,无异常4、启动AVD,报错。KVM相关。Could not access KVM kernel module: No such file or directoryqemu-system-aarch64: failed to initialize KVM: No such file or directory【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【上传私有kylinV10的ISO】【部署kylin安装原生kvm】自定义的kylin ISO如何安装KVM
    【功能模块】配置云服务器并创建Linux系统盘镜像--安装原生的KVM驱动,自定义上传的kylinV10操作系统,如何安装原生态的KVM?请指导安装KVM,谢谢 https://support.huaweicloud.com/usermanual-ims/ims_01_0326.html【操作步骤&问题现象】1、在云上安装自定义的ISO后,查看是否支持kvm,显示不支持2、操作指导上提供的配置文件,未找到此配置文件【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] TaiShan服务器KVM虚拟化环境搭建指导
     1       环境准备步骤1 配置本地yum源vi /etc/yum.repos.d/cdrom.repo[cdrom] name=cdrom baseurl=file:///mnt enabled=1 gpgcheck=0 步骤2以root用户登录Linux系统,将RHEL系统镜像挂载到物理光驱或者虚拟光驱,并执行如下命令:mount  /dev/sr0   /mnt若已将CentOS的iso镜像传到了Linux系统本地了,可以执行如下命令:mount  –o  loop  /root/CentOS-7-aarch64-Everything-1810.iso  /mnt  步骤3检查是否成功挂载  df –h2       安装虚拟化平台安装 KVM 及其关联包yum install qemu-kvm qemu-kvm-ma qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer bridge-utils AAVMF启动并启用 libvird 服务systemctl start libvirtd.servicesystemctl enable libvirtd.service检查libvirt服务启动状态systemctl status libvirtd.service 更新libvirtd:wget https://libvirt.org/sources/libvirt-4.7.0.tar.xzyum install gcc libnl-devel libxml2-devel yajl-devel device-mapper-devel libpciaccess-devel libnl3-devel netcf-devel numactl-develwget https://libvirt.org/sources/libvirt-4.7.0.tar.xzyum install gnutls* -yyum install -y libnl-devel*yum install libxml2* -y xz -d libvirt-4.7.0.tar.xztar -xvf libvirt-4.7.0.tarcd libvirt-4.7.0./configure --prefix=/usr --localstatedir=/var  --sysconfdir=/etc make -j 60make install -j 60ldconfig #需要更新动态链接库libvirtd --version #查看libvirt的版本 yum remove libvirt-4.5.0libvirtd –version  更新qemu-kvm保持服务器联网yum update qemu-kvm   启动Virt Manager管理器virt-manager备注:如果安装最小 CentOS 7,则 virt-manger 将不会启动,需要安装 x 窗口包。执行命令如下:yum install "@X Window System" xorg-x11-xauth xorg-x11-fonts-* xorg-x11-utils –y如果执行virt-manager启动界面时有如下报错,需要安装mesa依赖包:yum install -y mesa-libGLES-devel.x86_64 mesa-dri-drivers检查安装后KVM的版本·[root@dmsag ~]# ln -sv /usr/libexec/qemu-kvm /usr/bin/‘/usr/bin/qemu-kvm’ -> ‘/usr/libexec/qemu-kvm’   /usr/libexec/qemu-kvm –version 配置网桥接口(当前以Bridge方式为例说明)   逻辑示意图: 创建虚拟管理节点网桥cd  /etc/sysconfig/network-scriptsvi  ifcfg-br0 (配置如下)DEVICE="virbr0"                       ONBOOT="yes"TYPE="Bridge"BOOTPROTO=staticIPADDR=192.168.1.17NETMASK=255.255.255.0GATEWAY=192.168.1.1STP="on"DELAY="0.0"配置绑定的物理网卡vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE="eth0"NU_CONTRLOLLER="0"ONBOOT="yes"TYPE=EthernetBOOTPROTO=noneBRIDGE="virbr0"NAME = "System eth0" 创建虚拟业务节点网桥cd  /etc/sysconfig/network-scriptsvi  ifcfg-br0 (配置如下)DEVICE="virbr1"                       ONBOOT="yes"TYPE="Bridge"BOOTPROTO=staticIPADDR=10.10.10.52NETMASK=255.255.255.0GATEWAY=10.10.10.1STP="on"DELAY="0.0"配置绑定的物理网卡 vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE="eth1"NU_CONTRLOLLER="0"ONBOOT="yes"TYPE=EthernetBOOTPROTO=noneBRIDGE="virbr1"NAME = "System eth1"   重启网卡service  network restart 备注:1、如果需要实现bond网卡聚合与网桥结合,直接修改BRIDGE后面的参数。具体参考: https://www.cnblogs.com/EasonJim/p/10019655.html      2、IP根据实际情况配置 3       虚拟机的安装启动virt-manager管理页面,创建一台虚拟机。 选择虚拟机系统ISO镜像文件。         如果软件不能自动侦测操作系统的版本,请手动选择。备注:事先在本地挂载系统镜像安装包。为虚拟机分配CPU的个数、内存的大小(根据实际分配)。创建虚拟机的分区A、选择自定义存储B、创建虚拟机的存储池。C、创建虚拟机存储卷。大小根据实际情况分配D、设置虚拟机的共享网络到创建的管理节点br0上。虚拟机的名称根据实际情况设置E、点击完成,开始安装虚拟机操作系统。         F、安装过程不进行任何操作后进入手动配置界面,配置前面有“!”的配置项G、输入2 配置“Time settings”,进入后输1回车H、输入5 Installation Destination(这里是设置系统分区),输入数字选择要安装的硬盘按C进入下一步,选择Use All Space,选择Use All Space能够格式化整个硬盘,如果选择Use Free Space会使用该硬盘剩余空间安装,按c进入下一步,选择划分格式,可以选择Standard Partition或LVM,选LVM会把整个硬盘空间分配给本次装的系统,选择LVM后按c进入下一步如果成功则返回首页。说明:Standard Partition为标准模式,安装系统后只使用到硬盘的部分空间,LVM模式则时将整个硬盘的空间分配给系统。I、选择9设置root密码后返回首页J、 确保上图中所有配置项前没有“!”号就可以按b回车开始安装直至安装完成。   4       虚拟机测试调优虚拟机使用的配置为16核,64G内存,与物理机绑核方法如下:连接虚拟机:virsh list将virt-manager窗口关闭以后,执行以下命令链接虚拟机命令行:virsh console 2将虚拟机关机,然后编辑配置文件:virsh shutdown centos7.0virsh edit centos7.0配置文件如下,虚拟机共16个CPU:每四个CPU分在同一个die下。同一个die下的CPU,尽量分散在不同的cluster上。在虚拟机中映射出4个numa,在虚拟机中lscpu可以看到4个numa node。 <domain type='kvm'>  <name>centos7.0</name>  <uuid>10fea8eb-ac85-4ef0-9eec-f1d86eafd705</uuid>  <memory unit='KiB'>67108864</memory>  <currentMemory unit='KiB'>67108864</currentMemory>  <vcpu placement='static' cpuset='4,8,12,16,24,28,32,36,48,52,56,60,72,76,80,84'>16</vcpu>  <cputune>    <vcpupin vcpu='0' cpuset='4'/>    <vcpupin vcpu='1' cpuset='8'/>    <vcpupin vcpu='2' cpuset='12'/>    <vcpupin vcpu='3' cpuset='16'/>    <vcpupin vcpu='4' cpuset='24'/>    <vcpupin vcpu='5' cpuset='28'/>    <vcpupin vcpu='6' cpuset='32'/>    <vcpupin vcpu='7' cpuset='36'/>    <vcpupin vcpu='8' cpuset='48'/>    <vcpupin vcpu='9' cpuset='52'/>    <vcpupin vcpu='10' cpuset='56'/>    <vcpupin vcpu='11' cpuset='60'/>    <vcpupin vcpu='12' cpuset='72'/>    <vcpupin vcpu='13' cpuset='76'/>    <vcpupin vcpu='14' cpuset='80'/>    <vcpupin vcpu='15' cpuset='84'/>    <emulatorpin cpuset='4,8,12,16,24,28,32,36,48,52,56,60,72,76,80,84'/>  </cputune>  <numatune>    <memory mode='strict' nodeset='0-3'/>    <memnode cellid='0' mode='strict' nodeset='0'/>    <memnode cellid='1' mode='strict' nodeset='1'/>    <memnode cellid='2' mode='strict' nodeset='2'/>    <memnode cellid='3' mode='strict' nodeset='3'/>  </numatune>  <os>    <type arch='aarch64' machine='virt-rhel7.6.0'>hvm</type>    <loader readonly='yes' type='pflash'>/usr/share/AAVMF/AAVMF_CODE.fd</loader>    <nvram>/var/lib/libvirt/qemu/nvram/centos7.0_VARS.fd</nvram>  </os>  <features>    <acpi/>    <gic version='3'/>  </features>  <cpu mode='host-passthrough' check='none'>    <topology sockets='4' cores='4' threads='1'/>    <numa>      <cell id='0' cpus='0-3' memory='16777216' unit='KiB'/>      <cell id='1' cpus='4-7' memory='16777216' unit='KiB'/>      <cell id='2' cpus='8-11' memory='16777216' unit='KiB'/>      <cell id='3' cpus='12-15' memory='16777216' unit='KiB'/>    </numa>  </cpu>  <clock offset='utc'/>  <on_poweroff>destroy</on_poweroff>  <on_reboot>restart</on_reboot>  <on_crash>destroy</on_crash>  <devices>    <emulator>/usr/libexec/qemu-kvm</emulator>    <disk type='file' device='cdrom'>      <driver name='qemu' type='raw'/>      <source file='/root/CentOS-7-aarch64-Everything-1810.iso'/>      <target dev='sdb' bus='scsi'/>      <readonly/>      <address type='drive' controller='0' bus='0' target='0' unit='1'/>    </disk>    <disk type='file' device='disk'>      <driver name='qemu' type='qcow2'/>      <source file='/home/kvm/images/1.qcow2'/>      <target dev='vda' bus='virtio'/>      <boot order='1'/>      <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>    </disk>    <controller type='usb' index='0' model='qemu-xhci' ports='8'>      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>    </controller>    <controller type='scsi' index='0' model='virtio-scsi'>      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>    </controller>    <controller type='pci' index='0' model='pcie-root'/>    <controller type='pci' index='1' model='pcie-root-port'>      <model name='pcie-root-port'/>      <target chassis='1' port='0x8'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>    </controller>    <controller type='pci' index='2' model='pcie-root-port'>      <model name='pcie-root-port'/>      <target chassis='2' port='0x9'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>    </controller>    <controller type='pci' index='3' model='pcie-root-port'>      <model name='pcie-root-port'/>      <target chassis='3' port='0xa'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>    </controller>    <controller type='pci' index='4' model='pcie-root-port'>      <model name='pcie-root-port'/>      <target chassis='4' port='0xb'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>    </controller>    <controller type='pci' index='5' model='pcie-root-port'>      <model name='pcie-root-port'/>      <target chassis='5' port='0xc'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x4'/>    </controller>    <controller type='pci' index='6' model='pcie-root-port'>      <model name='pcie-root-port'/>      <target chassis='6' port='0xd'/>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x5'/>    </controller>    <controller type='virtio-serial' index='0'>      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>    </controller>    <interface type='bridge'>      <mac address='52:54:00:54:db:87'/>      <source bridge='br1'/>      <model type='virtio'/>      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>    </interface>    <serial type='pty'>      <target type='system-serial' port='0'>        <model name='pl011'/>      </target>    </serial>    <console type='pty'>      <target type='serial' port='0'/>    </console>    <channel type='unix'>      <target type='virtio' name='org.qemu.guest_agent.0'/>      <address type='virtio-serial' controller='0' bus='0' port='1'/>    </channel>  </devices></domain>  virsh start centos7.0内存测试结果:
  • [问题求助] 【鲲鹏920产品】【KVM虚拟机功能】虚拟机下CPU配置无法设定threads=2
    【功能模块】鲲鹏920产品-KVM虚拟机功能【操作步骤&问题现象】1、在鲲鹏920-5250+EulerOS2.8 配置上,安装QEMU-KVM虚拟机,宿主机CPU配置如下2、虚拟机CPU配置如下:3、虚拟机开机后,检查vCPU配置如下:备注:虚拟机配置为1个socket, 12 core, 2 thread,而虚拟机实际配置为2 Socket, 12 core , 1 thread;请问这是哪里有问题?
  • [新手课堂] 请问华为ECS 鲲鹏版服务器,可以在上面安装kvm吗?
    安装之后,提示kvm不可用,是云服务器不支持kvm吗?
  • [技术干货] 开源KVM虚拟化解决方案
    开源KVM虚拟化解决方案开源KVM虚拟化解决方案应用于线下虚拟化场景,包括单机、双机HA和多机集群,通过虚拟机迁移和HA确保业务可靠性,典型应用包括数据库、WEB和缓存服务器等。单机场景分析单机场景是指在单台服务器上使用QEMU-KVM开源软件,虚拟机带外管理使用virt-manager管理软件和virsh命令行,二者都是调用libvirt API接口,GuestOS带内管理使用VNC软件,虚机存储使用本地LVM虚拟存储池,虚机网络使用网桥(Bridge模式)或物理网卡(Host-only模式)。双机和集群场景分析双机和集群场景基于单机场景,计算虚拟化、存储和网络的使用方式和单机相同,不同点在于双机和集群场景可以使用HA或热迁移技术保证集群健壮性。以keepalived+LVS+mysql双机主从架构为例,keepalived提供浮动IP地址,并周期性检测集群内服务器的健康状态,当检测到故障节点时,触发倒换。开源KVM虚拟化场景架构分为三层,最底层是TaiShan服务器硬件,中间层是Host Linux Kernel,这层也包括KVM虚拟化软件,最上层是QEMU,虚拟出I/O设备开源KVM虚拟化场景各类组件说明
  • [技术干货] 【安装指导】KVM安装及使用指南
    ## KVM安装及使用指南 ### 一、安装KVM 1. #### 环境要求 - 泰山服务器 - CentOS7.6 - BIOS设置 - Advanced→MISC Config→Support Smmu -> **Enable** - Advanced→PCIe Config→SRIOV ->**Enable** 2. #### 配置安装环境 ```bash yum -y install qemu* libvirt* AAVMF virt* #创建qemu-kvm软链接 ln -sv /usr/libexec/qemu-kvm /usr/bin/ ``` ![image-20210312091212523.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/forums/attachment/forum/202103/15/102431gqrwswcab3iwsqbz.png) 3. #### 升级libvirt 1. ##### 安装edk2及其他依赖 ```bash #安装edk2 wget https://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo yum -y install edk2.git-aarch64 #安装依赖包 yum -y install libxml2-devel readline-devel ncurses-devel libtasn1-devel gnutls-devel libattr-devel libblkid-devel augeas systemd-devel libpciaccess-devel yajl-devel sanlock-devel libpcap-devel libnl3-devel libselinux-devel dnsmasq radvd cyrus-sasl-devel libacl-devel parted-devel device-mapper-devel xfsprogs-devel librados2-devel librbd1-devel glusterfs-api-devel glusterfs-devel numactl-devel libcap-ng-devel fuse-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel nfs-utils dbus-devel scrub numad rpm-build git ``` 2. ##### 下载libvirt5.6.0源码并编译安装 ```bash #下载源码并安装 wget https://libvirt.org/sources/libvirt-5.6.0-1.fc30.src.rpm rpm -i libvirt-5.6.0-1.fc30.src.rpm #生成rpm包,如果编译失败,可以重试 cd /root/rpmbuild/SPECS/ rpmbuild -ba libvirt.spec #安装rpm包 cd /root/rpmbuild/RPMS/aarch64/ yum -y install *.rpm ``` 3. ##### 修改配置 ```bash vim /etc/libvirt/qemu.conf #784行添加以下代码 nvram = ["/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"] ``` ![image-20210312094211050.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/forums/attachment/forum/202103/15/102445qelwd3d3zy1xzwr3.png) 4. ##### 关闭SELinux并重启服务 ```bash #重启libvirtd服务 service libvirtd restart #关闭SELinux setenforce 0 ``` 4. #### 验证环境 ```bash virsh version ``` ![image-20210204151645450.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/forums/attachment/forum/202103/15/1024571ogqmyzy85rrh99k.png) 5. #### 安装X11 ```bash yum install -y xorg-x11-xauth xorg-x11-utils xorg-x11-fonts-* #修改配置文件 vim /etc/ssh/sshd_config #增加以下代码 X11Forwarding yes ``` ### 二、使用KVM 1. #### 安装虚拟机(NAT) ```bash ########################################### #################安装centos################ ########################################## #CPU:8核 #内存:16G #硬盘:50G #镜像位置:/home/images/CentOS-7.6-aarch64.iso #安装位置:/home/kvm/Demo-centos-7.6.qcow2 #网络:使用NAT方式 virt-install --name=Demo-centos-7.6 --vcpus=8 --ram=16384 --disk path=/home/kvm/Demo-centos-7.6.qcow2,format=qcow2,size=50,bus=virtio --cdrom /home/images/CentOS-7.6-aarch64.iso --autostart --network network=default ########################################### ############## 安装kylin v10 ############## ########################################## #CPU:8核 #内存:32G #硬盘:50G #镜像位置:/home/images/Kylin-Server-10-SP1-Release-Build04-20200711-arm64.iso #安装位置:/home/kvm/Demo-kylin-v10.qcow2 #网络:使用NAT方式 virt-install --name=Demo-kylin-v10 --vcpus=8 --ram=32768 --disk path=/home/kvm/Demo-kylin-v10.qcow2,format=qcow2,size=50, --cdrom /home/images/Kylin-Server-10-SP1-Release-Build04-20200711-arm64.iso --network network=default --graphics vnc ``` 2. #### 配置桥接网络 ```bash #宿主机信息: #IP是: 193.168.129.118 #网卡是: enp125s0f0 #安装brctl yum install brctl #添加一个br0的桥接 vi /etc/sysconfig/network-scripts/ifcfg-br0 #增加以下内容 DEVICE=br0 TYPE=Bridge BOOTRPOTO=static IPADDR=193.168.129.118 NETMASK=255.255.255.0 GATEWAY=193.168.129.1 DNS1=114.114.114.114 ONBOOT=yes #enp125s0f0,让其桥接到br0上 vi /etc/sysconfig/network-scripts/ifcfg-enp125s0f0 #增加代码 BRIDGE=br0 #关联网卡 brctl addif br0 enp125s0f0 #如需要解除绑定: brctl delif br0 enp125s0f0 ``` 3. #### 安装虚拟机 ```bash ########################################### #################安装centos################ ########################################## #CPU:8核 #内存:16G #硬盘:50G #镜像位置:/home/images/CentOS-7.6-aarch64.iso #安装位置:/home/kvm/Demo-centos-7.6.qcow2 #网络:桥接到br0 virt-install --name=Demo-centos-7.6 --vcpus=8 --ram=16384 --disk path=/home/kvm/Demo-centos-7.6.qcow2,format=qcow2,size=50,bus=virtio --cdrom /home/images/CentOS-7.6-aarch64.iso --autostart --network bridge=br0 ########################################### ############## 安装kylin v10 ############## ########################################## #CPU:8核 #内存:32G #硬盘:50G #镜像位置:/home/images/Kylin-Server-10-SP1-Release-Build04-20200711-arm64.iso #安装位置:/home/kvm/Demo-kylin-v10.qcow2 #网络:桥接到br0 virt-install --name=Demo-kylin-v10 --vcpus=8 --ram=32768 --disk path=/home/kvm/Demo-kylin-v10.qcow2,format=qcow2,size=50, --cdrom /home/images/Kylin-Server-10-SP1-Release-Build04-20200711-arm64.iso --network bridge=br0 --graphics vnc ``` ##### 备注: ​ 安装openEuler内核操作系统,必须使用图形化界面安装,否则卡死在初始化阶段。 4. #### 克隆虚拟机 ```bash #克隆Demo-centos-7.6 #虚拟机名:centos-1 #虚拟机路径:/home/kvm/centos-1.qcow2 virt-clone -o Demo-centos-7.6 -n centos-1 -f /home/kvm/centos-1.qcow2 #克隆Demo-kylin-v10 #虚拟机名:kylin-1 #虚拟机路径:/home/kvm/kylin-1.qcow2 virt-clone -o Demo-kylin-v10 -n kylin-1 -f /home/kvm/kylin-1.qcow2 ``` 5. #### 常用操作 ```bash #列出所有虚拟机 virsh list --all #启动 virsh start xxx #关闭 virsh destroy xxx #进入控制台 virsh console ID #退出console ctrl + ] #使用virt-viewer登录 virt-viewer {ID} #开机启动 virsh autostart centos-1 virsh autostart --disable centos-1 ``` 6. #### FAQ 1. ##### 无权限安装虚拟机 ![image-20210218092518340.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/forums/attachment/forum/202103/15/102529bdjaflut7nakt9zs.png) ```bash vi /etc/libvirt/qemu.conf #修改448行,和452行 user = "root" group = "root" #重启libvirtd sudo systemctl restart libvirtd ``` ![image-20210313152723432.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/forums/attachment/forum/202103/15/102542kvlroa1bzgolcunk.png) 2. ##### 不能启动虚拟机 ![image-20210313112250507.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/forums/attachment/forum/202103/15/102554xuksud2z2besazlj.png) ```bash #关闭SELinux setenforce 0 ```
  • [经验案例] kvm虚拟机bridge方式,只能ping通宿主机,不能ping通其他同网段ip的解决方法
    修改/etc/sysctl.conf,加入net.bridge.bridge-nf-call-ip6tables = 0net.bridge.bridge-nf-call-iptables = 0net.bridge.bridge-nf-call-arptables = 0执行sysctl -p如果发现执行sysctl -p 之后发现没有/proc/sys/net/bridge/bridge-nf-call-iptables 没有这个文件执行 modprobe br_netfilter 命令即可
  • [技术干货] 使能--enable-kvm的安装命令,安装后卡住问题解决方法
    1. 软硬件配置CPU 鲲鹏920操作系统 CentOS 7.7qemu 4.2.02. 组网配置不涉及3. 问题3.1 问题简述编译安装qemu-4.2.0后,使用qemu安装OS时,使能--enable-kvm后卡住,不使能--enable-kvm则能正常进入安装界面1)使能--enable-kvm的安装命令,安装后卡住:qemu-system-aarch64  -bios /home/QEMU_EFI.bios -M virt -m 8G  -cpu host --enable-kvm  -cdrom /home/OS/CentOS-7-aarch64-Everything-1810.iso –nographic –curses2)不使能--enable-kvm的安装命令,安装后能正常进入安装界面:qemu-system-aarch64 -bios QEMU_EFI.bios -M virt -m 8G -cpu cortex-a57 -cdrom home/OS/CentOS-7-aarch64-Everything-1810.iso -nographic -curses3.2 问题分析解决1. 尝试在启动命令中添加串口输出-serial file:/tmp/serial.out,发现串口无任何输出,串口参数设置参考:http://blog.sina.com.cn/s/blog_a1e6528101019xmm.html2. 换到CentOS7.6操作系统执行同样命令,发现有coredump报错:qemu-system-aarch64: PMU: KVM_SET_DEVICE_ATTR: Invalid argumentqemu-system-aarch64: failed to set irq for PMUAborted (core dumped)3. 找到问题原因https://vanducuy.wordpress.com/2019/09/09/qemu-install-fedora-28-on-aarch64-failed/需要添加-machine gic-version=34. 换到CentOS7.7上添加-machine gic-version=3,成功进入安装界面,问题解决qemu-system-aarch64 -bios /home/QEMU_EFI.bios -M virt -m 8G -cpu host --enable-kvm -cdrom /home/OS/CentOS-7-aarch64-Everything-1810.iso –nographic –curses  -machine gic-version=33.3 问题结论CentOS7.7上进程无法coredump,在CentOS7.6上执行coredump,根据报错发现需要指定GICV3的版本,添加-machine gic-version=3选项后解决。
  • [典型案例] Arm64处理器Linux系统上Java集成KVM无法启动
    问题描述 :arm64架构Linux操作系统的客户端上,点击Java集成远程控制台,下载kvm.jnlp文件后,点击无反应处理过程 :arm64版本的OpenJDK中,未集成启动jnlp文件用的javaws,导致jnlp文件无法启动。BMC规格中并未支持在arm64架构的客户端上运行Java集成远程控制台,但此问题可以通过替代工具解决。解决方案 :使用IcedTea Web替代javaws启动jnlp文件。以UOS为例:1. 在有网络的前提下,打开命令行,并输入    apt-get install icedtea-netx2. 可能提示需要安装依赖,此时按提示输入    apt-get install –fix-broken    下载依赖,包括JRE 11等,共计大概200MB3. 下载kvm.jnlp,右击 –> 打开方式 -> IcedTea Web Start,或使用命令行cd到kvm.jnlp所在目录后运行 javaws kvm.jnlp转自:https://support.huawei.com/enterprise/zh/knowledge/EKB1100051165
  • [经验案例] A800 9000 Centos7.6 KVM界面花屏问题解决指南
    环境配置:Atlas800 9000 centos7.6  C72B050问题现象:reboot重启花屏进入OS前,花屏 解决方法:mv /lib/modules/4.14.0-115.el7a.0.1.aarch64/kernel/drivers/gpu/drm/hisilicon/hibmc/hibmc-drm.ko.xz ./  备份原生驱动文件 cp hibmc-drm_centos7.6.ko /lib/modules/4.14.0-115.el7a.0.1.aarch64/kernel/drivers/gpu/drm/hisilicon/hibmc/hibmc-drm.ko 替换驱动文件(文件见附件) depmod -a  确保依赖加载无误 dracut -f 更新intramfs文件 lsinitrd /boot/initramfs-4.14.0-115.el7a.0.1.aarch64.img |grep -i hibmc-drm.ko  查看intramfs文件是否包含替换的ko文件reboot 需要下一次重启生效如下未出现花屏  
总条数:43 到第
上滑加载中