Add space to a LVM partition on virtual machine running linux operating system without restart
There are many solutions which are running on virtual machines no matter of what kind (vmware, kvm, xen etc). I will assum that the disk you add is a scsi disk. Ones you have added the disk to the running linux operating system on a virtual machine the new disk will not be always seen. A scan of the scsi devices is needed. You will need to run the following commands:
#echo "- - -" > /sys/class/scsi_host/host#/scan
where # will be a digit. You can find the digit you need by running an ls
#ls /sys/class/scsi_host/host?
host0
After doing this you run fdisk -l
to see the new partition. As example will be a new partition of 400G
fdisk -l output
After you have confirmed that the disk can be seen on the linux you will have to create a new partition on the new disk to add it to the LVM. This can be done by running fdisk /dev/sdX
where x will be a letter specific to your new disk (in my case this is d)
#fdisk /dev/sdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x99bc5403.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help):
We need to create a new patition therefore we need to press "n"
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Create a new primary partiton then set it's type as Linux LVM "8e"
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-838860799, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-838860799, default 838860799):
Using default value 838860799
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
To see the new partition press "p"
Command (m for help): p
Disk /dev/sdd: 429.5 GB, 429496729600 bytes
255 heads, 63 sectors/track, 52216 cylinders, total 838860800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x99bc5403
Device Boot Start End Blocks Id System
/dev/sdd1 2048 838860799 419429376 8e Linux LVM
To save the changes press "w"
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Now it's type to add the new partition to LVM. First we need to create a physical volume from the new partition.
#pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created
Next we need to extend the volume group with the new partition
#vgextend <volume_group_name> /dev/sdd1
To see the new size you can run vgdisplay
# vgdisplay
--- Volume group ---
VG Name <volume_group_name>
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 10
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 4
Act PV 4
VG Size 815.48 GiB
PE Size 4.00 MiB
Total PE 208764
Alloc PE / Size 106365 / 415.49 GiB
Free PE / Size 102399 / 400.00 GiB
VG UUID DiaLkN-XDqh-5pdO-jteG-929K-zZ1B-9TX5I5
Now let's add the new space to the LVM partition
#lvextend -L +400G /dev/<volume_group_name>/<partition_name>
Sometimes when you add the full free space you will get an error that insuffucient free space then redo the above command with several megabytes less:
#lvextend -L +399.99G /dev/<volume_group_name>/<partition_name>
Rounding size to boundary between physical extents: 399.99 GiB
Extending logical volume data to 709.48 GiB
Logical volume data successfully resized
All we need to do now it's to run resize2fs to make linux operating system see the full free space without restart.
#resize2fs /dev/<volume_group_name>/<partition_name>
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/<volume_group_name>/<partition_name> is mounted on /<mount_path>; on-line resizing required
old_desc_blocks = 20, new_desc_blocks = 45
Performing an on-line resize of /dev/pve/data to 185988096 (4k) blocks.
The filesystem on /dev/<volume_group_name>/<partition_name> is now 185988096 blocks long.
With this done you are ready to use the new space added to your linux operating system.