LVM – Setup and configure Physical Volumes in RHEL 6/Centos 6 – Part 1

Welcome to Part 1 of this series of 4 articles detailing how to setup and configure multiple filesystems running on LVM partitions. Each article will cover a specific topic, per the below:

Part 1 – Setup and configure Physical Volumes
Part 2 – Setup and configure Volume Groups
Part 3 – Setup and configure Logical Volumes
Part 4 – Setup and configure Filesystems

In Part 1 I will cover how to setup and setup Physical Volumes on three empty disks that have been attached to my test server, which is a VMware VM running Centos 6.6.

Without further ado, let’s proceed. So the first thing to do is ensure LVM is actually installed on your system – my minimal install of Centos 6 had LVM pre-installed however we must still check in order to ensure we can perform all the necessary tasks to complete our goal.

To ensure lvm installed on your server, run the following command:

rpm -qa |grep -i lvm

Running this on my system confirmed that LVM already installed and is version 2:

[root@lnx-svr-01 ~]# rpm -qa |grep -i lvm
lvm2-libs-2.02.111-2.el6.x86_64
lvm2-2.02.111-2.el6.x86_64
[root@lnx-svr-01 ~]#

If it isn’t installed run the following command and enter Yes to any prompts:

[root@lnx-svr-01 ~]#  yum install lvm2*

Next thing to check is our current disk/partition layout by running fdisk -l:

[root@lnx-svr-01 ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x00099a71

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        2611    20458496   8e  Linux LVM

Disk /dev/sdb: 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: 0x00000000

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: 0x00000000

Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0x00000000

Disk /dev/mapper/VolGroup-lv_root: 18.8 GB, 18798870528 bytes
255 heads, 63 sectors/track, 2285 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: 0x00000000

Disk /dev/mapper/VolGroup-lv_swap: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 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: 0x00000000

[root@lnx-svr-01 ~]#

We have 4 disks attached to this server, which happens to be a VMware VM. The screenshot below shows the disks in question, Hard disk 1 – Hard disk 4:

20150611165654

The four disks are /dev/sda, /dev/sdb, /dev/sdc and /dev/sdd. There are no partitions yet on /dev/sdb/dev/sdd, these disks are empty. You can see that /dev/sda2 has an LVM partition already as the Id is 8e, which denotes an LVM partition. The System heading confirms that it is indeed Linux LVM.

We will now create the partitions /dev/sdb1, /dev/sdc1 and /dev/sdd1. I will start the process by partitioning /dev/sdb:

[root@lnx-svr-01 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x2ac771b0.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

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): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

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

Command (m for help): t
Selected partition 1
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 1 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@lnx-svr-01 ~]#

Perform the same step for hard disks /dev/sdc – /dev/sdd:

fdisk /dev/sdc
fdisk /dev/sdd

Once you partitioned all the disks run fdisk -l again to see the new partition layout:

