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 /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
lvmdiskscanto 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 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.
lvcreatecommand 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,
--extentsgives 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 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
/devdirectory in the format /dev/vg/lv where vg is volume group name, and lv is logical volume name. In our case it will be -
lvdisplayto 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
mke2fscommand 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.