0% found this document useful (0 votes)
172 views

Logical Volume Manager For Linux

The document describes the Logical Volume Manager (LVM) for Linux. It was created by Heinz Mauelshagen to implement a flexible subsystem for disk storage. LVM allows online allocation and relocation of storage through the use of physical volumes concatenated in volume groups from which logical volumes are allocated for filesystems and more. Commands are provided to manage physical volumes, volume groups, and logical volumes. Examples demonstrate creating and using a volume group with logical volumes.

Uploaded by

Raja Mustafa
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
172 views

Logical Volume Manager For Linux

The document describes the Logical Volume Manager (LVM) for Linux. It was created by Heinz Mauelshagen to implement a flexible subsystem for disk storage. LVM allows online allocation and relocation of storage through the use of physical volumes concatenated in volume groups from which logical volumes are allocated for filesystems and more. Commands are provided to manage physical volumes, volume groups, and logical volumes. Examples demonstrate creating and using a volume group with logical volumes.

Uploaded by

Raja Mustafa
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

LVM

A Logical Volume
Manager for Linux
by
Heinz Mauelshagen
<[email protected]>

Heinz Mauelshagen 05/28/1998

Goals

u Implement a flexible subsystem to


handle disk storage

u Online allocation and relocation of storage

u Online extension and reduction of storage

Heinz Mauelshagen 05/28/1998


Concept1
u add an additional layer
to the I/O subsystem of Linux
u gain a virtual view of physical disks
or partitions
u use physical disks/partitions/
multiple devices as PVs (physical volumes)
u concatenate PVs in storage pools called
VGs (volume groups)
Heinz Mauelshagen 05/28/1998

