Logical Volume Management

Intro

The Linux Logical Volume Management system provides an excellent way to change the sizes of your disks and manage disk space allocated to various tasks.

I will use the following tasks and the above diagram as a way to document how Logical Volumes work.

  1. Create a new directory on a hard disk, the old way using fstab.
  2. Create a new directory using logical volumes, but no flexibility.
  3. Create a flexible configuration for my home dir
  4. Expand the directory created

Task 1 Create a new directory on a hard disk, the old way using fstab.

This is the example on the bottom of the image above. Make sure that you know the correct device. (Device assignments may change whenever you re-boot.) To make sure,unplug it and run lsblk and blkid (run as root). Now plug in the device and rerun lsblk and blkid. You can compare the before and after to see the device. Create a partition if you want. Use fdisk to partition. Now Make a file system using mkfs.ext4 /dev/sde or /dev/sde1

Label the HD

umount /dev/sde

e2label /dev/sde new_stuff

make sure it has a file system on it

mkfs.ext4 /dev/sde

create the mount point for it

mkdir /home/me/new_stuff

touch /home/me/new_stuff/not_mounted.txt

mount /dev/sde /home/me/new_stuff

ls /home/me/new_stuff

Does the file “not_mounted.txt” show? If so you failed to mount the new disk

If it is gone, you are ok

Add to fstab:

/dev/sde /home/ne/new_stuff ext4 defaults 0 0

Task 2. Create a new directory using logical volumes, but no flexibility.

Make sure you know what dev you are working on. (See above.) Determine size and write it all down.

Create a partition using fdisk if you want.

fdisk /dev/sdd

Make a file system on it

mkfs.ext4 /dev/sdd

Now umount it, use e2label to label it something that you will recognize.

Now you are going to create the logical volume we see n the above image starting with /dev/sdd.

pvcreate /dev/sdd

Check our work

pvscan

Add the physical volume to the volume group

vgcreate vg_new_proj /dev/sdd

Check our work

vgscan

Create Logical Volume

lvcreate -n code_new -L 100% vg_new_proj

Instead of 100% you could specify an exact amount, ie 100G

Check our work

lvdisplay code_new

lvscan

OK? Let’s mount it.

mkdir /home/me/new_prog

touch /home/me/new_proj/not mounted.txt

mount /dev/vg_new_proj/code_new /home/me/new_proj

add to fstab

/dev/vg_new_proj/code_new /home/me/new_proj ext4 defaults 0 0

OK. Let’s do task 3 Create a flexible configuration for my home dir

Modern Linux distributions put /home on a logical volume by default. If you are really trying to expand /home, use task 4 as your template. If you want to create or expand a subdirectory of your personal directory, this is not a perfect example, but you may be able to understand the process from this example.

Partition new disk using fdisk

fdisk /dev/sdb

Make file system on it

mkfs.ext4 /dev/sdb

Label

e2label /dev/sdb “NewHome”

pvcreate

pvcreate /dev/sdb

lgcreate

lgcreate vg_curr_proj /dev/sdb /dev/sdc

lvcreate -n home -L 100 G vg_curr_proj

Ok let’s go to task 4 Expand the directory created

assuming we just created vg home and want to expand it a bit. This gives 100 G additional space.

lvextend -n /dev/vg_curr_proj/home -L 100 G