I have got 2 hard disks of 2GB size each -
# fdisk -l 2>/dev/null | grep '/dev/sd[a-b]'
Disk /dev/sda: 2147 MB, 2147483648 bytes
Disk /dev/sdb: 2147 MB, 2147483648 bytes
The following steps will show you how to create logical volumes on these hard disks.
Step 1: Prepare the disks
If you are using entire disks for creating logical volumes, then make sure they are raw disks. ie they should not contain any partitions.
If you are using individual partitions on a disk for LVM, then you 
should open fdisk (or another partitioning tool) and set each partition as type 
"Linux LVM" - 
0x8e, so that they can be recognized by the LVM 
system.Step 2: Initialize the disks to be used as a physical volume
To initialize the disks to be used as a physical volume, you use
pvcreate.# pvcreate /dev/sda
Writing physical volume data to disk "/dev/sda"
Physical volume "/dev/sda" successfully created
# pvcreate /dev/sdb
Writing physical volume data to disk "/dev/sdb"
Physical volume "/dev/sdb" successfully created
Now use
lvmdiskscan to verify that the hard disks have been properly 
initialized.# lvmdiskscan
/dev/sda  [ 2.00 GiB] LVM physical volume
...
/dev/sdb  [ 2.00 GiB] LVM physical volume
...
2 disks
2 LVM physical volume whole disks
0 LVM physical volumes
Step 3: Create the volume group
To create a volume group, you run the
vgcreate as follows.# vgcreate vg_sda /dev/sda
Volume group "vg_sda" successfully created
# vgcreate vg_sdb /dev/sdb
Volume group "vg_sdb" successfully created
This creates a volume group descriptor at the start of each disk.
Step 4: Create the logical volumes
Logical volumes can be classified into 3 types -
- Linear volumes
- Stripped volumes, and
- Mirrored volumes
Logical volumes are similar to partitions in hard disks - only 
better.
Use
lvcreate command to create a logical volume. 
Lets create a single linear logical volume within each of the volume groups that was created.
# lvcreate --extents 100%FREE --name lv_sda vg_sda
Logical volume "lv_sda" created
# lvcreate --extents 100%FREE --name lv_sdb vg_sdb
Logical volume "lv_sdb" created
In the above commands,
--extents gives the number of logical extents to allocate for the 
new logical volume. Here we have specified the number as the percentage of the 
free space in the volume group.lvcreate takes a lot of options. Do check its man 
page to know more.Step 5: Verify your work
Lastly, you should scan all disks for logical volumes and volume groups. For this you use the tools -
vgscan and lvscan respectively.# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg_sdb" using metadata type lvm2
Found volume group "vg_sda" using metadata type lvm2
and scan the logical volumes on all the disks ...
# lvscan
ACTIVE  '/dev/vg_sdb/lv_sdb'  [2.00 GiB] inherit
ACTIVE  '/dev/vg_sda/lv_sda'  [2.00 GiB] inherit
The logical volumes are included in the
/dev directory in the format /dev/vg/lv where vg is volume group name, and lv is logical volume name. In our case it will be - 
/dev/vg_sda/lv_sda and 
/dev/vg_sdb/lv_sdb.Run
lvdisplay to see the 
details of the logical volumes that were created.# lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg_sdb/lv_sdb
  VG Name                vg_sdb
  LV UUID                ytRveJ-ZCsD-gIXd-Uzfl-UOeO-8CYF-xdXb72
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             511
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3
   
  --- Logical volume ---
  LV Name                /dev/vg_sda/lv_sda
  VG Name                vg_sda
  LV UUID                gTG0Sy-TiF9-3bmF-C7U5-FlqJ-TbZG-eYULtf
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             511
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
From here on, you can access the logical volumes the same way you access physical disks. All the commands such as for mounting disks, creating file systems, formatting and so on will work on the logical volumes as well.
What to do next
Before you start using the logical volumes to store your files, you have to do 2 things, namely -
- Format the logical volume, and
- Mount the logical volume in a suitable location.
First lets format the logical volumes
Formating the logical volume involves creating a file system on it. You use the
mke2fs command to create a file 
system.# mkfs.ext4 /dev/vg_sda/lv_sda
and for the second logical volume ...
# mkfs.ext4 /dev/vg_sdb/lv_sdb
Now lets mount the logical volumes in a suitable location.
Mounting the first logical volume at /mnt/volume-a
# mkdir /mnt/volume-a
# mount -t ext4 /dev/vg_sda/lv_sda /mnt/volume-a
and mounting the second logical volume at /mnt/volume-b
# mkdir /mnt/volume-b
# mount -t ext4 /dev/vg_sdb/lv_sdb /mnt/volume-b
If you want to automatically mount the logical volume(s) each time 
you boot into Linux, you will have to enter the appropriate line in the 
/etc/fstab file as well.List of LVM Commands
To recap, following are the LVM commands we have used to create logical volumes in Linux.
pvcreate - 
Initializes physical volume for later use by logical volume manager (LVM). 
lvmdiskscan - Scan for all devices visible to 
LVM.vgcreate - Create a volume 
group.lvcreate - Create a logical volume in an existing 
volume group.vgscan - Scan all disks for volume groups and 
rebuild caches.lvscan - Scan all disks for logical 
volumes.lvdisplay - Display attributes (information) of all 
logical volumes.There are many more LVM commands that accomplish other tasks. However, these set of LVM commands should get you started on creating an LVM in Linux.
 
