November 27, 2013

Managing LVM with RHEL 6

Introduction

LVM (Logical Volume Manager) is a flexible way to handle disk space, since you can increase and decrease file systems, that is not possible to the same extent as in MBR (Master Boot Record) partitioning format.

NOTE: "It is generally recommended that you create a single partition that covers the whole disk to label as an LVM physical volume" [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/LVM_components.html#multiple_partitions]

The LVM is build up on three cornerstone.

  1. Physical Volume, PV
  2. Volume Group, VG
  3. Logical Volume, LV

Prerequisite

Create a new partition with type 0x8E Linux LVM.

$ fdisk -cu /dev/sda

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First sector (205826048-488397167, default 205826048): 
Using default value 205826048
Last sector, +sectors or +size{K,M,G} (205826048-488397167, default 488397167): +1G

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): L

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 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: 0x7f3d8c0f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048   205826047   102400000   8e  Linux LVM
/dev/sda3       205826048   207923199     1048576   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 or after you run partprobe(8) or kpartx(8)
Syncing disks.

$ reboot

The Most Imported Commands

$ man 8 lvm
...
pvcreate - Initialize a disk or partition for use by LVM.
pvdisplay - Display attributes of a Physical Volume.
...
vgcreate - Create a Volume Group.
vgdisplay - Display attributes of Volume Groups.
vgextend - Add Physical Volumes to a Volume Group.
vgreduce - Reduce a Volume Group by removing one or more Physical Volumes.
...
lvcreate - Create a Logical Volume in an existing Volume Group.
lvdisplay - Display attributes of a Logical Volume.
lvextend - Extend the size of a Logical Volume.
lvreduce - Reduce the size of a Logical Volume.

Create Physical Volume (PV), Volumme Group (VG) and Logical Volume (LV)

First lets create a new physical volume on the prerequisite partition.

$ pvcreate /dev/sda3 

Create volume group vg_test that span entire physical volume /dev/sda3

$ vgcreate vg_test /dev/sda3 
  Volume group "vg_test" successfully created

Create logical volumne with size 500 MB, named lv_test in volume group vg_test.

$ lvcreate -L 500M -n lv_test vg_test

The lvcreate will now create a device block file in /dev/vgName/lvName that we now can create a filesystem on and mount.

$ mkfs -t ext4 /dev/vg_test/lv_test
$ mkdir /data
$ mount /dev/vg_test/lv_test /data

Extends Logical Volume (LV)

Extend the logical volume lv_test with plus 500 MB.

$ lvextend -L +250M /dev/vg_test/lv_test 
  Rounding size to boundary between physical extents: 252.00 MiB
  Extending logical volume lv_test to 752.00 MiB
  Logical volume lv_test successfully resized

Now you need to grow the file system.

$ resize2fs -p /dev/vg_test/lv_test
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_test/lv_test is mounted on /data; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/vg_test/lv_test to 770048 (1k) blocks.
The filesystem on /dev/vg_test/lv_test is now 770048 blocks long.

Verify/test the new size of /data.

$ df -h /data

Reduce Logical Volume (LV)

When reducing a file system, you need to unmount it first.

$ umount /data

Then reduce the actual filesystem.

$ e2fsck -f /dev/vg_test/lv_test
$ resize2fs -p /dev/vg_test/lv_test 512M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vg_test/lv_test to 524288 (1k) blocks.
Begin pass 3 (max = 94)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/vg_test/lv_test is now 524288 blocks long.

After the actual file system is reduced, we can now shrink the logical volume.

$ lvreduce -L 512M /dev/vg_test/lv_test 
  WARNING: Reducing active logical volume to 512.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_test? [y/n]: y
  Reducing logical volume lv_test to 512.00 MiB
  Logical volume lv_test successfully resized

Finally test/verify, by remounting and check disk space

$ mount /dev/vg_test/lv_test /data
$ df -h /data
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_test-lv_test  496M   11M  461M   3% /data

Extends Volume Group (VG)

First create a new physical volume.

$ pvcreate /dev/sda4
  Physical volume "/dev/sda4" successfully created

Now lets extends existing volume group 'vg_test' with our new physical volume.

$ vgextend vg_test /dev/sda4 
  Volume group "vg_test" successfully extended

And last test/verify.

$ vgdisplay vg_test
  --- Volume group ---
  VG Name               vg_test
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               134.73 GiB
  PE Size               4.00 MiB
  Total PE              34492
  Alloc PE / Size       128 / 512.00 MiB
  Free  PE / Size       34364 / 134.23 GiB
  VG UUID               ItBewY-gWvu-tzUx-JIEj-gJb2-d8Jh-HdANUb

Reduce Volume Group (VG)

Remove existing volume group 'vg_test' with physical volume /dev/sda4.

$ vgreduce vg_test /dev/sda4
  Removed "/dev/sda4" from volume group "vg_test"

Test/verify

$ vgdisplay vg_test
  --- Volume group ---
  VG Name               vg_test
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1020.00 MiB
  PE Size               4.00 MiB
  Total PE              255
  Alloc PE / Size       128 / 512.00 MiB
  Free  PE / Size       127 / 508.00 MiB
  VG UUID               ItBewY-gWvu-tzUx-JIEj-gJb2-d8Jh-HdANUb

Reference

  • lvm(8): lvm - LVM2 tools
  • pvcreate(8): pvcreate - initialize a disk or partition for use by LVM
  • vgcreate(8): vgcreate - create a volume group
  • lvcreate(8): lvcreate - create a logical volume in an existing volume group
  • vgextend(8): vgextend - add physical volumes to a volume group
  • vgreduce(8): vgreduce - reduce a volume group
  • lvextend(8): lvextend - extend the size of a logical volume
  • lvreduce(8): lvreduce - reduce the size of a logical volume
  • resize2fs(8): resize2fs - ext2/ext3/ext4 file system resizer

No comments: