DietPi Blog

... discover DietPi, Debian and Linux info

Merging disks to a large logical volume in DietPi

Linux offers the option of logical volumes, these are disk arrays which form larger single volumes. A software package for this purpose is called lvm2 and can be used in a DietPi system.
This post shows how to generate a logical volume and use resp. manage it using the lvm2 package.

Orange Pi 5 with two USB disks connected

Table of contents

  1. Introduction
  2. Prerequisites
  3. Creation of the logical volume(s)
  4. Diagnosis and management of the logical volume
  5. References

1. Introduction

1.1 Motivation

In some cases it is necessary to have a large disk space, but only smaller disks are available. In this case a RAID 0 system (“striping”) or a Logical Volume (LV) can be used to form larger logical disks from several physical disks resp. disk partitions.
Additionally, volume groups built from several disks may give a larger performance compared to one single disk due to concurrent accesses to several disks.

The blog post series Using a RAID system with DietPi – part 1ff, it is shown based on the software package mdadm (multi device administration) how to form a RAID system. This software package can also be used to form a RAID 0 system.

In comparison to this, the presented lvm2 based solution gives the following advantages:

  • Ease of use: lvm2 is easier to learn and has less complexity in usage
  • Flexibility of disk arrangement: lvm2 offers more options to combine disk partitions to new logical volumes independent of disk sizes
  • No explicit formatting necessary: An mdadm based RAID systems need an explicit (time consuming) RAID formatting procedure. This is not needed using lvm2
  • Moving a lvm2 based logical volume environment to a different Linux system is much easier compared to moving a RAID based environment

In the following, lvm2 is presented to operate logical volumes in a very flexible way.

1.2 Basics

Logical Volumes combine physical disks/partitions and are structured as follows:

  • Physical Volumes (PV), like disk partitions, are combined to form a Volume Group (VG)
  • A part of a VG or a whole VG form a Logical Volume (LV)
  • Several Volume Groups can be organized from one logical volume manager

1.3 Examples used in this post

The following two examples will be used in the rest of this post to show a very simple option (example 1) and a more complex usage (example 2).

  • Example 1: Two disks form one volume group which forms one single logical volume
  • Example 2: Three partitions of two disks from two volume groups which form three logical volumes

1.3.1 Example 1: Two disks, one volume group, one logical volume

|-----------------------------------------|
|                   LV #1                 | Logical Volume (LV)
|-----------------------------------------|
|                   VG #1                 | Volume Groups (VG)
|-----------------------------------------|
|   /dev/sdb1   |        /dev/sdc1        | Physical Volumes (PV)
|-----------------------------------------|

In this example,

  • VG #1 is built from disks /dev/sdb1 and /dev/sdc1
  • LV #1 is built from the whole VG #1

1.3.2 Example 2: Two disks, three partitions, two volume groups, three logical volumes

|-----------------------------------------|
|       LV #1      |  LV #2 |    LV #3    | Logical Volumes(LV)
|---------------------------|-------------|
|            VG #1          |    VG #2    | Volume Groups(VG)
|---------------------------|-------------|
|  /dev/sdc1  |  /dev/sdd1  |  /dev/sdd2  | Physical Volumes(PV)
|-----------------------------------------|

In this example,

  • VG #1 is built from disks /dev/sdc1 and /dev/sdd1
  • VG #2 is built from disk /dev/sdd2
  • LV #1 is a larger part from VG #1
  • LV #2 is a smaller part from VG #1
  • LV #3 is the whole VG #2

2. Prerequisites

2.1 Installation of package lvm2

As a first step, the software package lvm2 is installed via:

apt install lvm2

2.2 Preparation of the disks

The disks need to be prepared, so that the needed partitions are present.

For the next example steps, a starting point of two disks (/dev/sdb resp. /dev/sdc) with different sizes (1.8 TB resp. 931,5 GB) having no partitions is assumed.

Remark: Disk /dev/sda1 holds the root file system and must remain untouched.

2.2.1 Example 1

In order to come to this state, possibly existing partitions on the disks need to be remove (e.g. via fdisk).
As next, the disk partitions are added using DietPi-Drive_Manager.

Example 1 – DietPi-Drive_Manager starting point

The partitions are added by selecting a disk and executing the Format option:

After generation of the GPT partition table and the ext4 partition, the program asks for a desired mount point. This step has to be cancelled, i.e. the generated partition is not mounted.

Doing this with both disks leads to the following state:

Example 1 – DietPi-Drive_Manager with generated partitions

