SHIFT

--- Sjoerd Hooft's InFormation Technology ---

User Tools

Site Tools


Sidebar

Recently Changed Pages:

View All Pages


View All Tags


LinkedIn




WIKI Disclaimer: As with most other things on the Internet, the content on this wiki is not supported. It was contributed by me and is published “as is”. It has worked for me, and might work for you.
Also note that any view or statement expressed anywhere on this site are strictly mine and not the opinions or views of my employer.


Pages with comments

View All Comments

redhatlvm

Red Hat LVM

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.

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:

  1. Resize virtual disk
    1. Reboot to let the OS recognize the added space
  2. Resize the LVM partition
    1. Reboot to start using the new file system table
  3. Resize the Physical Volume
  4. Resize the logical volume
  5. 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 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

Resources

You could leave a comment if you were logged in.
redhatlvm.txt · Last modified: 2021/09/24 00:25 (external edit)