In the beginning, each computer had one hard drive. When space ran out, you would go to the store, buy a bigger drive, transfer all the data over, and swap the drive.
Then, computers began to support multiple drives. Now, you could add a hard drive to the computer, and give it a new drive letter. Then, it would be a new space you could save files to.
As time went on, several issues would crop up. The biggest issue is that you could have one drive run out of space while the other drive had plenty of space. However, because of your folder structure, you wanted to keep saving files to the drive that was out of space. A messy solution would be to add a new folder to the other drive that had plenty of space, and put the files in there, but then when it came to retrieval, you would need to look in two locations. Alternatively, you could offload some folders from one drive to the other to balance the amount of free space on both drives. But, this could be time consuming, and wouldn't it be better if all your drives were simply combined so the computer thought you had just one huge drive to save to? What if, in addition to that, if you wished to add a new drive or remove an existing drive, that all the files could be automatically redistributed to the new set of drives in the system? That's where LVM (logical volume manager) come in.
LVMs are virtual devices that can be composed of a combination of underlying hard drives or SSDs. I have been using this for my server and have been very satisfied with it. Zero issues so far. However, adding drives to this requires a set of instructions that I keep having to look up each time I add a drive, so here they are (for Linux):
Supposing the new device is /dev/sda (found by running fdisk -l), an existing volume group (vg) is vg-1 (found by running vgdisplay), and the logical volume (lv) path for vg-1 is /dev/vg-1/root (found by running lvdisplay):
pvcreate /dev/sda
This creates a physical volume on the new hard drive.
vgextend vg-1 /dev/sda
This extends the volume group to the new hard drive.
lvm lvextend -l +100%FREE /dev/vg-1/root
This expands the volume group to use all the space on the new hard drive.
resize2fs -p /dev/mapper/vg--1-root
This updates the file system to use the new size.
Reference: Adding Disks with LVM