The lsblk command then shows:

2.2.2 Example 2

In example 2, it is needed to generate the partitions /dev/sdc1, /dev/sdd1 and /dev/sdd2 outside of DietPi-Drive_Manager, because it can only generate a single partition on a disk. The formatting of the partitions can then be done via DietPi-Drive_Manager.

The next steps start with:

3. Creation of the logical volume(s)

In this step, the logical volumes are generated with these steps:

  1. Create physical volumes
  2. Create the volume group(s)
  3. Create the logical volume(s)
  4. Format and mount the created logical volume(s)

These steps are given in the next sections within two different examples.

3.1 Example 1

The physical volumes of the two partitions (/dev/sdb1 resp. /dev/sdc1) are created with the following command:

pvcreate /dev/sdb1 /dev/sdc1

This leads to:

Then the volume group /dev/vg1 is created with the following command:

vgcreate vg1 /dev/sdb1 /dev/sdc1

This leads to:

grafik-28

As next, the logical volume /dev/vg1/lvm1 is created. In example 1 it shall be the whole part of the volume group /dev/vg1:

lvcreate -l 100%FREE -n lvm1 vg1

This leads to:

The result is an entry (/dev/vg1-lvm1) in DietPi-Drive_Manager:

This entry needs to be formatted and mounted.

Important: No formatting of /dev/vg1-lvm1 although DietPi-Drive_Manager signals “format required”!
Instead, mkfs has to be used. Otherwise corrupted data occurs on the disks forming the volume group.

The formatting of the logical volume is done via mkfs:

mkfs.ext4 /dev/vg1/lvm1

The format command leads to vg1-lvm1 in the lsblk output:

Mounting the formatted logical volume (virtual block device /dev/mapper/vg1-lvm1) can then be done via DietPi-Drive_Manager. This e.g. ends up in this state:

As can be seen, the size of /mnt/lvm1-storage is 2.7 TB which fits to the sum of the used 1.8 TB and 0.9 TB disk space (this e.g. could also be monitored via the command df -h).

The mount definition /etc/fstab also shows the newly mounted logical volume group /mnt/lvm1-storage:

#----------------------------------------------------------------
# PHYSICAL DRIVES
#----------------------------------------------------------------
UUID=26457e06-65b3-4a97-9e42-dc728b16e842 / ext4 noatime,lazytime,rw 0 1
UUID=dbe633c5-533d-46c9-a069-41abc215398b /mnt/lvm1-storage ext4 noatime,lazytime,rw,nofail,noauto,x-systemd.automount

At this point, the new generated logical volume /dev/vg1-lvm1 mounted to /mnt/lvm1-storage can be used like any other disk space.

3.2 Example 2

The corresponding commands for example 2 are:

# Create physical volumes
pvcreate /dev/sdc1 /dev/sdd1 /dev/sdd2

# Create volume groups vg1 and vg2
vgcreate vg1 /dev/sdc1 /dev/sdd1
vgcreate vg2 /dev/sdd2

# Create logical volumes lvm1, lvm2 and lvm3
#           lvm1 is 70% of the vg1 space
lvcreate -l 70%VG -n lvm1 vg1
#           lvm2 is 100% of the resulting space (30% of the vg1 space)
lvcreate -l 100%FREE -n lvm2 vg1
#           lvm3 is 100% of the vg2 space
lvcreate -l 100%FREE -n lvm3 vg2

# Format logical volumes
mkfs.ext4 /dev/vg1/lvm1
mkfs.ext4 /dev/vg1/lvm2
mkfs.ext4 /dev/vg2/lvm3

This leads to an environment of:

The result are the logical volumes (virtual block devices)

  • /dev/mapper/vg1-lvm1 of 1.3TB
  • /dev/mapper/vg1-lvm2 of 550GB
  • /dev/mapper/vg2-lvm3 of 963GB

These logical volumes lvm[1-3] can then be mounted via DietPi-Drive_Manager (shown as not mounted in the screenshot):

The lower three entries are the volumes to be mounted.

Remark: lvcreate has futher options, e.g. could the lvm1 size be set by a percentage value of the whole VG space (see lvm1 above), set by a percentage value of the free space (see lvm2, lvm3 above) or set by an absolute size value like e.g. with a size of 1.3 TB:

lvcreate -l 1300G -n lvm1 vg1

4. Diagnosis and management of the logical volume

The diagnosing is shown in the following with the environment of example 1 (two disks, one volume group, one logical volume).

