KVM 虚拟机管理

本文详细介绍了KVM虚拟机的磁盘配置,包括添加磁盘、修改配置文件,以及创建和管理存储池。此外,还讨论了虚拟机磁盘格式的选择,如raw和qcow2,并解释了写时拷贝的概念。内容涵盖了使用Libguestfs进行磁盘挂载和故障排查,以及虚拟机的启动、关闭、重启等管理操作。最后,提到了虚拟机克隆和快照功能,包括qcow2格式支持的快照创建与恢复。
摘要由CSDN通过智能技术生成

虚拟机升级配置

  1. 修改配置⽂件(⽐如添加磁盘,那就添加如下配置)
<disk type='file' device='disk'>
 <driver name='qemu' type='qcow2'/>
 <source file='/var/lib/libvirt/images/vm3-1.img'/>
 <target dev='vda' bus='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x16' function='0x0'/>
</disk> 

特别注意:centos8⾥⾯硬盘和⽹卡的添加已经不能修改slot了,要求修改的是bus地址
在这里插入图片描述

  1. 创建新的空磁盘卷:
[root@kvm ~]# qemu-img create -f qcow2 vm2.qcow2 10G
  1. 重新定义:
[root@kvm ~]# virsh define /etc/libvirtd/qemu/vm3.xml

KVM存储

概念:KVM必须要配置⼀个⽬录当作他存储磁盘镜像(存储卷)的⽬录,我们称这个⽬录为存储池

默认存储池:/var/lib/libvirt/images/

存储池管理
创建基于⽂件夹的存储池(⽬录)
[root@kvm ~]# mkdir -p /data/vmfs
定义存储池与其⽬录
[root@kvm ~]# virsh pool-define-as vmdisk --type dir --target
/data/vmfs
创建已定义的存储池
# 创建已定义的存储池
[root@kvm ~]# virsh pool-build vmdisk
# 查看已定义的存储池,存储池不激活⽆法使⽤。
#virsh pool-list --all
激活并⾃动启动已定义的存储池
 [root@kvm ~]# virsh pool-start vmdisk
 [root@kvm ~]# virsh pool-autostart vmdisk

这⾥vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘⽂件了。

在存储池中创建虚拟机存储卷
 [root@kvm ~]# virsh vol-create-as vmdisk oeltest03.qcow2 20G --
format qcow2

注1:KVM存储池主要是体现⼀种管理⽅式,可以通过挂载存储⽬录,lvm逻辑卷的⽅式创建存储池,
虚拟机存储卷创建完成后,剩下的操作与⽆存储卷的⽅式⽆任何区别了。
注2:KVM存储池也要⽤于虚拟机迁移任务。

存储池相关管理命令
#在存储池中删除虚拟机存储卷
[root@kvm ~]# virsh vol-delete --pool vmdisk oeltest03.qcow2
#取消激活存储池
[root@kvm ~]# virsh pool-destroy vmdisk
#删除存储池定义的⽬录/data/vmfs
[root@kvm ~]# virsh pool-delete vmdisk
#取消定义存储池
[root@kvm ~]# virsh pool-undefine vmdisk

至此KVM存储池配置与管理操作完毕。

⽣产环境存储池使⽤

添加lvm和远程存储即可

磁盘格式
磁盘镜像⽂件格式
  • raw: 原始格式,性能最好
  • qcow: 先去⽹上了解⼀下cow(写时拷⻉copy on write),性能远不能和raw相⽐,所以很快夭折了,所以出现了qcow2
  • qcow2: 性能上还是不如raw,但是raw不⽀持快照,qcow2⽀持快照。
  • qed: 现在默认安装好的⽤的是raw格式,所有做快照要把他转换成qcow2格式
什么叫写时拷⻉?
  • raw⽴刻分配空间,不管你有没有⽤到那么多空间
  • qcow2只是承诺给你分配空间,但是只有当你需要⽤空间的时候,才会给你空间。最多只给你承诺空间的⼤⼩,避免空间浪费
⼯作当中⽤哪个?看你⽤不⽤快照。
  • ⼯作当中虚拟机会有多个备份,⼀个坏了,再起⼀个就⾏了,所有没必要⽤快照。
  • 当然也不⼀定。数据绝对不会存储到本地。
创建磁盘⽂件
建⽴qcow2格式磁盘⽂件:
#qemu-img create -f qcow2 test.qcow2 20G
建⽴raw格式磁盘⽂件:
#qemu-img create -f raw test.raw 20G
查看已经创建的虚拟磁盘⽂件:
#qemu-img info test.qcow2
挂载磁盘

