[Ubuntu] disk resize ‘on-the-fly’

Via Proxmox (of VMWare) is een extra disk toegevoegd aan een VM. Deze disk is in de VM de tweede disk, dus ‘/dev/sdb‘ en deze is 100Gb. Nu willen we deze uitbreiden met 20Gb echter zonder downtime van de VM, met andere woorden: ‘on the fly’.

Binnen Proxmox kan de disk groter gemaakt worden, dus die maken we 120G met de ‘Disk Action -> + Resize’ in het ‘Hardware’ overzicht.

Ingelogd op de pve host (ssh) zien we het Logical Volume voor deze VM met

lvdisplay /dev/disk2/vm-201-disk-2

waarbij disk2 de disk-name is waar de VM op is geïnstalleerd, in dit geval ‘disk2’ en vm-201 is het ID van de VM, in dit geval dus ‘201’ en het disknummer ‘disk-2’.

In de VM vragen we de grootte op met ‘fdisk -l /dev/sdb‘:

$ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 120 GiB, 128849018880 bytes, 251658240 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc2d6c0c0

Device     Boot Start       End   Sectors  Size Id Type
/dev/sdb1        2048 209715199 209713152  100G 83 Linux

Zoals te zien is in de output, is de disk wel 120GiB maar de partitie /dev/sdb1 is nog steeds 100G. Om Ubuntu te triggeren om de grootte van de disk te ‘scannen’, geven we het volgende commando:

$ sudo sh -c 'for device in /sys/class/scsi_device/*; do echo 1 > $device/device/rescan; done'

Dit zorgt ervoor dat de disk-devices ge-triggered worden om een rescan uit te voeren. Met ‘growpart‘ kan de partitie uitgebreid worden. growpart is onderdeel van cloud-utils die die moet wel geïnstalleerd zijn.

$ sudo apt install -y cloud-utils

Het commando om de 1e partitie op /dev/sdb uit te breiden is:

$ sudo growpart /dev/sdb 1

CHANGED: partition=1 start=2048 old: size=209713152 end=209715200 new: size=251656159 end=251658207

Het resultaat is in de output en zoals te zien is zijn de nieuwe ‘size‘ en ‘end‘ waardes nu groter. De laatste stap is om het filesystem de grotere partitie te laten gebruiken:

$ sudo resize2fs /dev/sdb1 

resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/sdb1 is mounted on /mnt/storage; on-line resizing required
old_desc_blocks = 13, new_desc_blocks = 15
The filesystem on /dev/sdb1 is now 31457019 (4k) blocks long.

Om te controleren of de grotere partitie daadwerkelijk in gebruik is kunnen we nog een fdisk commando geven:

$ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 120 GiB, 128849018880 bytes, 251658240 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc2d6c0c0

Device     Boot Start       End   Sectors  Size Id Type
/dev/sdb1        2048 251658206 251656159  120G 83 Linux

Het resultaat is een partitie van 120G. Om nu ook het ‘OS system kernel‘ te laten weten dat er een resize heeft plaatsgevonden is er het volgende commando:

$ sudo partprobe -s /dev/sdb

/dev/sdb: msdos partitions 1

Voor Logical Volumes en Volume Groups zijn er de volgende commando’s:

lsblk /dev/sda
pvs
lvextend -l+100%FREE /dev/VG/LV