OpenStack Volume Resize ======================== This is a document about resizing openstack volumes. 1. Resize the attached-but-not-mounted disk -------------------------------------------- The first test is resizing the attched-but-not-mounted disk. Here is a volume `test_vol` attached to the VM.:: root@btx-0:/# o volume list +--------------------------------------+----------+--------+------+-------------------------------+ | ID | Name | Status | Size | Attached to | +--------------------------------------+----------+--------+------+-------------------------------+ | afecb155-dd07-45f4-abca-d6c654b73b29 | test_vol | in-use | 5 | Attached to test on /dev/vdb | +--------------------------------------+----------+--------+------+-------------------------------+ List the block devices in the VM.:: $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 1G 0 disk |-vda1 252:1 0 1015M 0 part / `-vda15 252:15 0 8M 0 part vdb 252:16 0 5G 0 disk |-vdb1 252:17 0 103M 0 part `-vdb15 252:31 0 8M 0 part The `test_vol` is mapped to `vdb` and is not mounted. Resize the volume to 10GiB.:: root@btx-0:/# o volume set --size 10 test_vol Check the volume size in openstack.:: root@btx-0:/# o volume list +--------------------------------------+----------+--------+------+-------------------------------+ | ID | Name | Status | Size | Attached to | +--------------------------------------+----------+--------+------+-------------------------------+ | afecb155-dd07-45f4-abca-d6c654b73b29 | test_vol | in-use | 10 | Attached to test on /dev/vdb | +--------------------------------------+----------+--------+------+-------------------------------+ Check the volume inside the VM.:: $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 1G 0 disk |-vda1 252:1 0 1015M 0 part / `-vda15 252:15 0 8M 0 part vdb 252:16 0 10G 0 disk |-vdb1 252:17 0 103M 0 part `-vdb15 252:31 0 8M 0 part Yes, `vdb` is resized to 10GiB. The dmesg log also shows it is resized.:: [1215561.272261] virtio_blk virtio5: [vdb] new size: 20971520 512-byte logical blocks (10.7 GB/10.0 GiB) [1215561.289134] vdb: detected capacity change from 0 to 10737418240 * Conclusion: Attached-but-not-mounted volume can be resized! 2. Resize the attached-and-mounted disk ---------------------------------------- The second test is resizing the attched-and-mounted disk. Delete /dev/vdb1 and /dev/vdb15 partitions and format /dev/vdb.:: # mkfs.ext4 /dev/vdb mke2fs 1.44.5 (15-Dec-2018) Found a gpt partition table in /dev/vdb Proceed anyway? (y,N) y Discarding device blocks: done Creating filesystem with 2621440 4k blocks and 655360 inodes Filesystem UUID: 08eccbb5-bc20-4483-af44-2c42462c792c Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done Mount it to /srv.:: # mkdir /srv # mount /dev/vdb /srv # df -hT /srv Filesystem Type Size Used Available Use% Mounted on /dev/vdb ext4 9.8G 36.0M 9.2G 0% /srv Resize the volume to 15GiB.:: root@btx-0:/# o volume set --size 15 test_vol Check the volume size in openstack.:: root@btx-0:/# o volume list +--------------------------------------+----------+--------+------+-------------------------------+ | ID | Name | Status | Size | Attached to | +--------------------------------------+----------+--------+------+-------------------------------+ | afecb155-dd07-45f4-abca-d6c654b73b29 | test_vol | in-use | 15 | Attached to test on /dev/vdb | +--------------------------------------+----------+--------+------+-------------------------------+ Check the volume size inside the VM.:: # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 1G 0 disk |-vda1 252:1 0 1015M 0 part / `-vda15 252:15 0 8M 0 part vdb 252:16 0 15G 0 disk /srv # df -hT /srv Filesystem Type Size Used Available Use% Mounted on /dev/vdb ext4 9.8G 36.0M 9.2G 0% /srv The volume is resized to 15G but the mounted size is still 10GiB. Extend it with resize2fs command.:: # resize2fs /dev/vdb resize2fs 1.44.5 (15-Dec-2018) Filesystem at /dev/vdb is mounted on /srv; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 2 The filesystem on /dev/vdb is now 3932160 (4k) blocks long. # df -hT /srv Filesystem Type Size Used Available Use% Mounted on /dev/vdb ext4 14.7G 40.0M 13.9G 0% /srv Yes, it is resized to 15G. * Conclusion: Attached-and-mounted disk can be resized and the mounted filesystem can be extended using the appropriate resize tool (resize2fs for ext4, xfs_growfs for xfs). 3. Resize the OS disk ---------------------- The final test is resizing the OS disk. I create a debian 12 VM with 2 GiB OS disk volume. Here is the block list inside the VM.:: debian@debian12-vm:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 2G 0 disk ├─sda1 8:1 0 1.9G 0 part / ├─sda14 8:14 0 3M 0 part └─sda15 8:15 0 124M 0 part /boot/efi debian@debian12-vm:~$ df -hT / Filesystem Type Size Used Avail Use% Mounted on /dev/sda1 ext4 1.9G 1006M 734M 58% / Resize the OS disk.:: root@btx-0:~# o volume set --size 5 debian12-vol Check the volume size in openstack.:: root@btx-0:~# o volume list +--------------------------------------+--------------+--------+------+--------------------------------------+ | ID | Name | Status | Size | Attached to | +--------------------------------------+--------------+--------+------+--------------------------------------+ | f54996b8-a1b9-4543-942e-c3af3e4a9610 | debian12-vol | in-use | 5 | Attached to debian12-vm on /dev/sda | | afecb155-dd07-45f4-abca-d6c654b73b29 | test_vol | in-use | 15 | Attached to test on /dev/vdb | +--------------------------------------+--------------+--------+------+--------------------------------------+ Check the volume inside the VM.:: debian@debian12-vm:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 5G 0 disk ├─sda1 8:1 0 1.9G 0 part / ├─sda14 8:14 0 3M 0 part └─sda15 8:15 0 124M 0 part /boot/efi Yes, it is resized to 5GiB. I need to extend the root partition (sda1).:: root@debian12-vm:~# growpart /dev/sda 1 CHANGED: partition=1 start=262144 old: size=3930112 end=4192255 new: size=10223583 end=10485726 root@debian12-vm:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 5G 0 disk ├─sda1 8:1 0 4.9G 0 part / ├─sda14 8:14 0 3M 0 part └─sda15 8:15 0 124M 0 part /boot/efi root@debian12-vm:~# df -hT / Filesystem Type Size Used Avail Use% Mounted on /dev/sda1 ext4 1.9G 1.2G 522M 71% / Yes, the root partition is extended but the filesystem is still not. Extend the filesystem.:: root@debian12-vm:~# resize2fs /dev/sda1 resize2fs 1.47.0 (5-Feb-2023) Filesystem at /dev/sda1 is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/sda1 is now 1277947 (4k) blocks long. root@debian12-vm:~# df -hT / Filesystem Type Size Used Avail Use% Mounted on /dev/sda1 ext4 4.8G 1.2G 3.4G 27% / * Conclusion: OS disk can be resized with appropriate tools (growpart, resize2fs).