作为虚拟化环境管理员,你肯定遇到过虚拟机⽆法启动的情况。实施排错时,你需要对虚拟机的内部进⾏检查。⽽Libguestfs Linux⼯具集可以在这种情况下为你提供帮助。

利⽤Libguestfs找出损坏的虚拟机⽂件

Libguestfs允许在虚拟机上挂载任何类型的⽂件系统,以便修复启动故障。

使⽤Libguestfs,⾸先需要使⽤Libvirt。Libvirt是⼀个管理接⼝,可以和KVM、Xen和其他⼀些基于
Liunx的虚拟机相互连接。Libguestfs的功能更加强⼤,可以打开Windows虚拟机上的⽂件。但是⾸先你需要将虚拟机迁移到libguestfs可⽤的环境当中,也就是Linux环境。

假如你是vmware的ESXI虚拟机,为了将虚拟机迁移到Linux当中,你可以使⽤SSH连接到ESXi主机,这意味着你⾸先需要启⽤ESXi主机上的SSH访问⽅式。完成之后,在Linux平台上运⾏下⾯的scp命令:

#查看磁盘镜像分区信息:
[root@kvm ~]# virt-df -h -d vm1
 Filesystem Size Used Available Use%
 vm1:/dev/sda1 484M 32M 428M 7%
 vm1:/dev/sdb1 3.5G 3.5G 0 100%
 vm1:/dev/VolGroup/lv_root 6.1G 1.1G 4.7G 18%
[root@kvm ~]# virt-filesystems -d vm1
 /dev/sda1
 /dev/sdb1
 /dev/VolGroup/lv_root
#挂载磁盘镜像分区:
[root@kvm ~]# guestmount -d vm1 -m /dev/vda1 --rw /mnt

注:mtab⽂件在centos7的启动过程中⾮常有⽤,删掉会导致不能启动

KVM管理

KVM基本管理

查看 启动 关闭 重启 重置 查看

# 查看虚拟机:
[root@kvm ~]# virsh list
 Id Name State
 ----------------------------------------------------
 2 vm1 running
[root@kvm ~]# virsh list --all
 Id Name State
 ----------------------------------------------------
 2 vm1 running

# 查看KVM虚拟机配置⽂件(X):
[root@kvm ~]# virsh dumpxml name

# 将node4虚拟机的配置⽂件保存⾄node6.xml(X):
[root@kvm ~]# virsh dumpxml node4 > /etc/libvirt/qemu/node6.xml

# 修改node6的配置⽂件(X):
[root@kvm ~]# virsh edit node6
如果直接⽤vim编辑器修改配置⽂件的话,需要重启libvirtd服务

# 启动:
[root@kvm ~]# virsh start vm1
Domain vm1 started

# 暂停虚拟机:
#virsh suspend vm_name

# 恢复虚拟机:
#virsh resume vm_name

# 关闭:
 ⽅法1:
 [root@kvm ~]# virsh shutdown vm1
 Domain vm1 is being shutdown
 ⽅法2(X):
 [root@kvm ~]# virsh destroy vm1
 Domain vm1 destroyed

# 重启:
 [root@kvm ~]# virsh reboot vm1
 Domain vm1 is being reboote

# 重置:
 [root@kvm ~]# virsh reset vm1
 Domain vm1 was reset

# 删除虚拟机:
 [root@kvm ~]# virsh undefine vm2
 Domain vm2 has been undefined
注意:虚拟机在开启的情况下undefine是⽆法删除的,但是如果再destroy会直接被删除掉

# 虚拟机开机⾃动启动:
 [root@kvm ~]# virsh autostart vm1

# 域 vm1标记为⾃动开始
 [root@kvm ~]# ls /etc/libvirt/qemu/autostart/ //此⽬录默认不存在,在
有开机启动的虚拟机时⾃动创建
 vm1.xml
 [root@kvm ~]# virsh autostart --disable vm1
 域 vm1取消标记为⾃动开始

# 查看所有开机⾃启的guest os:
 [root@kvm ~]# ls /etc/libvirt/qemu/autostart/
 [root@kvm ~]# virsh list --all --autostart
虚拟机克隆
  1. 图形界⾯

Applications (左上⻆)-----> System Tools ------>Virtual Machine Manager

关闭要克隆的虚拟机,右键点击虚拟机选择Clone

  1. 字符终端,命令克隆
