LVM – Logical Volume Management

By | 2 juli 2012

Logical Volume Management

Algemeen

Met Logical Volume Management (lvm) kan flexiber omgegaan worden met de vraag naar opslagruimte. Je zit niet meer vast aan eenmaal bedachte grootes van partities maar er kan geschoven worden met de beschikbare ruimte. Er zijn grofweg drie lagen te onderscheiden:

  1. De fysieke harddisk
  2. Een of meerdere volume groepen (vg’s)
  3. Een of meerdere logical volumes (lv’s)

Kort samengevat: Op een fysieke harddisk worden een of meerdere vg’s aangemaakt. In een vg worden de lv’s aangemaakt. De opslagruimte die een vg biedt kan uitgebreid worden door bijv. een extra disk aan toe te voegen. De totaal beschikbare ruimte in een vg kan flexibel aan de lv’s worden verdeeld.

In praktijk kan op een 100GB harddisk in eerste instantie 50GB gebruikt worden en wordt 50GB vrij gelaten om later toe te wijzen. Mocht in praktijk blijken dat bijvoorbeeld het mountpoint /opt meer ruimte nodig heeft dan voorzien terwijl de ruimte aan /home niet of nauwelijks gebruikt wordt dan kan de toegewezen ruimte aan /home worden verkleind met lvreduce en met lvextend kan de vrijgekomen ruimte aan /opt worden toegevoegd. Dit dynamisch omgaan met beschikbare diskruimte is dan ook aan te raden.

lvcreate : Aanmaken van een nieuw logical volume

Om een logical volume (lv) aan te maken moet eerst het lv zelf aangemaakt worden in een bestaande volume group (vg). Daarna moet het aangemaakte lv worden voorzien van een filesyteem en kan hierna worden gemount.

In dit voorbeeld wordt een logical volume lv_imap aangemaakt van 500MB in de volume group vg_data en het nieuwe lv wordt voorzien van de ext4 filesysteem:

   lvcreate -n lv_imap --size 500M vg_data
   mkfs.ext4 /dev/vg_data/lv_imap

Nu kan als er een mountpoint is aangemaakt met mount /dev/vg_data/lv_imap /mnt/imap of iets dergelijks de nieuwe lv worden gemount. Er zou ook een soortgelijke regel in /etc/fstab opgenomen kunnen worden. Echter is het beter om de UUID te gebruiken in plaats van de devicenaam. Het UUID is onveranderlijk en kan worden opgevraagd met:

  blkid /dev/vg_data/lv_imap
  /dev/vg_data/lv_imap: UUID="3c6980c7-b12d-43e6-b536-00d32194c4da" TYPE="ext4"

Dit UUID kan dan worden gebruikt in de fstab:

  UUID=3c6980c7-b12d-43e6-b536-00d32194c4da   /mnt/imap   ext4  defaults  1 2

Let op In /etc/ftab wordt het gevonden UUID gebruikt z_o_n_d_e_r de aanhalingstekens. Dit is zelfs een (instinker) vraagje op diverse linux examens! Dit is verwarrend omdat blkid een keurige bruikbare regel lijkt op te leveren maar met aanhalingstekens die dus niet in de fstab gebruikt kan worden.

lvextend : Vergroten van een bestaand logical volume

Als er nog ruimte is in de volume groep kan dat op de volgende manier: Eerst wordt het volume en daarna wordt het filesysteem op het volume vergroot. In dit voorbeeld wordt het logical volume lv_var vergroot met 1GB:

  lvextend -L +1G dev/vg_mx1/lv_var
  resize2fs /dev/vg_mx1/lv_var

Als de server onder VMWare draait en binnen VMware al wel de disk is uitgebreid dient de scsi bus gescand te worden zodat het OS de wijziging ziet:

for dev in /sys/block/*/device/rescan; do   echo 1 > $dev; done

Als dit gebeurd is kan met fdisk -l gekeken worden of deze extra ruimte ook getoond wordt. Normaliter is dit het geval.
Afhankelijk van hoe LVM geconfigureerd is zijn er twee scenario’s mogelijk. Als de LVM’s als partities zijn aangemaakt moet eerst een nieuwe partitie worden aangemaakt met label 8e (Linux LVM) en kan deze nieuwe partitie met pvcreate en vgextend worden aangemaakt. Zodra dit gebeurd is kan met lvextend de extra ruimte worden toegewezen. In dit voorbeeld wordt van /dev/sdc gebruik gemaakt om de volumegroup data met alle nieuwe beschikbare ruimte te vergroten:

pvcreate /dev/sdc2
pvextend vg_data /dev/sdc2
lvextend -l +100%FREE /dev/vg_data/data

Bij het vergroten van het filesysteem met resize2fs komt de melding Filesystem at /dev/mapper/vg_mx1-lv_var is mounted on /var; on-line resizing required indien het filesysteem, in dit voorbeeld, als /vargemount is. Bij ext4 filesystems kan het vergroten zonder problemen on-the-fly gebeuren.

resize2fs /dev/vg_data/data

volumegroup renamen

Umount het mountpoint van het onderliggende logical volume
Maak het onderliggende logical volume of volumes inactief: lvchange -an
Hernoem de volumegroup met vgrename
Maak het onderliggende logical volume of volumes weer actief met: lvchange -ay