Logical Volume Management (LVM) is very powerful device mapper framework that provides logical volume management for Linux systems.
In this post I'll just present you the minimal commands that are required to make use of the storage that is added to OS. In my last post, I've written about how to add storage to guest OS running on a VirtualBox. It can be compared to the storage addition done at OS level in companies. Once the storage is provided to the OS (be it a single disk added or a chunk from SAN, etc.,), we will look at how to make the storage available at the Linux OS for usage.
The process will involve the below steps
- Create Linux LVM partition using fdisk
- Create physical volume
- Create Volume group
- Create Logical Volume
- Create file system (ext4 used in this example)
- Mount the FS
- Make the FS mount permanent
Explanation of commands (highlighted lines) used are provided as comment lines prior to the commands in the demo. A few notable result lines are also highlighted.
[root@12r1-rac2 ~]# #check for available File systems
[root@12r1-rac2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 25G 6.0G 18G 26% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
/dev/sda3 9.8G 5.9G 3.4G 64% /u01
/dev/sda2 12G 4.9G 6.3G 44% /u02
Oracle 500G 267G 234G 54% /media/sf_Oracle
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #List disks available, o/p truncated for better viewing
[root@12r1-rac2 ~]# fdisk -l
Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5f998c79
Device Boot Start End Blocks Id System
/dev/sdd1 1 652 5237158+ 83 Linux
...
...
...
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00056a91
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3264 26214400 83 Linux
/dev/sda2 3264 4830 12579840 83 Linux
/dev/sda3 4830 6136 10485760 83 Linux
/dev/sda4 6136 6528 3147776 5 Extended
/dev/sda5 6136 6528 3145728 82 Linux swap / Solaris
Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf306e413
Device Boot Start End Blocks Id System
/dev/sde1 1 652 5237158+ 83 Linux
Disk /dev/sdf: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9e53da19
Device Boot Start End Blocks Id System
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Format the newly added disk.
[root@12r1-rac2 ~]# #I'm creating 2 primary partitions with 15GB each in total of 30GB disk
[root@12r1-rac2 ~]# #Using n,p,1,1,+15G,n,p,2(default),1960(default),3916(default),w as input
[root@12r1-rac2 ~]# #This step can be skipped if you want to partition while initializing using pvcreate
[root@12r1-rac2 /]# fdisk /dev/sdf
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3916, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-3916, default 3916): +15G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1960-3916, default 1960):
Using default value 1960
Last cylinder, +cylinders or +size{K,M,G} (1960-3916, default 3916):
Using default value 3916
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@12r1-rac2 /]#
[root@12r1-rac2 ~]# #List the available disks. Newly created disks are visible, o/p truncated for better viewing
[root@12r1-rac2 ~]# fdisk -l
Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5f998c79
Device Boot Start End Blocks Id System
/dev/sdd1 1 652 5237158+ 83 Linux
Disk /dev/sdc: 5368 MB, 5368709120 bytes
...
...
...
/dev/sda3 4830 6136 10485760 83 Linux
/dev/sda4 6136 6528 3147776 5 Extended
/dev/sda5 6136 6528 3145728 82 Linux swap / Solaris
Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf306e413
Device Boot Start End Blocks Id System
/dev/sde1 1 652 5237158+ 83 Linux
Disk /dev/sdf: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9e53da19
Device Boot Start End Blocks Id System
/dev/sdf1 1 1959 15735636 83 Linux
/dev/sdf2 1960 3916 15719602+ 83 Linux
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Change the partition type of /dev/sdf1, /dev/sdf2 to Linux LVM
[root@12r1-rac2 ~]# #Using t,1,8e,t,2,8e,w as input
[root@12r1-rac2 ~]# fdisk /dev/sdf
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #List the available disks, o/p truncated for better viewing
[root@12r1-rac2 ~]# fdisk -l
Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5f998c79
Device Boot Start End Blocks Id System
/dev/sdd1 1 652 5237158+ 83 Linux
Disk /dev/sdc: 5368 MB, 5368709120 bytes
...
...
...
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf306e413
Device Boot Start End Blocks Id System
/dev/sde1 1 652 5237158+ 83 Linux
Disk /dev/sdf: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9e53da19
Device Boot Start End Blocks Id System
/dev/sdf1 1 1959 15735636 8e Linux LVM
/dev/sdf2 1960 3916 15719602+ 8e Linux LVM
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Currently LVM is not configured in the system and hence no o/p for the below 3 commands
[root@12r1-rac2 ~]# pvs
[root@12r1-rac2 ~]# vgs
[root@12r1-rac2 ~]# lvs
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Create physical volumes using available disks. (also used to format block device if not formatted already)
[root@12r1-rac2 ~]# pvcreate /dev/sdf1 /dev/sdf2
Physical volume "/dev/sdf1" successfully created
Physical volume "/dev/sdf2" successfully created
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #List the physical volumes, you can use 'pvdisplay' command to view detailed information
[root@12r1-rac2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdf1 lvm2 --- 15.01g 15.01g
/dev/sdf2 lvm2 --- 14.99g 14.99g
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Create Volume Group (named vg18c) using the available PVs
[root@12r1-rac2 ~]# vgcreate vg18c /dev/sdf1 /dev/sdf2
Volume group "vg18c" successfully created
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #List available VGs, #PV denotes 2 PVs associated with this VG.
[root@12r1-rac2 ~]# #Use 'vgdisplay' command to view detailed information
[root@12r1-rac2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg18c 2 0 0 wz--n- 29.99g 29.99g
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Create Logical Volume from the available VG
[root@12r1-rac2 ~]# # -L is size and -n is name. Last variable is the VG, the LV will be created from.
[root@12r1-rac2 ~]# lvcreate -L 12G -n 18cgrid vg18c
Logical volume "18cgrid" created.
[root@12r1-rac2 ~]# lvcreate -L 12G -n 18cdb vg18c
Logical volume "18cdb" created.
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #List the LVs. Use 'lvdisplay' to view detailed information
[root@12r1-rac2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
18cdb vg18c -wi-a----- 12.00g
18cgrid vg18c -wi-a----- 12.00g
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Now create File system of type ext4 with the available LV using mkfs command
[root@12r1-rac2 ~]# mkfs -t ext4 /dev/vg18c/18cdb
mke2fs 1.43-WIP (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
786432 inodes, 3145728 blocks
157286 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3221225472
96 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@12r1-rac2 ~]# mkfs -t ext4 /dev/vg18c/18cgrid
mke2fs 1.43-WIP (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
786432 inodes, 3145728 blocks
157286 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3221225472
96 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# mkdir /oradir1 /oradir2
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Mount the FS using mount command
[root@12r1-rac2 ~]# mount /dev/vg18c/18cgrid /oradir1
[root@12r1-rac2 ~]# mount /dev/vg18c/18cdb /oradir2
[root@12r1-rac2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 25G 6.0G 18G 26% /
tmpfs 2.0G 629M 1.4G 32% /dev/shm
/dev/sda3 9.8G 5.9G 3.4G 64% /u01
/dev/sda2 12G 4.9G 6.3G 44% /u02
Oracle 500G 267G 234G 54% /media/sf_Oracle
/dev/mapper/vg18c-18cgrid
12G 30M 12G 1% /oradir1
/dev/mapper/vg18c-18cdb
12G 30M 12G 1% /oradir2
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# #Edit the fstab to make the mount permanent across reboots.
[root@12r1-rac2 ~]# vi /etc/fstab
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Oct 20 01:50:26 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b149969c-329d-48d7-ace0-ea7ac6671964 / ext4 defaults 1 1
UUID=aa9b0bed-4eab-407d-8c0f-c2739a7678fb /u01 ext4 defaults 1 2
UUID=2ab60579-5059-4c1e-9db1-7ac8d9a5ac77 /u02 ext4 defaults 1 2
UUID=6ebf30ec-79d9-4c54-8e44-ce7f47190fdd swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/mapper/vg18c-18cgrid /oradir1 ext4 defaults 0 0
/dev/mapper/vg18c-18cdb /oradir2 ext4 defaults 0 0
[root@12r1-rac2 ~]#
[root@12r1-rac2 ~]#
[root@12r1-rac2 /]# #Make sure to umount the file system. [root@12r1-rac2 /]# umount /dev/mapper/vg18c-18cgrid [root@12r1-rac2 /]# umount /dev/mapper/vg18c-18cdb [root@12r1-rac2 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 25G 5.1G 19G 22% / tmpfs 2.0G 633M 1.4G 32% /dev/shm /dev/sda3 9.8G 5.9G 3.4G 64% /u01 /dev/sda2 12G 4.9G 6.3G 44% /u02 Oracle 500G 268G 233G 54% /media/sf_Oracle [root@12r1-rac2 /]# [root@12r1-rac2 /]# #Remove the logical volume [root@12r1-rac2 /]# lvremove /dev/mapper/vg18c-18cgrid Do you really want to remove active logical volume 18cgrid? [y/n]: y Logical volume "18cgrid" successfully removed [root@12r1-rac2 /]# lvremove /dev/mapper/vg18c-18cdb Do you really want to remove active logical volume 18cdb? [y/n]: y Logical volume "18cdb" successfully removed [root@12r1-rac2 /]# [root@12r1-rac2 /]# [root@12r1-rac2 /]# #Remove the volume group [root@12r1-rac2 /]# vgremove vg18c Volume group "vg18c" successfully removed [root@12r1-rac2 /]# [root@12r1-rac2 /]# [root@12r1-rac2 /]# #Remove the Physical volumes created [root@12r1-rac2 /]# pvremove /dev/sdf1 /dev/sdf2 Labels on physical volume "/dev/sdf1" successfully wiped Labels on physical volume "/dev/sdf2" successfully wiped [root@12r1-rac2 /]# [root@12r1-rac2 /]#

Great post and informative blog. it was awesome to read, thanks for sharing
ReplyDeleteDevOps Training
DevOps Online Training
DevOps Training in Hyderabad
DevOps Project Training
DevOps Training in Ameerpet
DevOps Training Institute in Ameerpet