[root@lnx-svr-01 ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x00099a71

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        2611    20458496   8e  Linux LVM

Disk /dev/sdb: 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: 0x2ac771b0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         652     5237158+  8e  Linux LVM

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: 0x8b19e7ca

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         652     5237158+  8e  Linux LVM

Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0xfd839be4

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1305    10482381   8e  Linux LVM

Disk /dev/mapper/VolGroup-lv_root: 18.8 GB, 18798870528 bytes
255 heads, 63 sectors/track, 2285 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: 0x00000000

Disk /dev/mapper/VolGroup-lv_swap: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 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: 0x00000000

[root@lnx-svr-01 ~]#

As you can see from the output /dev/sdb1, /dev/sdc1 and /dev/sdd1 represent the newly created partitions on each disk (1 = first partition). They are all identified as 8e Linux LVM partitions.

Next, we are going to setup the physical volumes on our newly created partitions by running the pvcreate command:

pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1

Results from pvcreate:

[root@lnx-svr-01 ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdd1" successfully created
[root@lnx-svr-01 ~]#

Please note that pvremove deletes the physical volumes, run it for the purposes of learning:

[root@lnx-svr-01 ~]# pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1
  Labels on physical volume "/dev/sdb1" successfully wiped
  Labels on physical volume "/dev/sdc1" successfully wiped
  Labels on physical volume "/dev/sdd1" successfully wiped
[root@lnx-svr-01 ~]#

Then re-run pvcreate to re-create the physical volumes:

[root@lnx-svr-01 ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdd1" successfully created
[root@lnx-svr-01 ~]#

Now run pvdisplay to display all the physical volumes:

[root@lnx-svr-01 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup
  PV Size               19.51 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4994
  Free PE               0
  Allocated PE          4994
  PV UUID               tx5fGZ-LURm-Bqgq-Jxqz-AuJD-IWgl-YMxPle

  "/dev/sdb1" is a new physical volume of "4.99 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               4.99 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               OpA0C8-wv7K-0cZT-3zHW-GXeb-YLM8-hWbRjL

  "/dev/sdc1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               VC7As8-pB3U-GGqa-l0xg-NIVj-jv7l-dTGGHl

  "/dev/sdd1" is a new physical volume of "4.99 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name
  PV Size               4.99 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               xKOs8i-UQy1-mpvu-8Hhl-zjF4-FYjb-w4DwSu

[root@lnx-svr-01 ~]#

The output above shows all of the physical volumes on this system.

This is then end of Part 1. Please go to Part 2, to setup and configure Volume Groups.

References:
How to Create LVM Partition in RHEL 6 / CentoOS
Linux Basics – LVM (Logical Volume Manager) Tutorial
How to Install LVM on Linux and Disk Operations
A Beginner’s Guide To LVM
How To Create LVM Using vgcreate, lvcreate, and lvextend lvm2 Commands

Set environment variable for a specific user in RHEL 6/CentOS 6 using csh shell

I was asked by one of the SAP Basis engineers in my project team to create an environment variable for a specific user (psoadm). He wanted me to create a variable called SECUDIR and set it to /home/psoadm/sec, per the below:

SECUDIR = /home/psoadm/sec

So the first thing to do was find out the type of shell was being used. To do this I logged into the server as root and then ran:

su - psoadm

This allows me to switch user from root to the psoadm user and assume psoadm’s own home directory and environment variables – it’s the equivalent of psoadm logging into a new session.

To confirm the shell being used run the following:

ps -p $$

As you can see from the output below the shell was csh (C Shell):

 PID  TTY          TIME CMD
 7872 pts/0    00:00:00 csh

Now that we know that our shell is csh the next step is to add the SECUDIR variable to the following files: $HOME/.cshrc and $HOME/.login. The $HOME variable relates to psoadm’s home directory and is the equivalent of ~. So to edit the $HOME/.cshrc file run the following:

nano ~/.cshrc

then scroll to the bottom of the file and add the following:

# Set SECUDIR for psoadm user
setenv SECUDIR /home/psoadm/sec

Hit CTRL + x to exit and you will see the following:

Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?
Y Yes
N No  ^C Cancel

enter Y to save and then it will ask to confirm the file to write these changes to, per the below:

File Name to Write: /home/psoadm/.cshrc

Hit Enter to confirm.

Now follow the exact same steps to update the $HOME/.login file. In order for the SECUDIR variable to be available you, either logout of the current shell and log back in or run the source command against the files, per the below:

source ~/.cshrc
source ~/.login

Now enter echo $SECUDIR at the shell prompt like so:

echo $SECUDIR

And you will now see that the response correctly returns the value of SECUDIR as:

/home/psoadm/sec

If your shell is bash, check the links directly below for advise on how to sent environment variables for the bash shell:

How to permanently export a variable in Linux
How do I set a user environment variable permanently not session?

That’s all folks! I hope this was useful.

References:
C shell
What shell am I using?
Set environment variable in Unix
How to permanently export a variable in Linux
How do I set a user environment variable permanently not session?