4.1 Diagnosing logical volumes

4.1.1 Diagnosing the physical volumes

Physical volumes can be monitored with these commands:

pvs
pvdisplay
pvscan

The commands e.g. show this information:

4.1.2 Diagnosing the volume groups

Volume groups can be monitored with these commands:

vgs
vgdisplay
vgscan

The commands e.g. show this information:

4.1.3 Diagnosing the logical volumes

Logical volumes can be monitored with these commands:

lvs
lvdisplay
lvscan

The commands e.g. show this information:

4.2 Removing a logical volume, a volume group or a physical volume

Removing a logical volume, a volume group and physical volumes is done in reverse order, like e.g.:

  1. Unmount file system via DietPi_Drive_Manager
  2. Delete logical volume, volume group, physical volume
lvremove /dev/vg1/lvm1
vgremove vg1
pvremove /dev/sdb1

4.3 Moving a logical volume to a different system

Moving a logical volume resp. a volume group to a different system is quite easy, especially much easier than doing this with a RAID environment.
In the following example, a target system with hostname lvm2 is assumed: It contains two disks (/dev/sda and /dev/sdb), therefore having a different disk layout compared to the origin system lvm from example 1:

Origin system lvm from example 1 was started with only /dev/sda
Target system lvm2 starts with /dev/sda and /dev/sdb

As a result, putting the two disk devices /dev/sdb and /dev/sdc from origin host lvm to target host lvm2 gives the two disk devices /dev/sdc and /dev/sdd:

Checking via lvscan, vgscan, pvscan shows that the logical volume is present without any further action:

Only, the final mounting of the logical volume on the target host lvm2 is necessary.

Tataa! That’s it.

4.4 Logical volume procedures which must not be done within DietPi

The following actions must not be executed when using lvm2 within DietPi:

  • Formatting of a virtual block device via DietPi-Drive_Manager (e.g. /dev/mapper/vg1-lvm1)
  • Formatting of a logical volume via DietPi-Drive_Manager (e.g. /dev/vg1-lvm1)

These action may lead to a corrupted logical volumes/volume groups.

4.5 Further interesting commands

The following command list is a list of additional lvm2 commands which can be walked through and which are described in the lvm2 documentation resp. command help (e.g. vgrename --help):

vgrename vg1 new_vg_name
lvrename vg1 lvm1 new_lvm_name
lvextend -L50G /dev/vg1/lvm1           # In combination with resize2fs
lvextend -l +100%FREE /dev/vg1/lvm1    # In combination with resize2fs
lvreduce -L10G /dev/vg1/lvm1           # In combination with resize2fs
vgextend vg1 /dev/sde1
vgreduce vg1 /dev/sde1
pvmove /dev/sdb1 /dev/sdf1

4.6 Combine RAID and Logical Volumes

RAID and Logical Volumes do not exclude each other, they might be combined.

As an example, a subordinated mdadm based RAID 1 system with an overlaying lvm2 based logical volume system is possible:

|-----------------------------------------------| 
|                     LV #1                     | Logical Volume (LV)
|-----------------------------------------------| 
|                     VG #1                     |Volume Groups (VG)
|-----------------------------------------------| 
|       /dev/md0        |       /dev/md1        | RAID 1 system (mdadm)
|-----------------------------------------------| 
| /dev/sdb1 | /dev/sdc1 | /dev/sdd1 | /dev/sde1 | Physical devices
|-----------------------------------------------|

The shows structure is:

  • /dev/sdb1 and /dev/sdc1 form a RAID 1 /dev/md0
  • /dev/sdd1 and /dev/sde1 form a RAID 1 /dev/md1
  • /dev/md0 and /dev/md1 form the Volume Group VG #1
  • The whole VG #1 forms the Logical Volume LV #1

4.7 GUI support

4.7.1 gparted

The tool gparted is installed via

apt install gparted

It has only very little support, it only shows the volume groups on physical disks:

4.7.2 KDE Volume and Partition Manager

KVPM (KDE Volume and Partition Manager) is installed via

apt install partitionmanager

The logical volume support of KVPM is very good, the following screenshots show outputs from the environment of example 2.

Many operations regarding logical volumes can be executed using this tool.

4.7.3 Webmin

Webmin can also be used to manage logical volumes. It comes with dialog support with tabs for handling volume groups, physical volumes and logical volumes, like e.g.:

5. References

Merging disks to a large logical volume in DietPi

2 thoughts on “Merging disks to a large logical volume in DietPi

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top