= 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. \\
{{tag>redhat linux}}
= 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 [[resizeesxvirtualdisk|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 with {{{partx -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