LVM
advantages:
Through these different types of
logical-to-physical mappings, LVM can achieve four important advantages over
raw physical partitions:
- Logical volumes can be resized while they are mounted and accessible by the database or file system, removing the downtime associated with adding or deleting storage from a Linux server
- Data from one (potentially faulty or damaged) physical device may be relocated to another device that is newer, faster or more resilient, while the original volume remains online and accessible
- Logical volumes can be constructed by aggregating physical devices to increase performance (via disk striping) or redundancy (via disk mirroring and I/O multipathing)
- Logical volume snapshots can be created to represent the exact state of the volume at a certain point-in-time, allowing accurate backups to proceed simultaneously with regular system operation
Basic LVM commands
Initializing disks or disk partitions
To use LVM, partitions and whole
disks must first be converted into physical volumes (PVs) using the pvcreate command. For example, to convert /dev/hda and /dev/hdb
into PVs use the following commands:
pvcreate /dev/hda
pvcreate /dev/hdb
If a Linux partition is to be
converted make sure that it is given partition type 0x8E using fdisk, then use pvcreate:
pvcreate /dev/hda1
Creating a volume group
Once you have one or more
physical volumes created, you can create a volume group from these PVs using
the vgcreate command. The following command:
vgcreate
volume_group_one /dev/hda /dev/hdb
creates a new VG called volume_group_one with two disks, /dev/hda and /dev/hdb,
and 4 MB PEs. If both /dev/hda and /dev/hdb are 128 GB in size, then the VG volume_group_one will have a total of 2**16 physical
extents that can be allocated to logical volumes.
Additional PVs can be added to
this volume group using the vgextend command. The
following commands convert /dev/hdc into a PV and
then adds that PV to volume_group_one:
pvcreate /dev/hdc
vgextend volume_group_one /dev/hdc
This same PV can be removed from
volume_group_one by the vgreduce
command:
vgreduce volume_group_one /dev/hdc
Note that any logical volumes
using physical extents from PV /dev/hdc will be
removed as well. This raises the issue of how we create an LV within a volume
group in the first place.
Creating a logical volume
We use the lvcreate command to create a new logical volume using
the free physical extents in the VG pool. Continuing our example using VG
volume_group_one (with two PVs /dev/hda and /dev/hdb and a total capacity of 256 GB), we could
allocate nearly all the PEs in the volume group to a single linear LV called logical_volume_one with the following LVM command:
lvcreate -n logical_volume_one --size 255G volume_group_one
Instead of specifying the LV
size in GB we could also specify it in terms of logical extents. First we use vgdisplay to determine the number of PEs in the
volume_group_one:
vgdisplay volume_group_one | grep
"Total PE"
which returns
Total PE 65536
Then the following lvcreate command will create a logical volume with
65536 logical extents and fill the volume group completely:
lvcreate -n logical_volume_one -l 65536 volume_group_one
To create a 1500MB linear LV
named logical_volume_one and its block device
special file /dev/volume_group_one/logical_volume_one
use the following command:
lvcreate -L1500 -n logical_volume_one
volume_group_one
The lvcreate
command uses linear mappings by default.
Striped mappings can also be
created with lvcreate. For example, to
create a 255 GB large logical volume with two stripes and stripe size of 4 KB
the following command can be used:
lvcreate -i2 -I4 --size 255G -n
logical_volume_one_striped volume_group_one
It is possible to allocate a
logical volume from a specific physical volume in the VG by specifying the PV
or PVs at the end of the lvcreate command. If
you want the logical volume to be allocated from a specific physical volume in
the volume group, specify the PV or PVs at the end of the lvcreate command line. For example, this command:
lvcreate -i2 -I4 -L128G -n
logical_volume_one_striped volume_group_one /dev/hda /dev/hdb
creates a striped LV named logical_volume_one that is striped across two PVs (/dev/hda and /dev/hdb)
with stripe size 4 KB and 128 GB in size.
An LV can be removed from a VG
through the lvremove command, but first
the LV must be unmounted:
umount
/dev/volume_group_one/logical_volume_one
lvremove
/dev/volume_group_one/logical_volume_one
Note that LVM volume groups and
underlying logical volumes are included in the device special file directory
tree in the /dev directory with the
following layout:
/dev/<volume_group_name>/<logical_volume_name>
so that if we had two volume
groups myvg1 and myvg2
and each with three logical volumes named lv01,
lv02, lv03, six device
special files would be created:
/dev/myvg1/lv01
/dev/myvg1/lv02
/dev/myvg1/lv03
/dev/myvg2/lv01
/dev/myvg2/lv02
/dev/myvg2/lv03
Extending a logical volume
An LV can be extended by using
the lvextend command. You can specify either an absolute size for the extended
LV or how much additional storage you want to add to the LVM. For example:
lvextend -L120G /dev/myvg/homevol
will extend LV /dev/myvg/homevol to 12 GB, while
lvextend -L+10G /dev/myvg/homevol
will extend LV /dev/myvg/homevol by an additional 10 GB. Once a
logical volume has been extended, the underlying file system can be expanded to
exploit the additional storage now available on the LV. With Red Hat Enterprise
Linux 4, it is possible to expand both the ext3fs and GFS file systems online,
without bringing the system down. (The ext3 file system can be shrunk or
expanded offline using the ext2resize command.)
To resize ext3fs, the following command
ext2online /dev/myvg/homevol
After
using lvextend command the file system also to be resized using below (umount
is not neccessary)
# resize2fs
/dev/myvg/homevol
After
using lvreduce command the file system also to be resized using below (umount
is not neccessary)
#umount the lvm
# lvm vgchange -a y
# e2fsck -f /dev/VolGroup00/LogVol00
# resize2fs -f /dev/VolGroup00/LogVol00 10G
# lvreduce -L10G /dev/VolGroup00/LogVol00
# e2fsck -f /dev/VolGroup00/LogVol00
# resize2fs -f /dev/VolGroup00/LogVol00 10G
# lvreduce -L10G /dev/VolGroup00/LogVol00
(LVM size will be 10G)
No comments:
Post a Comment