当前位置:TranBon博客 > 首页 > 技术 > CentOS7RHEL7上安装KVM(QEMU)

CentOS7RHEL7上安装KVM(QEMU)

adminis3年前 (2021-02-23)技术30140
Centos7/RHEL7上安装KVM(QEMU)


KVM是Kernel Based Virtual Machine的简称,能够利用硬件虚拟扩展来提供多种操作系统的虚拟化软件,KVM能够通过两种方式来管理,一种是命令行,另一种是图形化界面。


Virt-Manager(Virtual Machine Manager)是基于KVM使用最为频繁的管理应该程序,能够创建、编辑、开始和暂停虚拟机。


依赖

KVM需要CPU有硬件虚拟化的支持,可以通过下面命令查询是否支持,如果输出有相关的vmx或者svm,表明CPU支持,否则就不支持。


在BIOS里开启CPU虚拟化,启动系统


查看CPU是否支持虚拟化

[root@localhost ~]# egrep '(vmx|svm)' /proc/cpuinfo  


安装KVM
通过下面命令安装qemu和virt-manager软件包


yum -y install qemu-kvm qemu-img  libvirt libvirt-python python-virtinst libvirt-client virt-install  bridge-utils libguestfs-tools virt-top net-tools ruby


安装了图形界面的CentOS,推荐安装相关配套的图形管理工具
yum -y install virt-manager virt-viewer


bridge-utils 创建和管理桥接设备的工具
libvirt:提供libvirtd daemon来管理虚拟机和控制hypervisor
libvirt-client:提供客户端API用来访问server和提供管理虚拟机命令行工具的virsh实体
python-virtinst 创建虚拟机所需要的命令行工具和程序库
qemu-kvm:qemu模拟器
qemu-img:qemu磁盘image管理器
virt-install:用来创建虚拟机的命令行工具
virt-top 虚拟机统计命令
virt-viewer 图形控制台连接程序,连接到已配置好的虚拟机
virt-manager GUI虚拟机管理工具


安装前要设置环境语言为英文LANG="en_US.UTF-8",如果是中文的话某些版本可能会报错。CentOS 7 在这里修改 /etc/locale.conf。


启动libvirtd daemon
systemctl start libvirtd
systemctl enable libvirtd


# 网卡配置,新建ifcfg-bro,相当于一个虚拟交换机,然后修改相关配置如下:
[root@kvm-centos7 ~]# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"

BOOTPROTO=none



假如eno1接口连接外网
vi /etc/sysconfig/network-scripts/ifcfg-eno1
TYPE="Ethernet"
NAME="eno1"
UUID="*****************************"
DEVICE="eno1"
ONBOOT="yes"

BRIDGE="br0"


