Tuesday, November 10, 2015

Resizing Disk Space on Ubuntu Server VMs Running on VMware ESXi 5

When you build a VM on VMware, you start with say 40GBs of hard disk space. You install the OS, setup the server, setup the database and you're online. But what happens when there's no more room on the server for your database and you need to add more disk space?
The process is quite simple:
a) Connect to the VMware ESXi 5 server using the vShpere Client. Edit the VM's properties to increase the hard disk size (VM has to be off). Now restart the VM. 
b) Login via SSH to the VM and follow this process.
- First list all partitions:
$ ls -al /dev/sda*
- Create new partition using fdisk:
$ fdisk /dev/sda
Then:
    type p - to list all your partitions
    type n - to create a new partition
    type l - for "logical"
    then give it a number (e.g. if you got 2 partitions listed as /dev/sda1 & /dev/sda2, for the new partition simply type "3" to create /dev/sda3)
    type t - to change the partition type to "Linux LVM"
    provide the partition number you previously created
    type 8e - for the "Linux LVM" type
    type p - to list the new partition table
    type w - to write changes and exit
- Reboot server:
$ reboot
- Assuming you created partition /dev/sda3, let's now create the physical volume in that partition:
$ pvcreate /dev/sda3 
- Now let's extend the server's Volume Group to that physical volume.
$ vgdisplay
This will give you the info on your current Volume Group. Note down the entry next to "VG Name". That's your Volume Group name.
$ vgextend EnterVolumeGroupNameHere /dev/sda3

Keep in mind

If you get a message saying /dev/sda3 could not be added to your Volume Group, you need to remove the physical volume and recreate it. Metadata might have gotten corrupt and thus the volume cannot be added to your Volume Group. So just do:
$ pvremove /dev/sda3
And then again:
$ pvcreate /dev/sda3 
- Since we're (essentially) extending the main logical volume, let's get the name of that:
$ lvdisplay
and note down the entry next to "LV Name". This is your logical volume's name (e.g. /dev/srv/root), which you'll now extend to the newly added partition/physical volume.

- Extend the logical volume by X GBs:
$ lvextend -L +XG yourLogicalVolumeNameMake sure you replace X above with the actual number of GBs you've added in your VM's settings. So if you increased your VM by 20GBs, the command becomes:
$ lvextend -L +20G yourLogicalVolumeName 
- Finally, let's resize the file system to the new allocated space:
$ resize2fs yourLogicalVolumeName
(this may take some time depending on number of GBs added to the file system.

- Check the new file system sizes:
$ df -hTYou should now see an increased disk space for your primary logical volume.

- Reboot and you're set :)