Concept2
u allocation of VG space to LVs (logical
volumes) in units of PEs (physical extends)
u use LVs like disks/partitions/
multiple devices for filesystems etc.
u extend or reduce VGs and LVs online
u access VGs and LVs through device special
files in /dev/VolumeGroupName/*

Heinz Mauelshagen 05/28/1998


Concept3
u configuration data called VGDA (Volume
Group Descriptor Area) is stored on each
PV of a VG and in work copies on
filesystem
u VGDA holds all attributes of
PV, VG, and LVs
u map between LEs (logical extends) of LVs
and the PEs on the PVs
Heinz Mauelshagen 05/28/1998

Concept4
u handle the attributes and mapping
information in a LVM driver/module
u add calls in
“/usr/src/linux/drivers/block/ll_rw_blk.c”
to call mapping function of the LVM
driver/module
u create a command and a library layer

Heinz Mauelshagen 05/28/1998


Concept5
u export/import VGs to take the PVs to/from
a different system
u support linear and striped (RAID0) LVs

Heinz Mauelshagen 05/28/1998

Storage Architecture
u VG with 2 PVs and 1 LV

VG 2 PVs LV
Heinz Mauelshagen 05/28/1998
PV Commands
u pvchange - changes attributes
u pvcreate - initializes VGDA
u pvdata - outputs VGDA for debugging
u pvdisplay - shows PV attributes
u pvmove - moves PEs between PVs
u pvscan - scans periphery for PVs

Heinz Mauelshagen 05/28/1998

VG Commands1
u vgcfgbackup - creates a VGDA backup
u vgcfgrestore - restores a VGDA to a PV
u vgchange - changes attributes
u vgcreate - create a new VG
u vgdisplay - shows VG attributes
u vgexport - changes to “unknown”
u vgextend - extends by new PV(s)
Heinz Mauelshagen 05/28/1998
VG Commands2
u vgimport - changes to “known”
u vgmknodes - creates device dir/nodes
u vgreduce - reduces by empty PV(s)
u vgremove - removes an empty VG
u vgrename - renames an inactive VG
u vgscan - scans periphery for VG(s)

Heinz Mauelshagen 05/28/1998

LV Commands1
u lvchange - changes attributes
u lvcreate - creates a new LV
u lvdisplay - shows LV attributes
u lvextend - extends LV in size (online!)

Heinz Mauelshagen 05/28/1998


LV Commands2
u lvreduce - reduces LV in size (online!)
u lvremove - removes an inactive LV
u lvrename - renames an inactive LV
u lvscan - scans periphery for LVs

Heinz Mauelshagen 05/28/1998

LVM Commands
u lvmchange - resets LVM (emergency)
u lvmdiskscan - scans periphery for
LVM usable disks
(available in 0.4 alpha)

Heinz Mauelshagen 05/28/1998


Software Metrics
u 300 hours for concept and development
u 24500 total LOC (lines of code) including all
sources, headers, comments, manual pages,
scripts, makefiles, README, ...
u about 21000 LOC sources and headers
u module/driver source+headers 2600 LOC
u 150 library functions in 83 modules
u 28 tools (29 including lvmdiskscan)
Heinz Mauelshagen 05/28/1998

Example1a
Create a VG “test” with 2 PVs (/dev/sd[kl]1)
and 1 LV “tlv” containing an EXT2 filesystem:
# fdisk /dev/sdk # change the partion system id to 0xFE
# fdisk /dev/sdl # “
# pvcreate /dev/sd[kl]1
pvcreate -- physical volume /dev/sdk1 successfully created
pvcreate -- physical volume /dev/sdl1 successfully created
# vgcreate test /dev/sd[kl]1
vgcreate -- INFO: using default physical extend size of 4 MB
vgcreate -- INFO: maximum logical volume size is 63.988 Gigabyte
vgcreate -- doing automatic backup of test
vgcreate -- volume group test successfully created
#
Heinz Mauelshagen 05/28/1998
Example1b
Now we have:
u VGDA on /dev/sd[kl]1
u character device special /dev/test/group
u VG backup in /etc/lvmconf/test.conf
u VG name in /etc/lvmtab
u VGDA work copy in /etc/lvmtab.d/test
u loaded VGDA in driver/module to access “test”

Heinz Mauelshagen 05/28/1998

Example1c
# lvcreate -L 300 -n tlv test
lvcreate -- doing automatic backup of test
lvcreate -- logical volume /dev/test/tlv successfully created
# mke2fs /dev/test/tlv
mke2fs 1.10, 24-Apr-97 for EXT2 FS ....
<SNIP>
Writing superblocks and filesystem accounting information: done
# mount /dev/test/tlv /usr1
....

# umount /dev/test/tlv /usr1


# vgchange -a n

Heinz Mauelshagen 05/28/1998


Example1d
Now we have:
u block device special /dev/test/tlv with capacity 300 MB
u EXT2 filesystem in /dev/test/tlv mounted on /usr1
u updated /etc/lvmtab.d/test
u /etc/lvmtab.d/test.conf renamed to /etc/lvmtab.d/test.conf.old
u new /etc/lvmtab.d/test.conf
u updated VGDA in driver/module to access /dev/test/tlv

Heinz Mauelshagen 05/28/1998

Example2a
Display test´s attributes normal:
# vgdisplay test
--- Volume group ---
VG Name test
VG Write Access read/write
VG Status available/extendable
VG # 1
MAX LV 31
Cur LV 1
Open LV 1
MAX LV Size 63.988 GB
MAX PV 256
Cur PV 2
Act PV 2
VG Size 6.184 GB
PE Size 4 MB
Total PE 1583
Alloc PE / Size 75 / 300 MB
Free PE / Size 1508 / 5.891 GB
Heinz Mauelshagen 05/28/1998
Example2b
Display test´s attributes verbose:
# vgdisplay -v test
<SNIP>
--- Logical volume ---
LV Name /dev/test/tlv
VG NAME test
LV Write Access read/write
LV Status available
LV # 1
# open 1
LV Size 300 MB
Current LE 75
Allocated LE 75
Allocation next free
... to be continued

Heinz Mauelshagen 05/28/1998

Example2c

--- Physical volumes ---


PV Name (#) /dev/sdk1 (1)
PV Status available / allocatable
Total PE / Free PE 1074 / 999
PV Name (#) /dev/sdl1 (2)
PV Status available / allocatable
Total PE / Free PE 509 / 509

Heinz Mauelshagen 05/28/1998


Example3a
Move the LEs of /dev/test/tlv away from
/dev/sdk1 to /dev/sdl1:
# pvmove -f /dev/sdk1 # /dev/sdl1
pvmove -- moving physical extends in active volume group test
pvmove -- doing automatic backup of test
pvmove -- 75 extends of physical volume successfully moved
#

Heinz Mauelshagen 05/28/1998

Example3b
Reduce VG test by PV /dev/sdk1:
# vgreduce test /dev/sdk1
vgreduce -- doing automatic backup of test
vgreduce -- test successfully reduced
#

Heinz Mauelshagen 05/28/1998


The Future
u combine the LVM with online filesystem
resizing
u implement RAID1/5/10/50 in the LVM
u enhance the VGDA for additional attributes
like creation and modification times
u assign UUIDs (Uniform Unique Identifiers)
to VGs and PVs

Heinz Mauelshagen 05/28/1998

Whereto
u get the LVM:
put a “send lvm_LATEST.tar.gz” in the
body of a mail to
<[email protected]>
to get an uuencoded actual release
u ask for the LVM:
<[email protected]>

Heinz Mauelshagen 05/28/1998


Thank you :-)

Heinz Mauelshagen 05/28/1998

You might also like