双网卡绑定(可选):
# ifcfg-bond0配置文件修改
[root@kvm-centos7 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
TYPE=Ethernet
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=none
BRIDGE=br0
ONBOOT=yes
BONDING_OPTS="mode=5 miimon=100"


重启接口
ifdown eno1 && ifup eno1
ifdown br0 && ifup br0


# 校验桥接接口
brctl show


bridge name         bridge id                      STP enabled          interfaces
br0                      8000.3863bb44cf6c      no                           eno1
virbr0                 8000.525400193f0f        yes                         virbr0-nic


如果eno1不能与br0关联在一起,就重启服务器


设置防火墙端口:
firewall-cmd --zone=public --add-port=5900-5920/tcp
firewall-cmd --zone=public --add-port=5900-5920/tcp --permanent


systemctl enable libvirtd.service
systemctl start libvirtd.service



命令行创建虚拟机


先查看支持的操作系统版本

osinfo-query os 


使用SPICE客户端连接,SPICE客户端功能比VNC多,推荐


通过下面的命令创建一台Linux虚拟机

virt-install  --name=centos7_1708  --ram=4096  --vcpus=2 --virt-type=kvm --os-type=linux --os-variant=centos7.0  --network bridge=br0,model=virtio --graphics=spice,password=Zyidc123ABC,listen=0.0.0.0 --noautoconsole  --accelerate  --cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1708.iso --disk path=/var/lib/libvirt/images/centos7_1708.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40


部分参数解释:


--name=centos7_1708

虚拟机名称,按个人喜好取名


--os-variant=centos7.0

操作系统变量环境,固定值,使用osinfo-query os 命令查询


--cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1708.iso

系统安装光盘镜像位置


path=/var/lib/libvirt/images/centos7_1708.qcow2
虚拟机硬盘文件存放位置



常用参数:
-name:虚拟机的名字
-ram:内存大小MB
--accelerate  #KVM内核加速
-vcpus:CPU个数
-cdrom:使用指定file作为CD-ROM镜像,需要注意的是-cdrom和-hdc不能同时使用;将file指定为/dev/cdrom可以直接使用物理光驱;
-os-variant:OS类型,例如rhel 6,solaris,使用osinfo-query os 命令查询
-network:创建通过Virt Manager创建桥接网络,如果希望你的虚拟机保留私网IP同时能联网,请使用NAT模式--network netwrok=default即默认模式,bridge=BRIDGE:连接至名为“BRIDEG”的桥设备
network=NAME:连接至名为“NAME”的网络


-graphics:Guest显示设置
-disk path:磁盘位置,format=具体格式可参见qemu-img命令;cache=其可用值有none、writeback、unsafe和writethrough四个,if=interface:指定硬盘设备所连接的接口类型,即控制器类型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
-boot [order=drives][,once=drives][,menu=on|off]:定义启动设备的引导次序,每种设备使用一个字符表示;不同的架构所支持的设备及其表示字符不尽相同,在x86 PC架构上,a、b表示软驱、c表示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器;默认为硬盘设备;比如:-boot order=dc,once=d


提升虚拟磁盘性能
虚拟硬盘默认格式为raw,性能好,速度快,但不支持一些新功能,如镜像、zlib磁盘压缩、AES加密等。
qcow2功能多,但性能比不上raw,可以用参数指定格式。


无论是创建Windows还是Linux系统,只需要把磁盘参数
--disk path=/var/lib/libvirt/images/centos7_1708.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40
改为

--disk path=/var/lib/libvirt/images/centos7_1708.img,device=disk,format=raw,bus=virtio,cache=writeback,size=40


创建Windows XP/Windows 2003 Server
默认windows系统不带硬盘和网卡的virtio驱动,Redhat有提供,需要单独下载。


WindowXP/2003 Server及以下操作系统必须使用软驱版驱动,否则,virtio磁盘和网卡无法工作。
Linux不需要,因为Linux内核版本在2.6.25以上的,已经集成了virtio驱动。


下载地址:
32位版:
64位版:


安装32位Windows XP并挂载virtio驱动:
virt-install  --name=winxp_x86  --ram=4096  --vcpus=2 --virt-type=kvm --os-type=windows --os-variant=winxp  --network bridge=br0,model=virtio --graphics=spice,password=Zyidc123ABC,listen=0.0.0.0 --noautoconsole  --accelerate  --cdrom=/var/lib/libvirt/images/winxp_x86.iso --disk path=/var/lib/libvirt/images/winxp_x86.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40 --disk path=/var/lib/libvirt/images/virtio-win_x86.vfd,device=floppy


安装32位Windows 2003并挂载virtio驱动:
virt-install  --name=win2003_x86  --ram=4096  --vcpus=2 --virt-type=kvm --os-type=windows --os-variant=win2k3  --network bridge=br0,model=virtio --graphics=spice,password=Zyidc123ABC,listen=0.0.0.0 --noautoconsole  --accelerate  --cdrom=/var/lib/libvirt/images/win2003_x86.iso --disk path=/var/lib/libvirt/images/win2003_x86.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40 --disk path=/var/lib/libvirt/images/virtio-win_x86.vfd,device=floppy


安装64位Windows XP并挂载virtio驱动:

virt-install  --name=winxp_x86_64.qcow2  --ram=4096  --vcpus=2 --virt-type=kvm --os-type=windows --os-variant=winxp  --network bridge=br0,model=virtio --graphics=spice,password=Zyidc123ABC,listen=0.0.0.0 --noautoconsole  --accelerate  --cdrom=/var/lib/libvirt/images/winxp_x86_64.iso --disk path=/var/lib/libvirt/images/winxp_x86_64.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40 --disk path=/var/lib/libvirt/images/virtio-win_amd64.vfd,device=floppy



安装64位Windows 2003并挂载virtio驱动:
virt-install  --name=win2003_x86_64  --ram=4096  --vcpus=2 --virt-type=kvm --os-type=windows --os-variant=win2k3  --network bridge=br0,model=virtio --graphics=spice,password=Zyidc123ABC,listen=0.0.0.0 --noautoconsole  --accelerate  --cdrom=/var/lib/libvirt/images/win2003_x86_64.iso --disk path=/var/lib/libvirt/images/win2003_x86_64.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40 --disk path=/var/lib/libvirt/images/virtio-win_amd64.vfd,device=floppy


安装的过程中,重启会变成关机,解决方法:
virsh start XX
手动启动虚拟机即可,用虚拟名称取代XX.


安装完后:
下载稳定版的光盘版驱动:



virtio-win.iso是包含各类Windows系统驱动:
NetKVM/: Virtio Network driver,Virtio网卡驱动
viostor/: Virtio Block driver,Virtio块存储驱动
vioscsi/: Virtio SCSI driver,Virtio SCSI驱动
viorng/: Virtio RNG driver,Virtio RNG 驱动
vioser/: Virtio serial driver,Virtio 串行设备驱动
Balloon/: Virtio Memory Balloon driver,Virtio内存气泡驱动
qxl/: QXL graphics driver for Windows 7 and earlier. (build virtio-win-0.1.103-1 and later),显卡驱动,用于Windows7及更早版本
qxldod/: QXL graphics driver for Windows 8 and later. (build virtio-win-0.1.103-2 and later),显卡驱动,用于Windows8及更新版本
pvpanic/: QEMU pvpanic device driver (build virtio-win-0.1.103-2 and later),QEMU pvpanic设备驱动
guest-agent/: QEMU Guest Agent 32bit and 64bit MSI installers,QEMU Guest Agent,用于主系统和虚拟系统之间复制文本信息
qemupciserial/: QEMU PCI serial device driver,QEMU PCI 串行设备驱动
*.vfd: VFD floppy images for using during install of Windows XP,Windows XP/Windows 2003安装时必须需要vfd软盘版驱动



安装完后:


挂载驱动光盘:


vi /etc/libvirt/qemu/winxp_x86.xml
或者
virsh edit winxp_x86


把光盘位置:
/var/lib/libvirt/images/win2003_x86_64.iso
修改为:
/var/lib/libvirt/images/virtio-win.iso
意思是加载光盘版驱动。


正常关闭虚拟机


重新定义配置文件使其马上生效:
virsh define /etc/libvirt/qemu/winxp_x86.xml


重新开机:
virsh start winxp_x86


安装光盘里的其他驱动。


安装方法:我的电脑属性里找设备管理器,找到没有正确驱动的硬件,右键更新驱动


安装Windows 7及以上系统:


稳定版的光盘版驱动:



CentOS7查看KVM支持的操作系统:
osinfo-query os 
CentOS6查看KVM支持的操作系统:
virt-install --os-variant=list


根据刚刚显示的简称替换以下名称:
--os-variant=win7


安装命令:
virt-install  --name=win7  --ram=4096  --vcpus=2 --virt-type=kvm --os-type=windows --os-variant=win7  --network bridge=br0,model=virtio --graphics=spice,password=Zyidc123ABC,listen=0.0.0.0 --noautoconsole  --accelerate  --cdrom=/var/lib/libvirt/images/virtio-win.iso --disk path=/var/lib/libvirt/images/win7_x86_64.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40 --disk path=/var/lib/libvirt/images/win7_x86_64.iso,device=cdrom,perms=ro


安装的过程中,重启会变成关机,解决方法:
virsh start win7
手动启动虚拟即可。


查看虚拟机网络连接,vnet0表示第一台虚拟机的网卡,enp5s0f1表示物理网卡,两张网卡连接到虚拟交换机br0
virbr0是默认创建的,用于NAT服务。


[root@hp_kvm ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f4ce46b04977 no enp5s0f1
    vnet0
virbr0 8000.525400c92ddc yes virbr0-nic


查看远程端口,并设置好防火墙的许可,以名称为centos7的虚拟机为例:
virsh dumpxml centos7 |grep port |grep 59

记住端口号59XX


下载SPICE客户端:

https://virt-manager.org/download/


填上地址:
spice://物理机IP:59XX
输入刚刚创建虚拟机时定义的密码



以下演示使用VNC客户端管理虚拟机:

通过下面的命名创建虚拟机,使用VNC连接


只需要把上面演示的参数:
--graphics=spice,password=Zyidc123ABC,listen=0.0.0.0
替换为:
--graphics=vnc,password=Zyidc123ABC,listen=0.0.0.0


例子:创建一个CentOS7实例并使用VNC管理:

virt-install  --name=centos7_1704_vnc  --ram=4096  --vcpus=2 --virt-type=kvm --os-type=linux --os-variant=centos7.0  --network bridge=br0,model=virtio --graphics=vnc,password=Zyidc123ABC,listen=0.0.0.0 --noautoconsole  --accelerate   --cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1708.iso --disk path=/var/lib/libvirt/images/centos7_1704_vnc.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40


例子:创建一个Windows7实例并使用VNC管理:
virsh destroy win7 && virsh undefine win7 && virt-install  --name=win7  --ram=4096  --vcpus=2 --virt-type=kvm --os-type=windows --os-variant=win7  --network network=default,model=virtio --graphics=vnc,password=togogo,port=5901,listen=0.0.0.0 --noautoconsole  --accelerate  --cdrom=/home/root01/cn_windows_7_ultimate_x64_dvd_x15-66043.iso --disk path=/var/lib/libvirt/images/win7_x86_64.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40 --disk path=/var/lib/libvirt/images/virtio-win.iso,device=cdrom,perms=ro


查看VNC端口
virsh dumpxml centos7_1704_vnc |grep port |grep 59


下载VNC客户端:
或者:

https://www.tightvnc.com/download.php


使用VNC客户端连接虚拟机显示器,连接地址为KVM物理机IP+端口号,在创建虚拟机时定义密码


查看虚拟机
virsh list              # 查看在运行的虚拟机


virsh list --all         # 查看所有虚拟机


Id    Name                           State
----------------------------------------------------
7     centos7_1704_vnc      running



虚拟机常用管理命令:
virsh start XX     # 虚拟机开启(启动):
virsh reboot XX   # 虚拟机重新启动
virsh shutdown XX  #虚拟机关机。使用该命令关闭虚拟机时,KVM是向虚拟机发送一个ACPI的指令,需要虚拟机安装acpid服务,yum -y install acpid
virsh suspend XX  # 暂停(挂起)KVM 虚拟机
virsh resume XX    # 恢复被挂起的 KVM 虚拟机
virsh undefine XX  # 该方法只删除配置文件,磁盘文件未删除
virsh autostart XX # 随物理机启动而启动(开机启动)
virsh autostart --disable XX # 取消标记为自动开始(取消开机启动)

virsh destroy XX     # 非正常关机,强制关闭虚拟机(相当于物理机直接拔掉电源)


如果你的Linux系统已经安装了图形界面,可以使用图形化工具创建虚拟机
使用root身份运行virt-manager工具,在终瑞执行:
su -c virt-manager


其它创建例子:
创建Linux系统,使用KS文件自动化安装与配置,部分参数如下:

--disk path=/var/lib/libvirt/images/rhel6.img,size=120,sparse --location ftp://10.1.1.1/rhel6/dvd --extra-args="ks=http://10.1.1.1/rhel6.cfg" --network bridge=brnet0,model=virtio


不用VNC,直接在命令行启动一个console用文本状态的界面安装,命令:
virt-install --virt-type kvm -n vm03 -r 1024 --vcpus 1 --os-variant=rhel6 --accelerate -v -w bridge:br0 --disk path=/var/lib/libvirt/images/vm03.qcow2,size=10,format=qcow2 --location=http://192.168.1.166/centos6 --nographics -x "console=ttyS0"


删除虚拟机

例如win7:


Step1:强制关机,如果正常途径无法正常关闭:

virsh destroy win7


Step2:删除xml配置文件

virsh undefine win7


Step3:删除虚拟硬盘文件

rm -f /var/lib/libvirt/images/win7_x86_64.qcow2


克隆虚拟机方法1:


随机产生一个MAC地址:
指定一个MAC前缀便于管理,KVM虚拟机默认格式:
52:54:00:XX:XX:XX

echo "$(hexdump -n3 -e'/3 "52:54:00" 3/1 ":%02X"' /dev/random)"


随机生产一个UUID号码
执行命令:
uuidgen
得出一个随机UUID,类似于以下格式
ab8db1c4-5095-46b0-8b1e-5559e5b23a1c


#暂停原始虚拟机
virsh shutdown centos6.5
virt-clone -o centos6.5 -n centos_new -f /var/lib/libvirt/images/centos6.5_new.qcow2 -m 随机产生的MAC -u 随机产生的UUID
virt-clone 参数介绍
--version 查看版本。
-h,--help 查看帮助信息。
--connect=URI 连接到虚拟机管理程序 libvirt 的URI。
-o 原始虚拟机名称 原始虚拟机名称,必须为关闭或者暂停状态。
-n 新虚拟机名称 --name 新虚拟机名称。
--auto-clone 从原来的虚拟机配置自动生成克隆名称和存储路径。
-u NEW_UUID, --uuid=NEW_UUID 克隆虚拟机的新的UUID,默认值是一个随机生成的UUID。
-m NEW_MAC, --mac=NEW_MAC 设置一个新的mac地址,默认为随机生成 MAC。
-f NEW_DISKFILE, --file=NEW_DISKFILE 为新客户机使用新的磁盘镜像文件地址。
--force-copy=TARGET 强制复制设备。
--nonsparse 不使用稀疏文件复制磁盘映像。


克隆虚拟机方法2:
操作原理:手动修改xml文件
使用模版镜像硬盘文件,比如模版硬盘文件为centos7_base.qcow2,复制为新的虚拟机镜像centos7_new

cp /var/lib/libvirt/images/centos7_base.qcow2 /var/lib/libvirt/images/centos7_new.qcow2


复制原配置文件

cp /etc/libvirt/qemu/centos7_base.xml /etc/libvirt/qemu/centos7_new.xml


编辑新虚拟机配置文件
vi /etc/libvirt/qemu/centos7_new.xml
主要是修改:
虚拟机文件名
UUID,使用 uuidgen 命令生成
硬盘文件地址
网卡MAC地址


<domain type='kvm'>

  <name>centos7_new</name>

  <uuid>xxxxxxxxxxxxxxxxxxxxxxxxxx</uuid>

  <devices>

    <disk type='file' device='disk'>

      <source file='/var/lib/libvirt/images/centos7_new.qcow2'/>

    </disk>

    <interface type='bridge'>

      <mac address='XX:XX:XX:XX:XX:XX'/>

    </interface>    

    </devices>

</domain>





重新加载配置文件:
virsh define /etc/libvirt/qemu/centos7_new.xml


克隆虚拟机方法3:
导入qcow2文件并重新生成xml文件
virt-install --name=centos6.5_x64_240G  --ram=4096  --vcpus=2 --os-type=linux --os-variant=centos6.5  --network default,model=virtio --graphics=spice,password=Zyidc123ABC,listen=0.0.0.0 --noautoconsole  --accelerate --import --disk path=/var/lib/libvirt/images/centos6.5_x64_240G.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=240



虚拟磁盘管理:


查看镜像分区信息

virt-filesystems --long --parts --blkdevs -h -a centos75.qcow2


查看镜像摘要信息:
qemu-img info centos75.qcow2


扩展方法1:生成一块新的硬盘,在虚拟机正常运行的情况下连接到虚拟机:


注意,有些硬盘是支持热插拔的,有些不支持。除了IDE格式的硬盘外,其他的都支持热插拔,这就意味着,如果添加的是IDE的硬盘的话,需要对虚拟机进行重启,使他识别新添加的硬盘。

如果采用virsh命令添加的话。

采用命令生成一块新的名为test1的raw格式的空盘
qemu-img create -f raw /var/lib/libvirt/images/test1.img 10G
临时挂载到XXX虚拟机,vdb表示第二块硬盘

virsh attach-disk XXX /var/lib/libvirt/images/test1.img vdb --cache writeback


然后在xml中的disk后面添加如下几行,确保每次开机都自动连接这块新硬盘。
virsh edit XXX


 <disk type='file' device='disk'>

       <driver name='qemu' type='raw' cache='writeback'/>

       <source file='/var/lib/libvirt/images/test1.img'/>

       <target dev='vdb' bus='virtio'/>

 </disk>


或者


采用命令生成一块新的名为test2的qcow2格式的空盘
qemu-img create -f qcow2 /var/lib/libvirt/images/test2.qcow2 10G
临时挂载到XXX虚拟机,vdb表示第二块硬盘

virsh attach-disk XXX /var/lib/libvirt/images/test2.qcow2 vdb --cache writeback


然后在xml中的disk后面添加如下几行,确保每次开机都自动连接这块新硬盘。

virsh edit XXX


<disk type='file' device='disk'>

       <driver name='qemu' type='qcow2' cache='writeback'/>

       <source file='/var/lib/libvirt/images/test2.qcow2'/>

       <target dev='vdb' bus='virtio'/>

</disk>


重新加载XXX虚拟机的配置文件,确保下次生效:
virsh define /etc/libvirt/qemu/XXX.xml


如果是Linux,可以考虑使用LVM技术把空间合并到根分区里。


拔出新硬盘
virsh detach-disk test1 --target vdb



扩展磁盘方法2:


连接ssh到虚拟机关机,例如名字为centos75,


如果不能通过ssh远程到虚拟机,则需要用控制台关闭系统。

virsh shutdown centos75


或者关闭无效,强行断电:

virsh destroy centos75


给虚拟机镜像添加200G大小,注意需要停止centos75虚拟机

qemu-img resize /var/lib/libvirt/images/centos75.qcow2 +200G


进入系统后,使用fdisk新建分区


扩展磁盘方法3:

直接拉升分区,适用于Windows和Linux,对Windows来说,不需要重装系统,直接把某个分区扩大,包括系统盘。


qemu-img中提供了一个resize的命令,但是该命令只是单纯简单了拉升或者缩小了一个虚拟硬盘大小,对于其中的分区却不能进行修改。此方法是采用红帽自带的插件virt-resize进行拓展。
该命令首先是获取原来的分区信息,还有其他文件信息。然后对新的镜像进行重新分区、格式化。最后拷贝原镜像中的文件到新文件系统中,再用新拓展的镜像替换原有镜像。因为实际采用copy的方 式,所以他花的时间比较长,如果是一个大镜像不建议使用此方法



具体解决方案:


先安装libguestfs-tools工具包。

yum -y install libguestfs-tools


关闭虚拟机
新建一个比原来大的空硬盘

qemu-img create -f qcow2 win7_extend.qcow2 80G

注意,这里的大小是你需要拓展的总大小


查看原硬盘分区,确定需要扩展的分区符,比如Windows7及以上系统一般是sdb2

virt-filesystems --long --parts --blkdevs -h -a  win7_x86_64.qcow2


使用virt-resize进行拉升分区
virt-resize -expand  /dev/sda2 /var/lib/libvirt/images/win7_x86_64.qcow2 /var/lib/libvirt/images/win7_extend.qcow2

注意,此时间很长,请耐心等待


使用新扩展的镜像代替原镜像

mv /var/lib/libvirt/images/win7_extend.qcow2 /var/lib/libvirt/images/win7_x86_64.qcow2


启动虚拟机
virsh start test


在Windows7里查看C盘,应该看到成功拓展

virt-resize的优势:

能对虚拟机中的特定的分区进行拓展。并且能够拓展windows镜像。不需要登录到虚拟机里面进行任何操作。


缺点:
拓展的时候需要关机。对于大的镜像,拓展的时间比较长。


压缩和转换新的image
查看磁盘文件

qemu-img info old_disk.qcow2


压缩和转换
qemu-img convert -c  -O qcow2 old_disk.qcow2 compress_newdisk.qcow2


磁盘管理其他功能
guestfish 套件是镜像管理的 “瑞士军刀”,在没有 guestfish 这个套件之前,对虚拟机镜像管理相当麻烦。guestfish 套件安装非常简单,一条命令就可以。


yum install libguestfs-tools

默认安装是不安装 Windows 系统支持的,如果需要修改 Windows 系统镜像,需要安装 libguestfs-winsupport 组件。在 CentOS 6.5 以后及 CentOS 7 的 yum 源中没有了 libguestfs-winsupport 这个组件,可以使用如下命令安装 Windows 支持:


### CentOS 7.x
rpm -ivh http://people.redhat.com/~rjones/libguestfs-winsupport/7/7.0/x86_64/libguestfs-winsupport-7.0-2.el7.x86_64.rpm


### CentOS 6.5
rpm -ivh http://people.redhat.com/~rjones/libguestfs-winsupport/6/x86_64/libguestfs-winsupport-1.0-7.el6.x86_64.rpm


guestfish:挂载镜像,并提供一个交互的 Shell
guestmount:将镜像像挂载到指定的目录
guestumount:卸载镜像目录
virt-alignment-scan:镜像块对齐扫描
virt-builder:快速镜像创建
virt-cat:显示镜像中的文件内容
virt-copy-in:复制文件到镜像内部
virt-copy-out:复制镜像文件出来
virt-customize:定制虚拟机镜像
virt-df:查看虚拟机镜像空间的使用情况
virt-diff:不启动虚拟机的情况下,比较虚拟机内部两份文件的差别
virt-edit:编辑虚拟机内部文件
virt-filesystems:显示镜像文件系统信息
virt-format:格式化镜像内部磁盘
virt-inspector:镜像信息测试
virt-list-filesystems:列出镜像文件系统
virt-list-partitions:列出镜像分区信息
virt-log:显示镜像日志
virt-ls:列出镜像文件
virt-maks-fs:镜像中创建文件系统
virt-p2v:物理机转虚拟机
virt-p2m-make-disk:创建物理机转虚拟机 ISO 光盘
virt-p2m-make-kickstart:创建物理机转虚拟机 kickstart 文件`
virt-rescue:进入虚拟机救援模式
virt-resize:虚拟机分区大小修改
virt-sparsify:镜像稀疏空洞消除
virt-sysprep:镜像初始化
virt-tar:文件打包并传入/传出镜像
virt-tar-in:文件打包并传入镜像
virt-tar-out:文件打包并传子出镜像
virt-v2v:其它格式虚拟机镜像转 KVM 镜像
virt-win-reg:注册表导入镜像
libguestfs-test-tool:测试 libguestfs
hivex:解压 Widnwos 注册表文件
hivexregedit:合并、导出注册表文件内容
hivexsh:注册表修改交互的 shell
guestfsd:guestfs 服务


使用 qemu-img 管理磁盘镜像
qemu-img 是 qemu用来实现磁盘映像管理的工具组件,其有许多子命令,分别用于实现不同的管理功能,而每一个子命令也都有一系列不同的选项。


usage: qemu-img command [command options]
create:创建一个新的磁盘映像文件
check:检查磁盘映像文件中的错误
convert:转换磁盘映像的格式
info:显示指定磁盘映像的信息
snapshot:管理磁盘映像的快照
commit:提交磁盘映像的所有改变
rbase:基于某磁盘映像创建新的映像文件
resize:增大或缩减磁盘映像文件的大小


转换 qcow2 格式为 vmdk
qemu-img convert -O vmdk -o adapter_type=lsilogic Koan.img Koan.vmdk


磁盘快照:
对磁盘数据进行快照。主要用于虚拟机备份等场合。


内置快照
内置磁盘快照(Internal disk snapshot)
快照点的磁盘状态、数据和快照和 base 磁盘数据放在一个 qcow2 文件中。
虚拟机运行状态和关闭状态都可以创建。
Libvirt 使用 'qemu-img' 命令创建关机状态的磁盘快照。
Libvirt 使用 'savevm' 命令创建运行状态的磁盘快照。
内置系统还原点(Internal system checkpoint)
内存状态、设备状态和磁盘状态,可以为运行中的虚拟机创建。
所有信息都存储在同一个 qcow2 文件中,只有在运行状态才能创建内置系统还原点。
Libvirt 使用'savevm' 命令来创建这种快照


外置快照
外置磁盘快照(External disk snapshot)
磁盘的快照被保存在一个文件中,创建时间点以后的数据被记录到一个新的qcow2 文件中。
同样可以在运行和关闭状态创建。
Libvirt 使用 'transaction' 命令来为运行状态创建这种快照。
Libvirt 使用 'qemu-img' 命令(-o backing_file 指定后端映像)为关闭状态创建这种快照。


创建快照的方式
KVM 可以使用两种方法生成虚拟机的快照:


方法一:使用 virsh snapshot 相关命令进行生成快照(推荐)


外置快照操作:


查看快照:

virsh snapshot-list Koan


创建快照:

virsh snapshot-create-as Koan k3-snap


查看快照:

qemu-img snapshot -l Koan.img


还原快照:

virsh snapshot-revert Koan k3-snap


查看块设备:
virsh doblklist


方法二:使用 qemu-img snapshot 命令进行生成快照


内置快照

使用 qemu-img 命令:关机状态


使用 qemu-img 创建快照、还原快照时,一定要在关机状态下,否则会搞崩虚拟机。

qemu-img snapshot -c koan-1.snap Koan.img
qemu-img snapshot Koan.img -l

qemu-img snapshot -d koan-1.samp Koan.img


快照目录:/var/lib/libvirt/qemu/snapshot/



网络连接:
NAT模式
NAT(Network Address Translation网络地址翻译),NAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。


virsh net-edit default # 如果要创建或者修改NAT网络,要先编辑default.xml:

其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。


virbr0是一个桥接器,接收所有到网络192.168.*.*的内容。


虚拟机支持模块会修改IPtables规则,通过命令可以查看:

iptables -t nat -L -nv
iptables -t filter -L -nv

如果没有default的话,或者需要扩展自己的虚拟网络,可以使用命令重新安装NAT。


virsh net-define /usr/share/libvirt/networks/default.xml
此命令定义一个虚拟网络,default.xml的内容:


<network>

  <name>default</name>

  <bridge name="virbr0" />

  <forward/>

  <ip address="192.168.122.1" netmask="255.255.255.0">

    <dhcp>

      <range start="192.168.122.2" end="192.168.122.254" />

    </dhcp>

  </ip>

</network>

也可以修改xml,创建自己的虚拟网络。


重新加载和激活配置:
virsh  net-define /etc/libvirt/qemu/networks/default.xml


标记为自动启动:
virsh net-autostart default


启动网络:

virsh net-start default


网络启动后可以用以下命令,查看和验证。
brctl show

virsh net-list --all


通过vi命令修改虚拟机配置信息

vim  /etc/libvirt/qemu/centos72.xml


或者通过virsh命令修改
virsh edit centos72


动态更改cpu数量和内存大小

动态调整,如果超过给虚拟机分配的最大内存,需要重启虚拟机。


查看虚拟机名称:

virsh list --all


更改CPU

virsh setvcpus centos7 --maximum 4 --config


更改内存

virsh setmaxmem centos7 1048576 --config


查看信息
virsh dominfo centos7



附件:

KVM详细参数:


一、一般选项
指定虚拟机的名称、内存大小、VCPU个数及特性等;


-n NAME或--name=NAME
虚拟机名称,需全局惟一;


-r MEMORY, --ram=MEMORY
虚拟机内存大小,单位为MB;
--memory 1024 (in MiB)
--memory 512,maxmemory=1024


--vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]
VCPU个数及相关配置;
--vcpus VCPUS
为虚拟机配置的 vcpus 数。例如:
--vcpus 5
--vcpus 5,maxcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2,


--cpu=CPU
CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;
--cpu coreduo,+x2apic
--cpu host


--cpuset=
设置哪个物理CPU能够被虚拟机使用


--accelerate
KVM或KQEMU内核加速,这个选项是推荐最好加上。如果KVM和KQEMU都支持,KVM加速器优先使用。


--metadata METADATA   配置虚拟机元数据。例如:
--metadata name=foo,title="My pretty title",uuid=...
--metadata description="My nice long description"


二、安装参数,指定安装方法、GuestOS类型等;
-c CDROM, --cdrom=CDROM
光盘安装介质;


-l LOCATION, --location=LOCATION
安装源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;多用于ks网络安装


--import
在磁盘映像中构建虚拟机


--pxe
基于PXE完成安装;


--livecd
把光盘当作LiveCD;


--os-type=DISTRO_TYPE
操作系统类型,如linux、unix或windows等;


--os-variant=DISTRO_VARIANT
某类型操作系统的变体,如rhel5、fedora8等,可通过命令virt-install --os-variant list查看


-x EXTRA, --extra-args=EXTRA
根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"


--boot=BOOTOPTS
指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel/initrd来引导系统启动等 ;例如:
--boot  cdrom,hd,network
指定引导次序;


--boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=/dev/ttyS0”
指定启动系统的内核及initrd文件;


三、存储配置


--disk=DISKOPTS
指定存储设备及其属性;格式为--disk /some/storage/path,opt1=val1,opt2=val2等;
--disk DISK
使用不同选项指定存储。例如:
--disk size=10 (new 10GiB image in default location)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
常用的选项有:
device
设备类型,如cdrom、disk或floppy等,默认为disk;


bus

磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;


perms

访问权限,如rw、ro或sh(共享的可读写),默认为rw;


size
新建磁盘映像的大小,单位为GB;


cache

缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);


format

磁盘映像格式,如raw、qcow2、vmdk等;


sparse

磁盘映像使用稀疏格式,即不立即分配指定大小的空间;


-s --file-size= 使用磁盘映像的大小 单位为GB


--nodisks
不使用本地磁盘,在LiveCD模式中常用;


四、网络配置
-w NETWORK, --network=NETWORK,opt1=val1,opt2=val2
配置虚拟机网络接口。例如:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network help


将虚拟机连入宿主机的网络中,其中NETWORK可以为:


bridge=BRIDGE

连接至名为“BRIDEG”的桥设备;


network=NAME

连接至名为“NAME”的网络;


model

GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;


mac
固定的MAC地址;省略此选项时将使用随机地址,但无论何种方式,对于KVM来说,其前三段必须为52:54:00;

--network network=default


--nonetworks
虚拟机不使用网络功能;



五、图形配置


--graphics TYPE,opt1=val1,opt2=val2


--graphics GRAPHICS
配置虚拟机显示设置。例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja


指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口;
TYPE

指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc;


port

TYPE为vnc或spice时其监听的端口;


listen

TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值;


password
TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;


六、设备选项


--serial dev,path=HOSTPATH
附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项,格式为“--serial type,opt1=val1,opt2=val2,...”,

--serial pty

创建伪终端;


--parallel PARALLEL

配置虚拟机并口设备


--video=VIDEO

指定显卡设备模型,可用取值为cirrus、vga、qxl或vmvga;


--host-device=HOSTDEV
--hostdev HOSTDEV

附加一个物理主机设备USB/PCI/etc到客户机。HOSTDEV是随着libvirt使用的一个节点设备名(具体设备如’virsh nodedev-list’的显示的结果)


--controller CONTROLLER
配置虚拟机控制程序设备。例如:
--controller type=usb,model=ich9-ehci1



--input INPUT
配置虚拟机输入设备。例如:
--input tablet

--input keyboard,bus=usb


--channel CHANNEL

配置虚拟机沟通频道


--console CONSOLE
配置虚拟机与主机之间的文本控制台连接


--filesystem FILESYSTEM
将主机目录传递给虚拟机。例如:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template


--sound [SOUND]
配置虚拟机声音设备模拟


--watchdog WATCHDOG
配置虚拟机 watchdog 设备


--smartcard SMARTCARD
配置虚拟机智能卡设备。例如:
--smartcard mode=passthrough


--redirdev REDIRDEV
配置虚拟机重定向设备。例如:
--redirdev usb,type=tcp,server=192.168.1.1:4000


--memballoon MEMBALLOON
配置虚拟机 memballoon 设备。例如:
--memballoon model=virtio


--tpm TPM
配置虚拟机 TPM 设备。例如:

--tpm /dev/tpm


--rng RNG
配置虚拟机 RNG 设备。例如:

--rng /dev/random


--panic PANIC
配置虚拟机 panic 设备。例如:
--panic default


七、虚拟化平台选项


虚拟化平台选项:
-v, --hvm

当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化;


-p, --paravirt

指定使用半虚拟化;


--container

这台虚拟机需要一个容器客户端


--arch ARCH

模拟的 CPU 构架


--machine MACHINE

要模拟的机器类型


--virt-type
使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用’virsh capabilities’命令获取;


八、其它选项
--wait WAIT

等待安装完成的分钟数。


--noreboot

完成安装后不要引导虚拟机。


--check CHECK
启用或禁用验证检查。例如:
--check path_in_use=off

--check all=off


--autostart

指定虚拟机是否在物理启动后自动启动;


--print-xml

如果虚拟机不需要安装过程(--import、--),则显示生成XML而不是创建此虚拟机;默认情况下,此选项仍会创建磁盘映像;


--force
禁止命令进入交互式模式,如果有需要回答yes或no选项,则自动回答为yes;


--dry-run

执行创建虚拟机的整个过程,但不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt;


-d, --debug

显示debug信息;


--noautoconsole

不要自动尝试连接到客户端控制台


--force

禁止命令进入交互式模式,如果有需要回答yes或no选项,则自动回答为yes;


-q, --quiet
禁止无错误输出



虚拟机配置选项:
--security SECURITY

设定域安全驱动器配置。


--numatune NUMATUNE

为域进程调整 NUMA 策略。


--memtune MEMTUNE

为域进程调整内粗策略。


--blkiotune BLKIOTUNE

为域进程调整 blkio 策略。


--memorybacking MEMORYBACKING
为域进程设置内存后备策略。例如:

--memorybacking hugepages=on


--features FEATURES
设置域XML。例如:
--features acpi=off
--features apic=on,eoi=on


--clock CLOCK
设置域XML。例如:

--clock offset=localtime,rtc_tickpolicy=catchup


--pm PM

配置 VM 电源管理功能


--events EVENTS

配置 VM 生命周期管理策略


--resource RESOURCE

配置 VM 资源分区(cgroups)


qemu-img 支持的磁盘镜像文件格式:vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug


5.解决KVM虚拟机鼠标同步问题
kvm虚拟化windows操作系统鼠标有点不灵活等问题,在这里通过以下方式解决。在虚拟机的配置中增加:


# virsh edit wintest01

<input type='tablet' ='usb'/>


禁用网络过滤器


编辑/etc/sysctl.conf添加如下内容
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0


sysctl -p



有道云笔记  https://note.youdao.com/ynoteshare1/index.html?id=38a99254c725343388cdc4842e7271d6&type=note#/








第3条随机版权

扫描二维码推送至手机访问。

版权声明:本文由TranBon博客发布,如需转载请注明出处。

本文链接:https://user.33yd.com/?id=288

相关文章

哈哈哈!大神Note3 终于可以把 酷派系统 或着 酷派系统 “砖头”直接刷机刷成 360 OS 2.0!

哈哈哈!大神Note3 终于可以把 酷派系统 或着 酷派系统 “砖头”直接刷机刷成 360 OS 2.0!

哈哈哈!大神Note3 终于可以把 酷派系统 直接刷成 360 OS 2.0了哈哈哈!大神Note3 终于可以把 酷派系统 “砖头”直接刷成 360 OS 2.0了最新版的刷机软件就可以了,直接把 酷...

在Centos 7 上安装Zabbix监控

在Centos 7 上安装Zabbix监控

一、关闭selinux和iptables && 安装Zabbix rpm包仓库 && 安装zabbix-server-mysql和zabbix-web-mysql &a...

centos固定网卡、网卡名会变、网卡名错乱,解决方法

centos固定网卡、网卡名会变、网卡名错乱,解决方法

cd /etc/udev/rules.d/ vi /etc/udev/rules.d/70-persistent-net.rules echo "SUBSYSTEM==\"...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。