Skip to content

Latest commit

 

History

History
131 lines (86 loc) · 3.16 KB

deploy_kvm_using_btrfs.md

File metadata and controls

131 lines (86 loc) · 3.16 KB

CentOS 7环境部署kvm虚拟化时,默认的VM镜像存储在/var/lib/libvirt/images目录。不过,对于服务器部署环境,/var目录直接建立在/根文件系统上,该分区只提供了20G左右的空闲空间,无法满足生产环境使用。

Btrfs是Linux平台的下一代文件系统,结合了卷管理和多项文件系统优势,也是最接近ZFS的GPL开源文件系统。

为了能够充分发挥存储性能,提供高效(支持压缩)和高性能的存储特性,通过本文实践,将KVM的镜像存储目录/var/libvirt转换成Btrfs文件系统。

磁盘分区

  • 通过fdiskparted磁盘工具划分好一个primary分区作为Btrfs文件系统所使用的分区,此处使用的分区是 /dev/sda4

部署Btrfs

  • 安装btrfs工具包
yum install btrfs-progs -y
  • 使用Btrfs格式化文件系统
mkfs.btrfs -f /dev/sda4

这里使用-f参数是因为sda4分区原先创建过其他文件系统,这里需要强制创建以忽略提示分区中有其他分区表信息的报错。

  • 检查btrfs文件系统
btrfs filesystem show /dev/sda4

显示输出

Label: none  uuid: e9191083-94ea-4709-a776-218c473c2bc1
	Total devices 1 FS bytes used 112.00KiB
	devid    1 size 1.04TiB used 2.04GiB path /dev/sda4
  • 挂载btrfs文件系统方法
mkdir /data
mount /dev/sda4 /data

复制/var/libvirt目录

  • 首先检查系统中当前是否有访问 /var/libvirt 的文件句柄处于打开状态,例如libvirtd服务需要关闭以便能够迁移目录
lsof | grep libvirt | grep var

如果有虚拟机在运行,则需要先停止虚拟机

此外需要停止libvirtdvirtlogd.socket

systemctl stop libvirtd
systemctl stop virtlogd.socket

完成后再次检查是否还有进程在访问 /var/libvirt 目录,确定没有以后则可以执行下一步

  • 重命名/var/lib/libvirt目录
mv /var/lib/libvirt /var/lib/libvirt.bak

创建Btrfs /data/libvirt子卷

  • 创建/data/libvirt子卷,这个子卷将挂载为/var/lib/libvirt
btrfs subvolume create /data/libvirt
  • 创建/var/lib/libvirt
mkdir /var/lib/libvirt
  • 配置/etc/fstab
/dev/sda4        /data        btrfs        defaults      0 0
/dev/sda4        /var/lib/libvirt    btrfs        subvol=libvirt,defaults,noatime    0 0
  • 挂载/data
mount /data
  • 挂载/var/lib/libvirt
mount /var/lib/libvirt

复制/var/lib/libvirt

采用如下命令将原先备份恢复

(cd /var/lib/libvirt.bak && tar cf - .)|(cd /var/lib/libvirt && tar xf -)

恢复虚拟化服务

systemctl start libvirtd
systemctl start virtlogd.socket

启动对应的虚拟机,例如

virsh start centos7

部署思考

作为生产系统,可以采用将数据存放在 /var 目录下的子目录,从服务器开始安装部署就将 /var 作为一个Btrfs卷,为后续部署做好准备。

例如,RHEL/CentOS/Debian发行版会将web目录默认存放在 /var/www/html 目录;虚拟化数据存放在 /var/lib/libvirt 目录。