I have a virtual machine that recently had its disk image increased from 20GB to 50GB, and fdisk -l
verifies that the VM can see this new size. Now I need to resize my root LVM partition to fill the extra 30GB.
I've found several articles about resizing LVM, but the few that cover resizing the root partition all claim you need to boot from a LiveCD. Is there any way to do this without taking down the server? The server is critical, so I'd like to minimize downtime.
Edit: Output of fdisk -l
:
[root@fedora-host ~]# sudo fdisk -l
Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders, total 104857600 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: 0x00097c90
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 83886079 41430016 8e Linux LVM
Disk /dev/mapper/VolGroup-lv_root: 36.1 GB, 36104568832 bytes
255 heads, 63 sectors/track, 4389 cylinders, total 70516736 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: 0x00000000
Disk /dev/mapper/VolGroup-lv_root doesn't contain a valid partition table
Disk /dev/mapper/VolGroup-lv_swap: 6308 MB, 6308233216 bytes
255 heads, 63 sectors/track, 766 cylinders, total 12320768 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: 0x00000000
Disk /dev/mapper/VolGroup-lv_swap doesn't contain a valid partition table
Edit: How do I resize the physical partition? fdisk can see the free space, but I don't know how to resize primary LVM partition to use it. I tried booting into a LiveCD and using parted'd resize
command, but all it gives me is the error "Unable to detect file system". I found this guide, which says I need to delete the partition and create a new one with the correct size, but that sounds very dangerous.
Final Edit: Parted's resize
command is oddly unable to resize LVM partitions. Go figure. Instead, I simply deleted the old partition and created a new one with the new range, as outlined in the link above, and that correctly resized the LVM partition. I then followed the advice below to resize the volumes and filesystems inside the LVM partition.
You can grow a logical volume online. You'd have to unmount it to shrink it (which requires a LiveCD / Rescue Mode.)
pvresize /dev/sda2
(assuming your LVM partition issda2
. Replace as required.)lvextend /dev/mapper/root -l+100%FREE
(or, whatever your root logical volume is called.)resize2fs /dev/mapper/root
(assuming ext2/3/4)Install gparted. Run as root (use ssh -X or x2go if remote). Select the partition. It should show free space past the end (to the right). If it doesn't, you need to reboot for your virtual machine to see the new size of the virtual device. That should be minimal downtime with systemd.
Right click and select resize. Drag the end to the end of the disk. Make sure you do not touch the beginning. gparted is able to move a partition during resize, but that will, of course destroy a running system. But moving the end is fine. Review the pending operation gparted will perform to make sure you are extending and not moving the partition. Click apply. gparted will change the partition on disk, then issue the kernel ioctl to reread the partition table, changing the size of the live block device as well. Then, since it sees it is an LVM PV, it runs pvresize for you. Exit gparted, and vgs now shows your new space.
I've heard rumors that parted can do all that without the overhead of a GUI, but I've never been able to figure out the voodoo. Parted has to be one of the worst CLI interfaces I've ever tried to use.
Don't use fdisk, you have to delete and reallocate the partition to resize, and by default it will wipe the LVM2 signature on write. I think I saw an "advanced" option to turn off that destructive behavior, but I've never tested it.
You could also try cfdisk (curses fdisk). It might have a usable partition resize. It is easy enough to run pvresize manually, and there is a command to tell the kernel to reread the partition table. But I'd have to test to make sure it doesn't wipe the LVM signature like fdisk.
Did your system really change from 20 to 50 GB? That seems really odd since your sda2 device is ~40GB, lv_root shows 36GB, and swap shows 6GB.
Your output of
fdisk -l
shows the total sectors of/dev/sda
is104857600
. The last sector used by/dev/sda2
is83886079
. This tells me that you have not adjusted the partition size to use all the available space on the drive. The pvresize command doesn't change the partition table. You need to change the partition table first.If the LVM physical volume is on a partition then, no you can't resize it without rebooting.
You can edit partition table on drive, but Linux will refuse to use it until you reboot.
If you're using XFS, switch
resize2fs
toxfs_growfs
.You can display the PVs you use and LVs in volume group using
pvs
andlvs
.PV on raw disk
PV on a partition
First you have to resize the partition, use
parted
,fdisk
or similar tool for that. Remember that those tools edit only the description where partitions are, they don't move data around. In other words, easily you can extend only the last partition on the disk. Then reboot your machine and after that you should be able to inform LVM that it has additional space available:I'd consider checking out ssm (system-storage-manager) if it's available on your distro.
Check out this for a little more info: https://unix.stackexchange.com/a/293173
ssm appears to make it easier to resize logical volumes without having to do everything yourself.
I was able to use to extend my home partition with it after rebooting my OS and logging in first as root. (Had to reboot twice in total, but it worked in the end and i now have an extra 50G available in my /home parition.)
After combining 25 howto's, I finally have this solution. It requires no live cd, it's completely on the fly.
Step 1. format the partition with parted (no gui). In this example the max size of the disk increased from 8BG to 32 GB in virtual box.
Step 2. Create a Physical Volume based on the new partition
Step 3. Add the physical volume to the Volume Group. In a plain fedora 28 server install the volume group is called fedora.
Step 4. Add the available space in the volume group to the logical volume. In a plain fedora 28 server install the logical volume is called root.
Step 5. Tell the filesystem in the logical volume to use the extra space. In fedora the filesystem is xfs.
Attention! xfs_growfs uses the mount point to identify the filesystem, not the name of the filesystem you find in df output!!!!!!!
The command 'xfs_growfs /dev/mapper/fedora-root' will tell you /dev/mapper/fedora-root is not a mounted XFS filesystem. If you are using a different filesystem refer to https://www.tldp.org/HOWTO/LVM-HOWTO/extendlv.html
Step 6. Enjoy
Try testdisk
sudo dnf install testdisk
sudo testdisk
Just set create a log file Then it will list the partitions, - select the media/partition - then type - and analyse - quick search - select and write