KVM expand qcow2 disk online
Recently I needed to expand my nfs servers disk system while file operations where ongoing.
So the easy and save way with qemu-img resize and final reboot of the VM was not possible.
Finally I found a way to resize the qcow2 disk of the vm online.
Contents
1 Collect Information
1.1 Free Space
1.1.1 File Server VM
- CentOS8 Core
[root@nfs ~]# df -hP /srv/ Filesystem Size Used Avail Use% Mounted on /dev/vdb 985G 707G 278G 72% /srv
1.1.2 KVM Hypervisor
- CentOS7
[root@clue1 ~]# vmh -l nfs #my personal script, look at github if you like it ===---------- VM: nfs ----------=== State: running Autostart: enable Memory: 1024 MB CPU: 2 ---------- Network Interfaces: Interface Type Source Model MAC vnet6 bridge br0 virtio 52:54:00:5d:c7:87 ---------- Block Devices: Target Source Size vda /srv/vm/images/nfs.qcow2 7.0G 40G vdb /srv/vm/images/nfs_srv.qcow2 973G 1.0T [root@clue1 ~]# df -hP /srv Filesystem Size Used Avail Use% Mounted on /dev/mapper/raid-vm 2.8T 1.2T 1.5T 45% /srv [root@clue1 ~]# qemu-img info -U /srv/vm/images/nfs_srv.qcow2 image: /srv/vm/images/nfs_srv.qcow2 file format: qcow2 virtual size: 1.0T (1073741824000 bytes) disk size: 972G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
2 Resize the qcow2 disk online
[root@clue1 ~]# virsh Welcome to virsh, the virtualization interactive terminal. Type: 'help' for help with commands 'quit' to quit virsh # qemu-monitor-command nfs info block --hmp drive-virtio-disk0 (#block185): /srv/vm/images/nfs.qcow2 (qcow2) Attached to: /machine/peripheral/virtio-disk0/virtio-backend Cache mode: writeback drive-virtio-disk1 (#block360): /srv/vm/images/nfs_srv.qcow2 (qcow2) Attached to: /machine/peripheral/virtio-disk1/virtio-backend Cache mode: writeback virsh # qemu-monitor-command nfs block_resize drive-virtio-disk1 1.5T --hmp [root@clue1 ~]# qemu-img info -U /srv/vm/images/nfs_srv.qcow2 image: /srv/vm/images/nfs_srv.qcow2 file format: qcow2 virtual size: 1.5T (1649267441664 bytes) disk size: 972G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
3 Align the VM Disk size
[root@nfs ~]# df -hPT /srv/ Filesystem Type Size Used Avail Use% Mounted on /dev/vdb ext4 985G 719G 266G 74% /srv [root@nfs ~]# resize2fs /dev/vdb resize2fs 1.45.4 (23-Sep-2019) Filesystem at /dev/vdb is mounted on /srv; on-line resizing required old_desc_blocks = 125, new_desc_blocks = 192 The filesystem on /dev/vdb is now 402653184 (4k) blocks long. [root@nfs ~]# df -hPT /srv/ Filesystem Type Size Used Avail Use% Mounted on /dev/vdb ext4 1.5T 720G 793G 48% /srv
Looks easy, doesn't it? :-)