[root@kvm ~]# virt-clone -o vm1 --auto-clone
 WARNING 设置图形设备端⼝为⾃动端⼝,以避免相互冲突。
 正在分配 'vm1-clone.qcow2' | 6.0 GB 00:00:05
 成功克隆 'vm1-clone'。
 -o origin
 [root@kvm ~]# virt-clone -o vm1 -n vm2 --auto-clone
 WARNING 设置图形设备端⼝为⾃动端⼝,以避免相互冲突。
 正在分配 'vm2.qcow2' | 6.0 GB 00:00:06
 成功克隆 'vm2'。
 [root@kvm ~]# virt-clone -o vm1 -n vm2 -f
/var/lib/libvirt/images/vm2.img
 正在克隆
 vm1.img | 8.0 GB 01:03
 Clone 'vm2' created successfully.
  1. 增量镜像

注意:扩展内容,了解即可

a. 概述

实验⽬的

通过⼀个基础镜像(node.img),⾥⾯把各个虚拟机都需要的环境都搭建好,然后基于这个
镜像建⽴起⼀个个增量镜像,每个增量镜像对应⼀个虚拟机,虚拟机对镜像中所有的改变都记
录在增量镜像⾥⾯,基础镜像始终保持不变。

功能
节省磁盘空间,快速复制虚拟机。

环境

  • 基本镜像⽂件:node.img 虚拟机ID:node
  • 增量镜像⽂件:node4.img 虚拟机ID:node4

要求

以基本镜像⽂件node.img为基础,创建⼀个镜像⽂件node4.img,以此创建⼀个虚拟机
node4,虚拟机node4的改变将存储于node4.img中。

b、创建增量镜像⽂件

[root@kvm ~]# qemu-img create -b node.img -f qcow2 node4.img
[root@kvm ~]# qemu-img info node4.img
image: node4.img
file format: qcow2
virtual size: 20G (21495808000 bytes)
disk size: 33M
cluster_size: 65536
backing file: node.img (actual path: node.img)

注:该实验只是针对qcow2格式的镜像⽂件,未测试raw格式的镜像⽂件是否可⾏。

c、创建虚拟机node4的XML配置⽂件

[root@kvm ~]# cp /etc/libvirt/qemu/node.xml
/etc/libvirt/qemu/node4.xml
[root@kvm ~]# vim /etc/libvirt/qemu/node4.xml
<domain type='KVM'>
<name>node4</name> #node4的虚拟机名,须修改,否则与基本虚拟机冲
突
<uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fe4</uuid> #node4的UUID,必须修改,
否则与基本虚拟机冲突
<memory>524288</memory>
<currentMemory>524288</currentMemory>
<vcpu cpuset='0-1'>2</vcpu>
<os>
 <type arch='x86_64' machine='rhel5.4.0'>hvm</type>
 <boot dev='hd'/>
</os>
<features>
 <acpi/>
 <apic/>
 <pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
 <emulator>/usr/libexec/qemu-KVM</emulator>
 <disk type='file' device='disk'>
 <driver name='qemu' type='qcow2'/>
 <source file='/virhost/KVM_node/node4.img'/> #将原指
向/virhost/KVM_node/node.img改为node4.img
 <target dev='vda' bus='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0'/>
 </disk>
 <interface type='bridge'>
 <mac address='54:52:00:69:d5:f4'/> #修改⽹卡MAC,防⽌冲突
 <source bridge='br0'/>
 <model type='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
 </interface>
 <interface type='bridge'>
 <mac address='54:52:00:69:d5:e4'/> #修改⽹卡MAC,防⽌冲突
 <source bridge='br0'/>
 <model type='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
 </interface>
 <serial type='pty'>
 <target port='0'/>
 </serial>
 <console type='pty'>
 <target type='serial' port='0'/>
 </console>
 <input type='mouse' bus='ps2'/>
 <graphics type='vnc' port='5904' autoport='no' listen='0.0.0.0'
passwd='xiaobai'>
 <listen type='address' address='0.0.0.0'/>
 </graphics>
 <video>
 <model type='cirrus' vram='9216' heads='1'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
function='0x0'/>
 </video>
 <memballoon model='virtio'>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0'/>
 </memballoon>
</devices>
</domain>
根据xml配置定义虚拟机node4
[root@kvm ~]#virsh define /etc/libvirt/qemu/node4.xml
[root@kvm ~]#virsh start node4

e、测试

[root@kvm ~]# du -h node.img
6.3G node.img
[root@kvm ~]# du -h node4.img
33M node4.img
[root@kvm ~]# dd if=/dev/zero of=test bs=1M count=200 #在虚拟机node4
上增量200M⼤⼩⽂件
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 1.00361 seconds, 209 MB/s
[root@kvm ~]# du -h node.img #基本镜像⽂件node.img⼤⼩未变
6.3G node.img
[root@kvm ~]# du -h node4.img #增量镜像⽂件node4.img增加200M了
234M node4.img
快照

