Centos 7 Extend partition with unallocated space
Solution 1:
There are three steps to make:
- alter your partition table so
sda2
ends at end of disk - reread the partition table (will require a reboot)
- resize your LVM pv using
pvresize
Step 1 - Partition table
Run fdisk /dev/sda
.
Issue p
to print your current partition table and copy that output to some safe place.
Now issue d
followed by 2
to remove the second partition. Issue n
to create a new second partition. Make sure the start equals the start of the partition table you printed earlier. Make sure the end is at the end of the disk (usually the default).
Issue t
followed by 2
followed by 8e
to toggle the partition type of your new second partition to 8e (Linux LVM).
Issue p
to review your new partition layout and make sure the start of the new second partition is exactly where the old second partition was.
If everything looks right, issue w
to write the partition table to disk. You will get an error message from partprobe that the partition table couldn't be reread (because the disk is in use).
Reboot your system
This step is neccessary so the partition table gets re-read.
Resize the LVM PV
After your system rebooted invoke pvresize /dev/sda2
. Your Physical LVM volume will now span the rest of the drive and you can create or extend logical volumes into that space.
Solution 2:
You can do this without rebooting in CentOS 7. Assuming your disk is /dev/vda and standard RHEL/CentOS partitioning:
Extend partition
# fdisk /dev/vda
Enter p
to print your initial partition table.
Enter d
(delete) followed by 2
to delete the existing partition definition (partition 1 is usually /boot and partition 2 is usually the root partition).
Enter n
(new) followed by p
(primary) followed by 2
to re-create partition number 2 and enter
to accept the start block and enter
again to accept the end block which is defaulted to the end of the disk.
Enter t
(type) then 2
then 8e
to change the new partition type to "Linux LVM".
Enter p
to print your new partition table and make sure the start block matches what was in the initial partition table printed above.
Enter w
to write the partition table to disk. You will see an error about Device or resource busy
which you can ignore.
Update kernel in-memory partition table
After changing your partition table, run the following command to update the kernel in-memory partition table:
# partx -u /dev/vda
Resize physical volume
Resize the PV to recognize the extra space
# pvresize /dev/vda2
Resize LV and filesystem
In this command centos
is the PV, root
is the LV and /dev/vda2
is the partition that was extended. Use pvs
and lvs
commands to see your physical and logical volume names if you don't know them. The -r
option in this command resizes the filesystem appropriately so you don't have to call resize2fs
or xfs_growfs
separately.
# lvextend -r centos/root /dev/vda2
Solution 3:
For those who're having trouble extending logical volumes like me, reading this post might be helping. In summary,
you can use lvextend
to extend your logical volume:
lvextend -l +<PE> <LV_PATH>
you can obtain the number of remaining PE(<PE>
) by vgdisplay
and obtain the path of your logical volume(LV_PATH
) by lvdisplay
.
Then depending on your distribution, you either want xfs_growfs <LV_PATH>
(Centos 7) or resize2fs <LV_PATH>
to finally resize.
Solution 4:
Check this out — everything on a single line, no questions:
parted ---pretend-input-tty /dev/vda resizepart 2 100%;
partx -u /dev/vda; pvresize /dev/vda2;
lvextend -r centos/var /dev/vda2
Here:
-
parted
extends partition (---pretend-input-tty
is a hidden parted flag) -
partx
updates kernel in-memory partition table -
pvresize
resizes physical volume -
lvextend
resizes logical volume and filesystem
This way reboot is not needed.
The above implies that you have vd* volumes, and under vda2
there is an lvm volume group centos
and lvm logical volume var
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
vda 8:0 0 40G 0 disk
├─vda1 8:1 0 1G 0 part /boot
└─vda2 8:2 0 19G 0 part
├─centos-var 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
If you have sd* volumes, like here:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
You can do it the same way:
parted ---pretend-input-tty /dev/sda resizepart 2 100%;
partx -u /dev/sda; pvresize /dev/sda2;
lvextend -r /dev/cl/root /dev/sda2