存储池是一种可以简化kvm存储管理的方法,它可以把服务器本地的,或者远程nfs,分布式文件系统,硬盘等组织在一起,来方便对于kvm环境下存储的管理。
存储池可以把多块硬盘资源池化使用,Libvirt可以以存储池的形式对存储进行统一管理,简化操作。
对虚拟机操作来说,存储池和卷不是必须的,管理员保证配置正确和连接即可。
目前我的环境有三个存储池
找到它们的配置文档
里面有一些参数,但是不建议直接改动XML,通过virsh pool-edit iso改动不会出异常。
virsh pool-edit iso
发现就是打开了一个vi
过一下存储池的操作
pool-list
pool-info
基于目录的存储池
准备一个目录,设置目录权限,配置目录的SELinux上下文,隔离虚拟机与虚拟机的操作。
semanage fcontext -a -t virt_image_t '/guest_images(/.*)?'
因为/guest_images这个目录是手工建立的,并不是系统默认目录,所以并没有默认安全上下文,需要我们手工设定。
这条命令会给/guest_images目录及目录下的所有内容设定默认安全上下文类型是virt_image_t
创建存储池也有两种方法:
通过virt-manager创建存储池
目标路径选择刚才的/guest_images
删除池的时候必须先停止池,加号右边有圆点停止,然后最右边delete,删掉这个池。
通过virsh创建存储池
virsh pool-define as guest_images dir --target "/guest_images"
启动起来
设置自动启用
virsh pool-autostart guest_images
这就是通过virsh来创建存储池
同样,删除池需要先停止池
virsh pool-destroy guest_images
virsh pool-delete guest_images
但是配置文件依然存在,所有要用undefine来清除
virsh pool-undefine guest_images
基于分区的存储池
libvirtd会自动mount分区
首先先给KVM1添加一块40G新硬盘
打开kvm1,分区,文件系统
fdisk /dev/sdc
mkfs.ext4 /dev/sdc1
然后通过virt-manager创建一个新的存储池,选择fs类型
源路径就是刚才的分区,目标路径可以理解为mount点,我的目录下现在是没有/guest_images_fs
但是可以看到已经自动给mount了,如果重启,也会自动mount
实验:
如果这时在/guest_images_fs下新建一个文件,关掉libvirtd服务,
然后umount /guest_images_fs,此时/guest_images_fs下的文件已经无法访问。
这时再开启libvirtd服务,/guest_images_fs又可以访问了。
清空实验环境,删除掉存储池guest_images_fs
virsh的操作
如果直接start会提示mount点不存在
解决方法是先build池
virsh pool-build guest_imagesfs
然后就可以用了,清除实验环境。destroy,delete,undefine。
基于磁盘的存储池
先删除刚才sdc1的分区,fdisk /dev/sdc ,d是删除命令
然后仿照生产环境使用2T以上的磁盘,fdisk已经没法处理2T以上的分区了,换parted更改类型,用mklabel改成gpt
然后新建一个sdc.xml文件,标注好参数
virsh pool-define /tmp/sdc.xml
创建池完成,删除的时候发现不支持删除池,undefine就好。
基于LVM的存储池
fdisk /dev/sdc
新建一个分区,格式改成LVM
因为有gpt盘,这里不太一样
原来编号是8e,现在改成31,w写入后完成分区
用现有的vg创建池
pvcreate /dev/sdc1
vgcreate guest_lvm /dev/sdc1
打开virt-manager
由于用的是现有的vg,这里不需要build池,把刚才创建的guest_lvm写上去
这样就建好了一个LVM的存储池
清除实验环境
删除池,vg,pv,分区
vgremove guest_lvm
pvremove /dev/sdc1
fdisk /dev/sdc
d
w
下面通过virt-manager来添加一个lvm池
出现报错
估计是gpt不太支持。这里卡住,以后再解决。
命令行无影响