Setting up Logical Volumes with LVM: Difference between revisions

From Alpine Linux
(replace /etc/init.d with rc-service)
(fixed formatting and added wikilinks)
 
Line 1: Line 1:
[[Category:Storage]]
This page documents how to create logical volumes in Alpine using lvm2. LVM is collection of programs that allow physical disks to be reassembled into "logical" disks that can be shrunk or expanded as data needs change.
{{Tip|This process can be done automatically by using the [[setup-disk]] script, using the -L option.}}
This document how to create logical volumes in Alpine using lvm2.


LVM is collection of programs that allow physical disks to be reassembled into "logical" disks that can be shrunk or expanded as data needs change.
{{Tip|The process mentioned here can be done automatically by using the [[setup-disk]] script, using the -L option.}}


In this document we will use a [[Setting up a software RAID array|software RAID1 device]] as physical storage for our logical volumes. We will set up a swap partition and a data partition for [[Setting up a basic vserver|vservers ]]
In this document we will use a [[Setting up a software RAID array|software RAID1 device]] as physical storage for our logical volumes. We will set up a swap partition and a data partition for [[#Setting up /vservers partition|vservers ]]


=== Installing LVM software ===
=== Installing LVM software ===
First we need to load the kernel driver, ''dm-mod''
{{Cmd|modprobe dm-mod}}
We also want it to be loaded during next reboot.


{{Cmd|echo dm-mod >> /etc/modules-load.d/dm.conf}}
First we need to load the kernel driver, ''dm-mod'': {{Cmd|modprobe dm-mod}}


We also need the userspace programs.
We also want it to be loaded during next reboot.: {{Cmd|echo dm-mod >> /etc/modules-load.d/dm.conf}}


{{Cmd|apk add lvm2}}
We also need the userspace programs: {{Cmd|apk add lvm2}}


=== Preparing the physical volumes ===
=== Preparing the physical volumes ===
First we need to tell LVM the partition is available as a physical volume and can be added to a volume group. In this example we use a software raid array as physical volume.


{{Cmd|pvcreate /dev/md0}}
First we need to tell LVM the partition is available as a physical volume and can be added to a volume group. In this example we use a software raid array as physical volume. {{Cmd|pvcreate /dev/md0}}


=== Preparing the Volume Group ===
=== Preparing the Volume Group ===
We can then create a volume group and add the physical volume ''/dev/md0''


{{Cmd|vgcreate vg0 /dev/md0}}
We can then create a volume group and add the physical volume ''/dev/md0'' : {{Cmd|vgcreate vg0 /dev/md0}}


If we need more space later, we can add additional physcal volumes with ''vgextend''. All physcal disks/partitions added need to be prepared with ''pvcreate''.
If we need more space later, we can add additional physcal volumes with ''vgextend''. All physcal disks/partitions added need to be prepared with ''pvcreate''.


=== Creating Logical volumes ===
=== Creating Logical volumes ===
In the volume group we can create logical volumes. To create a 1GB volume called ''swap'' and a 6GB volume called 'vservers'' on the volume group ''vg0'' we run
In the volume group we can create logical volumes. To create a 1GB volume called ''swap'' and a 6GB volume called 'vservers'' on the volume group ''vg0'' we run


Line 39: Line 31:


=== Display Logical Volumes ===
=== Display Logical Volumes ===
You can now see the logical volumes with the lvdisplay utility.


You can now see the logical volumes with the lvdisplay utility.
  lvdisplay
  lvdisplay
   --- Logical volume ---
   --- Logical volume ---
Line 75: Line 67:


=== Extend Logical Volumes ===
=== Extend Logical Volumes ===
If you want to add space and the volume has the room for it...
If you want to add space and the volume has the room for it...


Line 84: Line 77:


=== Start LVM during Boot ===
=== Start LVM during Boot ===
We want lvm to init the logical volumes during boot. There is a boot service named ''lvm'' to do this. If your volumes are on raid, make sure that ''/etc/init.d/lvm'' is started after mdadm-raid.
We want lvm to init the logical volumes during boot. There is a boot service named ''lvm'' to do this. If your volumes are on raid, make sure that ''/etc/init.d/lvm'' is started after mdadm-raid.


{{Cmd|rc-update add lvm boot}}
{{Cmd|rc-update add lvm boot}}


on Alpine Linux 1.8 or earlier:
=== Setting up swap ===


{{Cmd|rc_add -s 12 -k lvm}}
=== Setting up swap ===
Now we have our devices in /dev/vg0 and can use them as normal disk paritions. To set up swap:
Now we have our devices in /dev/vg0 and can use them as normal disk paritions. To set up swap:


Line 102: Line 93:


=== Setting up /vservers partition ===
=== Setting up /vservers partition ===
Finally we want to set up an XFS partition for /vservers.
Finally we want to set up an XFS partition for /vservers.


Install xfsprogs.
Install xfsprogs.{{Cmd|apk add xfsprogs}}


{{Cmd|apk add xfsprogs}}
Create filesystem on /dev/vg0/vservers. {{Cmd|mkfs.xfs /dev/vg0/vservers}}
 
Create filesystem on /dev/vg0/vservers.
 
{{Cmd|mkfs.xfs /dev/vg0/vservers}}


Add the mount information to your /etc/fstab: NOTE:tagxid may cause this to not mount. Try this by hand and check dmesg to see if there are any errors:
Add the mount information to your /etc/fstab: NOTE:tagxid may cause this to not mount. Try this by hand and check dmesg to see if there are any errors:
Line 121: Line 109:
=== Starting localmount and swap ===
=== Starting localmount and swap ===


Now we can mount our partition.
Now we can mount our partition.{{Cmd|mount /vservers}}
{{Cmd|mount /vservers}}
 
We need to run ''localmount'' during boot, but it has to happen '''after''' lvm. In Alpine Linux 1.9 and later, this should not be needed: {{Cmd|rc-update add localmount boot}}
We need to run ''localmount'' during boot, but it has to happen '''after''' lvm. In Alpine Linux 1.9 and later, this should not be needed
 
{{Cmd|rc-update add localmount boot}}
 
on Alpine Linux 1.8 or earlier:
 
{{Cmd|rc_add -s 14 -k localmount}}


Start the swap service and make sure it starts during next reboot and that it starts '''after''' lvm.
Start the swap service and make sure it starts during next reboot and that it starts '''after''' lvm.
{{Cmd|rc-service swap start
{{Cmd|rc-service swap start
rc-update add swap}}
rc-update add swap}}


on Alpine Linux 1.8 or earlier:
== See also ==
{{Cmd|rc-service swap start
rc_add -s 14 -k swap}}


=== More Info on LVM ===
* [[Setting up encrypted volumes with LUKS]]
These resources may be helpful:
 
* the [https://tldp.org/HOWTO/LVM-HOWTO/commontask.html common tasks] section in the [https://tldp.org/HOWTO/LVM-HOWTO/index.html LVM Howto]
* [[LVM_on_LUKS| Alpine wiki page for LVM on LUKS]]
* [[LVM_on_LUKS| Alpine wiki page for LVM on LUKS]]
* [https://tldp.org/HOWTO/LVM-HOWTO/commontask.html common tasks] section in the [https://tldp.org/HOWTO/LVM-HOWTO/index.html LVM Howto]
* [https://wiki.archlinux.org/index.php/LVM Arch wiki page on LVM]
* [https://wiki.archlinux.org/index.php/LVM Arch wiki page on LVM]
* [https://wiki.archlinux.org/index.php/Software_RAID_and_LVM Arch wiki page on RAID and LVM]
* [https://wiki.archlinux.org/index.php/Software_RAID_and_LVM Arch wiki page on RAID and LVM]
[[Category:Storage]]

Latest revision as of 13:52, 26 March 2025

This page documents how to create logical volumes in Alpine using lvm2. LVM is collection of programs that allow physical disks to be reassembled into "logical" disks that can be shrunk or expanded as data needs change.

Tip: The process mentioned here can be done automatically by using the setup-disk script, using the -L option.

In this document we will use a software RAID1 device as physical storage for our logical volumes. We will set up a swap partition and a data partition for vservers

Installing LVM software

First we need to load the kernel driver, dm-mod:

modprobe dm-mod

We also want it to be loaded during next reboot.:

echo dm-mod >> /etc/modules-load.d/dm.conf

We also need the userspace programs:

apk add lvm2

Preparing the physical volumes

First we need to tell LVM the partition is available as a physical volume and can be added to a volume group. In this example we use a software raid array as physical volume.

pvcreate /dev/md0

Preparing the Volume Group

We can then create a volume group and add the physical volume /dev/md0 :

vgcreate vg0 /dev/md0

If we need more space later, we can add additional physcal volumes with vgextend. All physcal disks/partitions added need to be prepared with pvcreate.

Creating Logical volumes

In the volume group we can create logical volumes. To create a 1GB volume called swap and a 6GB volume called 'vservers on the volume group vg0 we run

lvcreate -n swap -L 1G vg0 lvcreate -n vservers -L 6G vg0

Display Logical Volumes

You can now see the logical volumes with the lvdisplay utility.

lvdisplay
 --- Logical volume ---
 LV Name                /dev/vg0/swap
 VG Name                vg0
 LV UUID                a4NYOi-FQP6-Lj5Q-0TYk-Jjtk-Qxjt-nxeBPn
 LV Write Access        read/write
 LV Status              available
 # open                 0
 LV Size                1.00 GB
 Current LE             256
 Segments               1
 Allocation             inherit
 Read ahead sectors     0
 Block device           253:0
  
 --- Logical volume ---
 LV Name                /dev/vg0/vservers
 VG Name                vg0
 LV UUID                16VMmy-7I0s-eeoW-tL2V-JrlN-jM6C-d0wEg0
 LV Write Access        read/write
 LV Status              available
 # open                 0
 LV Size                6.00 GB
 Current LE             1536
 Segments               1
 Allocation             inherit
 Read ahead sectors     0
 Block device           253:1

Rename Logical Volumes

lvrename /dev/vg0/vservers /dev/vg0/database

Extend Logical Volumes

If you want to add space and the volume has the room for it...

lvextend -L +50G /dev/vg0/vservers

If you want to set the space to a new larger size...

lvextend -L 10G /dev/vg0/vservers

Start LVM during Boot

We want lvm to init the logical volumes during boot. There is a boot service named lvm to do this. If your volumes are on raid, make sure that /etc/init.d/lvm is started after mdadm-raid.

rc-update add lvm boot

Setting up swap

Now we have our devices in /dev/vg0 and can use them as normal disk paritions. To set up swap:

mkswap /dev/vg0/swap

Add the following line to your /etc/fstab:

/dev/vg0/swap   none            swap     sw    0 0

Setting up /vservers partition

Finally we want to set up an XFS partition for /vservers.

Install xfsprogs.

apk add xfsprogs

Create filesystem on /dev/vg0/vservers.

mkfs.xfs /dev/vg0/vservers

Add the mount information to your /etc/fstab: NOTE:tagxid may cause this to not mount. Try this by hand and check dmesg to see if there are any errors:

/dev/vg0/vservers /vservers     xfs     noatime,tagxid 0 0

Note that the tagxid option is specific for setting up vserver disk limits 🔓 so you might not want it. The noatime option increases performance, but you will no longer know when files were last accessed.

Starting localmount and swap

Now we can mount our partition.

mount /vservers

We need to run localmount during boot, but it has to happen after lvm. In Alpine Linux 1.9 and later, this should not be needed:

rc-update add localmount boot

Start the swap service and make sure it starts during next reboot and that it starts after lvm.

rc-service swap start rc-update add swap

See also