为虚拟机vm8创建⼀个快照

[root@kvm ~]# virsh snapshot-create-as vm8 vm8.snap
error: unsupported configuration: internal snapshot for disk vda
unsupported for storage type raw

raw:

使⽤⽂件来模拟实际的硬盘(当然也可以使⽤⼀块真实的硬盘或⼀个分区)。由于原⽣的裸格式,不⽀持snapshot也是很正常的。但如果你使⽤LVM的裸设备,那就另当别论。说到LVM还是⼗分的犀利的⽬前来LVM的snapshot、性能、可扩展性⽅⾯都还是有相当的效果的。⽬前来看的话,备份的话也问题不⼤。就是在虚拟机迁移⽅⾯还是有很⼤的限制。但⽬前虚拟化的现状来看,真正需要热迁移的情况⽬前需求还不是是否的强烈。虽然使⽤LVM做虚拟机镜像的相关公开资料⽐较少,但⽬前来看牺牲⼀点灵活性,换取性能和便于管理还是不错的选择。

qcow2

现在⽐较主流的⼀种虚拟化镜像格式,经过⼀代的优化,⽬前qcow2的性能上接近raw裸格式的性能,
这个也算是redhat的官⽅渠道了。

对于qcow2的格式,⼏点还是⽐较突出的,qcow2的snapshot,可以在镜像上做N多个快照:

  • 更⼩的存储空间
  • Copy-on-write support
  • ⽀持多个snapshot,对历史snapshot进⾏管理
  • ⽀持zlib的磁盘压缩
  • ⽀持AES的加密

查看镜像⽂件格式:

[root@kvm ~]# qemu-img info /var/lib/libvirt/images/vm8.img
image: /var/lib/libvirt/images/vm8.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 10G

格式转换:
把raw格式转换成qcow2格式

[root@kvm ~]# qemu-img convert -f raw -O qcow2
/var/lib/libvirt/images/vm8.img /var/lib/libvirt/images/vm8_qcow2.img
[root@kvm ~]# ls -l /var/lib/libvirt/images/
total 28381680
-rw-------. 1 qemu qemu 10737418240 Aug 16 01:09 vm8.img
-rw-r--r--. 1 root root 3076521984 Aug 16 01:09 vm8_qcow2.img
[root@kvm ~]# qemu-img info /var/lib/libvirt/images/vm8_qcow2.img
image: /var/lib/libvirt/images/vm8_qcow2.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 2.9G
cluster_size: 65536

将虚拟机的硬盘指向转换后的qcow2.img

在虚拟机中创建⼀个⽬录,但⽬录中是空的

[root@kvm ~]# mkdir /test
[root@kvm ~]# ls /test

给虚拟机vm8创建第⼀个快照vm8.snap1

[root@kvm ~]# virsh snapshot-create-as vm8 vm8.snap1
[root@kvm ~]# qemu-img info /var/lib/libvirt/images/vm8_qcow2.img
image: /var/lib/libvirt/images/vm8_qcow2.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 3.1G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 vm8.snap1 229M 2013-08-16 01:25:39 00:03:58.995

在虚拟机中,给 /test 中复制2个⽂件

[root@kvm ~]# cp install.log anaconda-ks.cfg /test
[root@kvm ~]# ls /test
anaconda-ks.cfg install.log

给虚拟机vm8创建第⼆个快照vm8.snap2

[root@kvm ~]# virsh snapshot-create-as vm8 vm8.snap2
Domain snapshot vm8.snap2 created
[root@kvm ~]# virsh snapshot-list vm8

关闭虚拟机,恢复到第⼀个快照

[root@kvm ~]# virsh shutdown vm8
[root@kvm ~]# virsh snapshot-revert vm8 vm8.snap1

在虚拟机中,发现 /test ⽬录为空

[root@kvm ~]# ls /test

关闭虚拟机,恢复到第⼆个快照

[root@kvm ~]# virsh shutdown vm8
[root@kvm ~]# virsh snapshot-revert vm8 vm8.snap2

在虚拟机中,发现 /test 有拷⻉的2个⽂件

[root@kvm ~]# ls /test
anaconda-ks.cfg install.log

查看虚拟机快照

[root@kvm ~]# virsh snapshot-list vm8

删除虚拟机快照

[root@kvm ~]# virsh snapshot-delete --snapshotname vm8.snap2 vm8
[root@kvm ~]# virsh snapshot-list vm8
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值