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

CentOS7RHEL7上安装KVM(QEMU)

adminis3年前 (2021-02-23)技术29310
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://bk.tranbon.com/?id=288

相关文章

在Centos 7 上安装Zabbix监控

在Centos 7 上安装Zabbix监控

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

cnetos系统mysql配置my.cnf文件,跳过密码认证登录并设置远程登录(不一定有效)

cnetos系统mysql配置my.cnf文件,跳过密码认证登录并设置远程登录(不一定有效)

cnetos手动安装mysql没有my.cnf配置文件时, 1.可以从其它服务器把my.cnf文件拷贝到需要的服务器上,2.可以touch创建my.cnf文件 这边是直接使用touch命令my.c...

iis7 asp网站 500 - 内部服务器错误。

iis7 asp网站 500 - 内部服务器错误。

其它配置正常的情况下解决方法: 处理完成了!...

发表评论

访客

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