LVM under Linux

LVM er en 'volume manager' til Linux. Volume Management gør det muligt at samle alt ens diskplads i en stor pool og dele det op i filsystemer uden at skulle overveje hvilke størelser ens harddiske har. LVM bliver i kerne 2.6 erstattet af LVM2 (aka. device-mapper) og det meste af dette foredrag bliver dermed forældet

Disse slides er lidt en sammenskrivning af to foredrag holdt for sslug henholdsvis 10. juli 2001 i Symbion og 12. december 2001 i Malmö


Problemet med partitionering

På en BoF tidligere på året diskuterede vi partitionering. En af antagelserne var nærmest at man kun havde en disk. Dette er ikke altid opfyldt, men hvad gør man hvis størelsen på ens diske ikke passer fornuftigt efter hvordan man vil partitionerer?

Vi ville altså gerne være istand til at partitionere på tværs af diskene.

Dette foredrag handler ikke om fornuftig partitionering. Uanset hvordan man gør så har man ovenstående problem. Jeg har løsningen.


Løsningen: LVM

Løsningen er Logical Volume Managment (LVM). Linux har med 2.4-kernen fået understøttelse for LVM, mens det har været kendt på andre unixer længere.

LVM virker ved at skyde et abstraktionslag ind mellem de fysiske diske og de enheder man lægger ens filsystemer på. Dermed kan man opfatte alle ens diske som en stor enhed.

Så kan vi glemme alle de normale problemer med partitionering, når vi skal dele disken op.


Andre fordele ved LVM

Der er et par yderligere fordele ved LVM

Nævnte jeg at man kan ændre størelsen på sine filsystemer?


Hvordan virker LVM


En illustration

 +-----------+   +-----------+   +-----------+   +-----------+
 | /dev/sda1 |   | /dev/sdb1 |   | /dev/hda1 |   | /dev/hdc1 |
 +-----+-----+   +-----+-----+   +-----+-----+   +-----+-----+
       |               |               |               |
    +--+---------------+--+         +--+---------------+--+
    |    Volume Group 1   |         |    Volume Group 2   |
    +--+---------------+--+         +----------+----------+
       |               |                       |
 +-----+-----+   +-----+-----+           +-----+-----+
 |    LV1    |   |    LV2    |           |    LV3    |
 +-----+-----+   +-----+-----+           +-----+-----+
       |               |                       |
 +-----+-----+   +-----+-----+           +-----+-----+
 | /var/www  |   |   /home   |           |     /     |
 +-----------+   +-----------+           +-----------+


Terminologi og kommandoer

Physical Volume
En fysisk enhed, det vil sige en harddisk, partition eller ligende (pv*)
Logical Volume
En virtuel enhed, der kan lægges et filsystem på (lv*)
Volume Group
En række fysiske enheder, hvor pladsen lægges i samme bunke (vg*)
Physical Extent
En diskblok når den hører til en fysisk enhed
Logical Extent
En diskblok når den høre til en virtuel enhed

(så er der en række generelle komandoer, der begynder med lvm)


Installation af LVM

SuSE
Understøtter LVM under installation
Red Hat
Har pakker med user-space værktøjer og standardkernen understøtter LVM med moduler
Mandrake
Har pakker med user-space værktøjer og standardkernen understøtter LVM med moduler
Debian
Der er i hvert fald pakker med user-space værktøjer
Andre...
LVM er inkluderet i nyere kerner (2.4.X) (make menuconfig -> Multi Device-support -> LVM).
User-space værktøjer findes på http://www.sistina.com/products_lvm_download.htm

Installation på andet end Suse

Hvad gør man hvis ens yndlingsdistribution ikke understøtter LVM under installation?

  1. Lav en lille partition og installer en minimal linux her.
  2. Installer LVM på resten af disken/diskene
  3. Opret passende logiske volumer
  4. Flyt data over på de logiske volumer (og rod i /etc/fstab)
  5. Genstart (lav et passende initrd, hvis du lægger din rod-partition under lvm)
  6. Installer LVM på installations-partitionen/disken og tilføj den til din Volume Group

Noget langhåret, men det er muligt.


LVM i brug (Oprette en VG)

Initialisering af en diskpartition: Giv den partitionstype 0x8e og udfør:

# pvcreate /dev/sda1

Lav en volume group: Opret den og aktiver den.

# vgcreate VG1 /dev/sda1 /dev/sdb1
# vgchange -a y VG1

LVM i brug (Oprette en LV)

Lav en logical volume (40GB):

# lvcreate -L40G -nLV1 VG1
# mke2fs /dev/VG1/LV1
# mount -t ext2 /dev/VG1/LV1 /mnt

Forøg størelsen på et filsystem:

# umount /mnt
# lvextend -L+20G /dev/VG1/LV1
# ext2resize /dev/VG1/LV1
# mount /mnt

Lignende kan gøres med ReiserFS med resize_reiserfs i stedet for ext2resize


Andre ligende projekter

The Vinum Volume Manager
Logical Volumes for FreeBSD. Kan stort set det samme som Linux' LVM, men implementerer også de forskellige typer RAID.
Findes på http://www.vinumvm.org/
Enterprise Volume Management System
IBM's open source-projekt, der løser de samme problemer. Bygger med en plug- in arkitektur på mange af lagene i en volume manager, hvilket gør det meget mere fleksibelt og med mange flere muligheder. Formodentligt gør det det også tunger e at lege med.
Findes på http: //www-124.ibm.com/developerworks/opensource/evms/

Links

http://www.sistina.com/lvm/
Sistina Software, der står for udviklingen af LVM til Linux.
http://www.sistina.com/lvm/doc/lvm_howto/index.html
En glimrende HOWTO om LVM. Kapitel 10, der beskriver en række normale LVM-opgaver, er uundværligt. Men der også kapitler, der mere dybdegående beskriver mere konkrete situationer.
http://hacking.dk/talks/lvm
Selvreference.


Peter Makholm, peter@makholm.net