使用libvirt 扩展虚拟机磁盘的方法:
libvirt 工具支持KVM/Qemu,xen, lxc,openvz, esx, hyperv 等虚拟化,是一个使用及其广泛的虚拟化管理工具.
vrish , libvirt 的客户端管理工具,常用到的命令有:
virsh list --all 列出所有的虚拟机,注意当前的user, 可能root 并不能列出已经存在的虚拟机,因为权限的问题;
virsh shutdown VM_NAME 通过call ACPI接口关闭虚拟机,如果VM没有开启ACPI 接口,那么不会成功;
virsh destroy VM_NAME 强行通过掉电的方式进行关机,不推荐,除非系统出现问题;
virsh start VM_NAME 开启虚拟机
virsh suspend VM_NAME 休眠虚拟机
virsh resume VM_NAME 恢复虚拟机
virsh dominfo VM_NAME 列出虚拟机的基本信息
virsh dumpxml VM_NAME 列出虚拟机的配置文件,以xml格式的形式,在该配置文件中,可以找到cpu, mem, disk的相关配置,所以比较有用;
virsh edit VM_NAME 编辑虚拟机的配置文件,一般是刚创建的时候使用;
virsh setmem VM_NAME 512000 #给不活动虚拟机设置内存大小为512000
virsh setvcpus VM_NAME 4 #给不活动虚拟机设置cpu个数为4
值得注意的是,virsh 命令本身支持交互模式,这一点非常好用;
磁盘扩容的步骤(linux 环境):
A. 备份原来的磁盘文件, 参考命令如下:
$ sudo cp /var/lib/libvirt/images/vm-gitlab6/ubuntu-kvm/vm-gitlab6-img1.qcow2 /var/lib/libvirt/images/vm-gitlab6/ubuntu-kvm/vm-gitlab6-img1-back.qcow2
B. 查看磁盘的使用情况, 参考命令如下:
$ sudo virt-df -h vm-gitlab6-img1.qcow2
W: kvm binary is deprecated, please use qemu-system-x86_64 instead
Filesystem Size Used Available Use%
vm-gitlab6-img1.qcow2:/dev/sda1 18G 1.1G 16G 6%
C. 创建新的虚拟磁盘,指定 磁盘大小,这个磁盘将用来替换原来的磁盘(这个过程并不会检查系统中的空间是否足够分配指定的大小,所以确保系统有足够空间是我们需要关注的,这个过程基本不会失败,速度非常快,以下指定创建一个40GB的新磁盘):
$ sudo qemu-img create -f qcow2 vm-gitlab6-img1-big.qcow2 40G
D. 通过virt-resize 命令对需要扩容的分区进行扩容,其过程基本是这样的:
从原来的磁盘获取分区信息,然后把用户指定的分区进行逻辑上的扩容,其余分区保持不变;最后把这个新的分区表写入到新的磁盘;从而在新磁盘上实现对分区的扩容操作;以下是扩展原来磁盘的/dev/sda1分区,并保留其他分区不变的操作过程,以及相应的提示;
$ sudo virt-resize --expand /dev/sda1 vm-gitlab6-img1.qcow2 vm-gitlab6-img1-big.qcow2
Examining vm-gitlab6-img1.qcow2 ...
W: kvm binary is deprecated, please use qemu-system-x86_64 instead
**********
Summary of changes:
/dev/sda1: This partition will be resized from 18.6G to 32.5G. The
filesystem ext4 on /dev/sda1 will be expanded using the 'resize2fs'
method.
/dev/sda2: This partition will be left alone.
**********
Setting up initial partition table on vm-gitlab6-img1-1.qcow2 ...
Copying /dev/sda1 ...
100% ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 00:00
Copying /dev/sda2 ...
100% ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 00:00
W: kvm binary is deprecated, please use qemu-system-x86_64 instead
Expanding /dev/sda1 using the 'resize2fs' method ...
Resize operation completed with no errors. Before deleting the old
disk, carefully check that the resized disk boots and works correctly.
E.
以上完成了新磁盘的分区分配,然后用 virsh-df 命令查看新磁盘分区情况:
$ sudo virt-df -h vm-gitlab6-img1-big.qcow2
W: kvm binary is deprecated, please use qemu-system-x86_64 instead
Filesystem Size Used Available Use%
vm-gitlab6-img1-big.qcow2:/dev/sda1 32G 1.1G 29G 4%
F.
最后是重命名这个新的磁盘和老的磁盘名称,这样就无需从系统层面做变更, 然后进行开机验证; 如果一切都OK, 那么就可以直接删除原来的老磁盘;
$ sudo rm vm-gitlab6-img1.qcow2 $ sudo mv vm-gitlab6-img1-big.qcow2 vm-gitlab6-img1.qcow2 $ sudo chmod 755 vm-gitlab6-img1.qcow2