Linux LVM: Adding Disk Space to Virtual or Physical Drives
Linux LVM: Adding Disk Space to Virtual of Physical Drives
In this writeup, we will aim to increase the size of the root drive that has:
1) Standard drive partitioning using fdisk and no LVM: /dev/sda1
2) Has LVM for the OS and files: /dev/sda2
This procedure will help to avoid the can't find the centos-root logical volume.
Virtual Drive:
The first thing we'll do is to increase the physical size of the disk. To do that, login to whatever hypervisor you have available and increase the drive. For VMware for example, edit the VM properties and increase the size of the drive.
While doing so, also add a secondary drive. We will need this to effectively transition the partition while maintaining the correct labeling. Failing to ensure correct labeling will result with an unmountable drive.
1) Check your mounts:
[root@srv01 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
fd0
sda
??sda1 xfs 42343696-5957-46e3-9f28-863b2778a7df /boot
??sda2 LVM2_member owcjYz-ohz3-3obA-KaL0-wcyn-ayc5-EG1Fgc
??centos-root xfs 729d6ef5-37ec-40c4-a728-3a27120b029c /
??centos-swap swap 11193f5e-498f-4e05-9f2c-e42c4d15ec06 [SWAP]
??centos-home xfs dfdc00f0-bc2e-4406-9c0a-900ed9f864c3 /home
sr0 iso9660 CentOS 7 x86_64 2015-12-09-23-03-16-00
[root@srv01 ~]#
2) Add a second drive, increase the size of the primary one ( /dev/sda above ) and recheck. Use a separate SCSI controller if possible for the second drive. Once done, issue the following from the OS side:
- echo 1 > /sys/block/sda/device/rescan
- lsblk -f
- fdisk -l /dev/sda
- fdisk -l /dev/sdb
3) Create a standard partition and PV ID's:
- fdisk /dev/sdb, followed by options n, (default for all questions) then w to write the partition to the disk.
- lsblk -f to verify
- pvcreate /dev/sdb1
- pvs # (verify)
- vgs # (verify)
4) Verify correct labeling exists for FSTYPE and UUID. This is important. The server won't boot if these are not present on the partition. ( fdisk does not create these instead it sets it to PTTYPE="dos" causing boot failures. )
-
lsblk -f
[root@cm-r01en01 ~]# lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
– sdb1 LVM2_member yudPwG-BCwa-cRL1-8sk8-4ins-Ncth-5CaXUr
[root@cm-r01en01 ~]#
5) Extend the volume and pvmove data from /dev/sda2 to /dev/sdb1 :
- vgextend centos /dev/sdb1
- pvmove /dev/sda2 /dev/sdb1
- vgreduce centos /dev/sda2
6) Remove the old partition using fdisk and verify the new partition matches the size of the disk.
- fdisk /dev/sda
- d, 2, w # d = delete, 2 = partition, w = write to disk.
- (You may need to reboot at this point.)
- fdisk /dev/sda
- n, 2, (default for the rest), w
- fdisk -l /dev/sda
- (You may need to reboot at this point.)
7) Reverse the steps of the VG / LV migration above.
- vgextend centos /dev/sda2
- pvmove /dev/sdb1 /dev/sda2
- vgreduce centos /dev/sdb1
- Remove the temporary disk /dev/sdb1 from the system.
8) You may need to run pvresize:
-
pvresize /dev/sda2
[root@srv01 ~]# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
[root@cm-r01en01 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a– <255.51g 192.06g
[root@srv01 ~]#
At this point, you're done. The newly extended drive is in effect.
Physical Drives:
If you're stuck with a physical here, you don't have much of a choice. The only and safest thing you can do here is to buy a new larger one and skip to the part where we extend the volume. One option is to use the dd command to transfer both the /boot partition and the OS partition to the new disk.
The process for the VG / LV move for physical is identical to that of the VM's with the exception of course that you can't extend the size of the physical disk.
Cheers,
TK