Table of Contents
Red Hat LVM
Summary: This page will start with a howto on resizing a LVM disk and all components. Further down there is more information on creating LVM partitions, filesystems on these disks and mounting them.
Date: Around 2014
Refactor: 29 March 2025: Checked links and formatting.
Howto: Resize the Disk and All Components
Environment: Virtual Machine Red Hat 6.2 with one virtual disk, fully used. Disk is partitioned like this:
/dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 5221 41736870 8e Linux LVM
And has the following file systems:
Filesystem 1048576-blocks Used Available Capacity Mounted on /dev/mapper/rootvg-rootlv 35492 33341 320 100% / /dev/sda1 190 13 168 7% /boot tmpfs 1975 0 1975 0% /dev/shm
Goal: Extend the virtual disk and resize the root filesystem
To achieve this goal the following steps need to be taken:
- Resize virtual disk
- Reboot to let the OS recognize the added space
- Resize the LVM partition
- Reboot to start using the new file system table
- Resize the Physical Volume
- Resize the logical volume
- Resize the filesystem
Note that if you add a disk you can just rescan the SCSI bus:[root@oraclebox ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
Resize Virtual Disk
Resizing the virtual disk is a matter of editing the VM's properties. When done reboot the VM.
For more information on resizing the virtual disk see here.
Today someone told me that on VMware he resized disk should be visible to the guest right away, the VMware tools will tell him that. Haven't tested it yet.
Resize the LVM Partition
Resizing the LVM partition is done with good old fdisk. In this procedure you remove the old LVM partition and then recreate it while adding the new disk space:
- Run fdisk /dev/sda then press p
[root@oraclebox ~]# fdisk /dev/sda The number of cylinders for this disk is set to 7832. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/sda: 64.4 GB, 64424509440 bytes 255 heads, 63 sectors/track, 7832 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 5221 41736870 8e Linux LVM
Note that the disk is 64.4 GB large and that the last used cylinder does not have the same number as the total cylinders of the disk.
* Press d then 2 to remove the partition
- Press n then primary p start cylinder 26 last cylinder 7832 to add the newly re-sized partition.
WARNING: Make sure the old and new partition start at the same cylinder position, not doing so will destroy your data.
Command (m for help): d Partition number (1-4): 2 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (26-7832, default 26): Using default value 26 Last cylinder or +size or +sizeM or +sizeK (26-7832, default 7832): Using default value 7832
- Press t partition 2 Hex code 8e
Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): L 0 Empty 1e Hidden W95 FAT1 80 Old Minix bf Solaris 1 FAT12 24 NEC DOS 81 Minix / old Lin c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 82 Linux swap / So c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 83 Linux c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c7 Syrinx 5 Extended 41 PPC PReP Boot 85 Linux extended da Non-FS data 6 FAT16 42 SFS 86 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set de Dell Utility 8 AIX 4e QNX4.x 2nd part 88 Linux plaintext df BootIt 9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi ee EFI GPT f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a6 OpenBSD f0 Linux/PA-RISC b 11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f1 SpeedStor 12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f4 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f2 DOS secondary 16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot fb VMware VMFS 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM)
- Press p and than w to write the new partition table
Command (m for help): p Disk /dev/sda: 64.4 GB, 64424509440 bytes 255 heads, 63 sectors/track, 7832 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 7832 62709727+ 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
Now reboot the virtual machine.
Rebooting might not be required withpartx -a /dev/sda
Resize the Physical Volume
Now the partition is changed we can extend the physical volume with the newly added space:
[root@oraclebox ~]# vgdisplay --- Volume group --- VG Name rootvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 39.78 GB PE Size 32.00 MB Total PE 1273 Alloc PE / Size 1273 / 39.78 GB Free PE / Size 0 / 0 VG UUID 5w8wuy-D2qj-8uft-pIgr-hvw8-CVek-dihsvg [root@oraclebox ~]# pvresize /dev/sda2 Physical volume "/dev/sda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized [root@oraclebox ~]# vgdisplay --- Volume group --- VG Name rootvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 59.78 GB PE Size 32.00 MB Total PE 1913 Alloc PE / Size 1273 / 39.78 GB Free PE / Size 640 / 20.00 GB VG UUID 5w8wuy-D2qj-8uft-pIgr-hvw8-CVek-dihsvg
Note the Free space listing with the second vgdisplay command.
Resize the Logical Volume
Now we can resize the logical volume:
[root@oraclebox ~]# lvextend -L +20G /dev/rootvg/rootlv Extending logical volume rootlv to 55.78 GB Logical volume rootlv successfully resized [root@oraclebox ~]# lvdisplay --- Logical volume --- LV Name /dev/rootvg/rootlv VG Name rootvg LV UUID PVQTit-R8ZW-OPZW-HAWK-4OLo-OVly-zMQVsG LV Write Access read/write LV Status available # open 1 LV Size 55.78 GB Current LE 1785 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
Note that you can use the following resize options as well:
- -l : to resize with extents instead of with sizes
- -l +50%FREE : to resize with the half of the free space
- -l +100%ORIGIN : to double the size of the lv
Resize the Filesystem
Now the final step, resizing the filesystem:
[root@oraclebox ~]# df -Pm Filesystem 1048576-blocks Used Available Capacity Mounted on /dev/mapper/rootvg-rootlv 35492 33341 320 100% / /dev/sda1 190 13 168 7% /boot tmpfs 1975 0 1975 0% /dev/shm [root@oraclebox ~]# resize2fs /dev/rootvg/rootlv resize2fs 1.39 (29-May-2006) Filesystem at /dev/rootvg/rootlv is mounted on /; on-line resizing required Performing an on-line resize of /dev/rootvg/rootlv to 14622720 (4k) blocks. The filesystem on /dev/rootvg/rootlv is now 14622720 blocks long. [root@oraclebox ~]# df -Pm Filesystem 1048576-blocks Used Available Capacity Mounted on /dev/mapper/rootvg-rootlv 55332 33344 19137 64% / /dev/sda1 190 13 168 7% /boot tmpfs 1975 0 1975 0% /dev/shm
Resize the Logical Volume and the Filesystem in One Command
This works with reducing the logical volume as well as extending it.
Note: with reducing the filesystem it will be unmounted for a short time!
To extend the logical volume and the filesystem in one command add the “-r” option to the lvextend or lvreduce command:
lvextend -r -L +1GB /dev/mapper/rootvg-rootlv lvreduce -r -L -1GB /dev/mapper/rootvg-rootlv
More Information
Note that the naming for the logical volume can be done in two ways:
/dev/mapper/rootvg-rootlv /dev/rootvg/rootlv
If you would do an “ls -l” on both devices you'd see they point to the same device.
More Commands
If you want to view some LVM information very quickly use these commands:
- vgs rootvg
- lvs rootvg
- pvs | grep rootvg
Create a New LVM based Filesystem
This is the short way to create a filesystem on a disk using LVM:
fdisk -cu /dev/sda - use fdisk to create a LVM (type 8e) partition on /dev/sda3 xpart -a /dev/sda vgcreate vg0 /dev/sda3 lvcreate -n data -L 1GB vg0 mkfs.ext4 /dev/vg0/data mkdir /data vim /etc/fstab - Add the following line to /etc/fstab /dev/mapper/rootvg-rootlv / ext4 defaults 1 2 mount -a
Add Second Disk to Volume Group
If you added a second disk to the system to extend the volume group with, you could issue this command:
fdisk -cu /dev/sdc - use fdisk to create a LVM (type 8e) partition on /dev/sdc1 xpart -a /dev/sdc vgextend vg0 /dev/sdc1