概念:
KVM的存储虚拟化是通过存储池
(Storage Pool)和卷
(Volume)来管理的。
Storage Pool是宿主机上可以看到的一片存储空间,可以是多种类型,后面会详细讨论。Volume是在Storage Pool中划分出的一块空间,宿主机将Volume分配给虚拟机,Volume在虚拟机中看到的就是一块硬盘。
存储池分类
1.目录类型的Storage Pool
-
文件目录是最常用的Storage Pool类型。KVM将宿主机目录
/var/lib/libvirt/images/
作为默认的Storage Pool。 -
Volume就是该目录下面的文件了。
-
那KVM是怎么知道要把/var/lib/libvirt/images目录当作默认Storage Pool的呢
实际上KVM所有可以使用的Storage Pool都定义在宿主机的/etc/libvirt/storage目录下,每个Pool一个xml文件,默认有一个default.xml
-
使用图形界面添加文件类型的卷volume
-
使用命令行添加文件类型的卷volume
-
修改配置文件
cd /etc/libvirt/qemu/ vi VM2.xml # 找到此处(一下是刚刚看到的两块磁盘),再复制一份<disk></disk> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/cirros-0.3.3-x86_64-disk1.img'/> <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/VM2-1.qcow2'/> <target dev='hdb' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> # 新增的磁盘信息 需要修改source 、target和 address中的 unit(centos中修改slot而非unit) <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/VM2-2.qcow2'/> <target dev='hdc' bus='ide'/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk>
-
创建磁盘
VM2-2.qcow2
# -f 格式 qemu-img create -f qcow2 /var/lib/libvirt/images/VM2-2.qcow2 100M
-
重新定义
virsh define /etc/libvirt/qemu/VM2.xml
-
重启虚拟机,查看磁盘是否添加成功
virsh start VM2
-
-
查看
/var/lib/libvirt/images/
下的vloume卷cd /var/lib/libvirt/images/ ls
-
使用文件做Volume有很多优点
存储方便
移植性好
可复制
可远程访问:远程访问的意思是镜像文件不一定都放置到宿主机本地文件系统中,也可以存储在通过网络连接的远程文件系统,比如NFS,或者是分布式文件系统中,比如GlusterFS,这样镜像文件就可以在多个宿主机之间共享,便于虚机在不同宿主机之间做Live Migration(实时迁移);如果是分布式文件系统,多副本的特性还可以保证镜像文件的高可用 -
KVM支持多种Volume文件格式,在添加Volume时可以选择
raw:是默认格式,即原始磁盘镜像格式,移植性好,性能好,但大小固定,不能节省磁盘空间。
qcow2:是推荐使用的格式,cow表示copy on write,能够节省磁盘空间,支持AES加密,支持zlib压缩,支持多快照,功能很多。
vmdk:是VMWare的虚拟磁盘格式,也就是说VMWare虚机可以直接在KVM上运行
2.LVM类型的Storage Pool
-
LVM:Logical Volume Manager(逻辑卷管理)
-
LV由于没有磁盘的MBR引导记录,不能作为虚拟机的启动盘,只能作为数据盘使用
-
这种配置下,宿主机上的VG(卷组)就是一个Storage Pool,VG中的LV(逻辑卷)就是Volume
-
LV的优点是有较好的性能;不足的地方是管理和移动性方面不如镜像文件,而且不能通过网络远程使用
-
在宿主机上创建了一个VG
参考连接:https://blog.csdn.net/qq_42517220/article/details/107150975
-
查看VG信息
-
创建一个Storage Pool的定义文件
/etc/libvirt/storage/HostVG01.xml
vi /etc/libvirt/storage/HostVG01.xml <pool type='logical'> <name>HostVG01</name> <source> <name>HostVG01</name> <format type='lvm2'/> </source> <target> <path>/dev/HostVG01</path> </target> </pool>
-
通过virsh命令创建新的Storage Pool “HostVG01”
virsh pool-define /etc/libvirt/storage/HostVG01.xml
-
启用HostVG01
virsh pool-start HostVG01
-
在virt-manager中为虚机VM1添加LV的虚拟磁盘(LV的创建也可以通过LVM那篇文章进行,添加时直接选择就可以了)
-
通过命令行给VM2添加LV的虚拟磁盘
- 修改配置文件
vi /etc/libvirt/qemu/VM2.xml # 找到<devices>标签,添加<disk><disk>磁盘信息 <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source dev='/dev/HostVG01/lv02'/> # 此处需修改 <target dev='hdd' bus='ide'/> # 此处需修改dev <address type='drive' controller='0' bus='1' target='0' unit='1'/> # 此处需修改unit </disk>
- 创建虚拟卷/dev/HostVG01/lv02
lvcreate -n lv02 -L 128M HostVG01
- 重新定义
virsh define /etc/libvirt/qemu/VM2.xml
- 通过virt-manager产看VM2添加虚拟磁盘 lv02 是否成功
-
注意:
虚拟机最多添加4块磁盘
磁盘添加 bus=‘1’ unit=‘1’ 两个参数由 0 和 1 组合排列,即:00、01、10、11四种
3.其他类型的Storage Pool
[参考连接:http://libvirt.org/storage.html](http://libvirt.org/storage.html)