当建立的虚拟主机磁盘不够用,一般都会用到两种方式去扩容:

1,原始盘进行扩容,但扩容操作存在风险。

2,单独创建一块独立磁盘,进行独立挂载,安全高效。

这里我们第一个方式就不考虑了,使用上也没问题,现在直接考虑第二种。

一,创建磁盘并关联

首先,我们以虚拟机gitlabjenkins做演示。

[root@localhost data]# virsh  list  --all
Id    Name                           State
----------------------------------------------------
1     gitlabjenkins                  running

从KVM宿主机上创建磁盘:

qemu-img create -f raw /data/gjdisk2.img 1700G

关联具体kvm实例:

virsh attach-disk gitlabjenkins /data/gjdisk2.img vdd --cache none
这样,关联完成,登录kvm虚拟机可以通过fdisk进行查看了。查看关联情况:
Disk /dev/vdd: 1718.0 GB, 1717986918400 bytes
16 heads, 63 sectors/track, 3328812 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf2c918de

二,对挂载的磁盘分区、格式化、挂载

这个操作就很简单了,就是针对已经关联的磁盘进行分区、格式化、挂载。

三,新添加的磁盘实现宿主机重启后自动挂载

这里有一个问题,我们按照第二步分区、格式化、挂载并写入分区表以后,kvm实例重启挂载没问题,但如果宿主机重启以后,那么新添加的磁盘是不会自动挂载的。原因是重启过程中,磁盘添加到kvm虚拟机实例过程会失败,宿主机无法将磁盘添加到一个没有启动的kvm实例中。

实例启动以后,执行磁盘添加命令。kvm实例单独即可。

根本办法:

1,添加磁盘qemu-img create -f raw /data/gjdisk2.img 1700G

2,编辑kvm实例配置文件xml,比如vr edit domain在最后disk标签下添加:



3,重启kvm实例进去使用fdisk进行分区、格式化、挂载并修改分区表。

这样每次不管是宿主机重启还是kvm实例重启,都会挂载单独的磁盘。

如上是常规添加的办法,还有一种办法是操作源磁盘,通过virt-resize拉升分区,缺点是1,文件比较大的情况下耽误时间比较久。2,kvm需要关机,不适合临时磁盘添加情况。

说明:

1,如果之前有单独添加了磁盘并已经挂载到了实例中的,一样的办法,也是要edit实例配置文件,这里需要注意的是source file路径。另外启动后磁盘的分区名字会发生变化,注意修改分区表即可。

2,这里添加的img格式的磁盘,不利于直接进行snapshot快照的创建、恢复操作,需要进行qcow2格式转换。如果有需要可以进行img转qcow2操作或者直接创建对应格式。