An Overview of Logical Volume Management (LVM)
LVM provides a flexible and high level approach to managing disk space. Instead of each disk drive being split into partitions of fixed sizes onto which fixed size file systems are created, LVM provides a way to group together disk space into logical volumes which can be easily resized and moved. In addition LVM allows administrators to carefully control disk space assigned to different groups of users by allocating distinct volume groups or logical volumes to those users. When the space initially allocated to the volume is exhausted the administrator can simply add more space without having to move the user files to a different file system. LVM consists of the following components:
Volume Group (VG)
The Volume Group is the high level container which holds one or more logical volumes and physical volumes.
Physical Volume (PV)
A physical volume represents a storage device such as a disk drive or other storage media.
Logical Volume (LV)
A logical volume is the equivalent to a disk partition and, as with a disk partition, can contain a file system.
Physical Extent (PE)
Each physical volume (PV) is divided into equal size blocks known as physical extents.
Logical Extent (LE)
Each logical volume (LV) is divided into equal size blocks called logical extents.
Let's suppose we are creating a new volume group called VolGroup001. This volume group needs physical disk space in order to function so we allocate three disk partitions /dev/hda1, /dev/hdb1 and /dev/hdb2. These become physical volumes in VolGroup001. We would then create a logical volume called LogVol001 within the volume group made up of the three physical volumes.
If we run out of space in LogVol001 we simply add more disk partitions as physical volumes and assign them to the volume group and logical volume.
Getting Information and Logical Volumes
As an example of using LVM with CentOS we will work through an example of adding space to the / filesystem of a standard CentOS installation. Anticipating the need for flexibility in the sizing of the root partition, CentOS sets up the / file system as a logical volume (called LogVol00) within a volume group named VolGroup00. Before making any changes to the LVM setup it is important to gather information.
Running the mount command on CentOS system will typically show output similar to the following:
# mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hda1 on /boot type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) nfsd on /proc/fs/nfsd type nfsd (rw) /dev/hdc on /media/UDF Volume type udf (ro,noexec,nosuid,nodev,uid=500)
Information about the volume group can be obtained using the /usr/sbin/vgdisplay command:
# vgdisplay --- Volume group --- VG Name VolGroup00 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 31.88 GB PE Size 32.00 MB Total PE 1020 Alloc PE / Size 1020 / 31.88 GB Free PE / Size 0 / 0 VG UUID UVjLQQ-jDDm-2lmM-lrEb-zylo-MUoZ-cwwa1Q
As we can see the in the above example, VolGroup00 has a physical extend size of 32MB and has a total of 31.88GB available for allocation to logical volumes. Currently 1020 physical extents are allocated. If we want to increase the space allocated to any logical volumes in VolGroup00 we will need to add one or more physical volumes.
The same information can be viewed graphically using the Logical Volume Manager tool, accessed by selecting the System -> Administration -> Logical Volume Management menu option. This tool is not installed by default on CentOS, so if the menu option is not available the tool may installed from a terminal window by entering the following commands:
su – yum install system-config-lvm
Once installed and running, the tool will appear as follows:
Information about logical volumes in a volume group may similarly be obtained using the lvdisplay command:
# lvdisplay --- Logical volume --- LV Name /dev/VolGroup00/LogVol00 VG Name VolGroup00 LV UUID 6n1NTq-mWXK-8SW5-HG4e-ZpLw-FrVu-odybKg LV Write Access read/write LV Status available # open 1 LV Size 29.84 GB Current LE 955 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Name /dev/VolGroup00/LogVol01 VG Name VolGroup00 LV UUID Iol7v0-o70d-7qTU-AOjS-PE3u-gQP4-3L3Exj LV Write Access read/write LV Status available # open 1 LV Size 2.03 GB Current LE 65 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1
As shown in the above example 29.84GB of the space in volume group VolGroup00 is allocated to logical volume LogVol00 (for the / file system) and 2.03GB to LogVol01 (for swap space).
Now that we know what space is being used it is often helpful to understand which devices are providing the space (in other words which devices are being used as physical volumes). To obtain this information we need to run the pvdisplay command:
# pvdisplay --- Physical volume --- PV Name /dev/hda2 VG Name VolGroup00 PV Size 31.90 GB / not usable 23.41 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 1020 Free PE 0 Allocated PE 1020 PV UUID fehNpZ-nqDe-jrBO-aZwX-ZLJ8-h7IF-tEE6aR
Clearly the space controlled by logical volume VolGroup00 is provided via a physical volume located on /dev/hda2. Selecting the Physical View from the graphical tool results in the following representation of the same information:
Now that we know a little more about our LVM configuration we can embark on the process of adding space to the volume group and the logical volume contained within.
Adding Additional Space to a CentOS Volume Group from the Command Line
Just as with the previous steps to gather information about the current Logical Volume Management configuration of a CentOS system, changing this configuration can be performed both from the command line and from within the graphical volume management tool. In this section we will focus on the use of command line tools since this gives a better understanding of the underlying changes that are being made, and avoids reliance on graphical tools that may not always be available.
In the remainder of this chapter we will assume that a new disk has been added to the system and that it is being seen by the operating system as /dev/hdb. We shall also assume that this is a new disk that does not contain any existing partitions. If existing partitions are present they should be backed up and then the partitions deleted from the disk using the fdisk utility. The first step is to convert this disk into a physical volume. This is achieved using the pvcreate command:
# pvcreate /dev/hdb Physical volume "/dev/hdb" successfully created
With the physical volume created we now need to add it to the volume group (in this case VolGroup00) using the vgextend command:
# vgextend VolGroup00 /dev/hdb Volume group "VolGroup00" successfully extended
The new physical volume has now been added to the volume group and is ready to be allocated to a logical volume. To do this we run the lvextend tool providing the size by which we wish to extend the volume. In this case we want to extend the size of LogVol00 by 25GB. Note that we need to provide the path to the logical volume which can be obtained from the lvdisplay command (in this case /dev/VolGroup00/LogVol00):
# lvextend -L+25G /dev/VolGroup00/LogVol00 Extending logical volume LogVol00 to 54.84 GB Logical volume LogVol00 successfully resized
The last step in the process is to resize the file system residing on the logical volume so that it uses the additional space. Since we are assuming a default CentOS installation here this can be achieved using the resize2fs command:
# resize2fs /dev/VolGroup00/LogVol00 resize2fs 1.39 (29-May-2006) Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required Performing an on-line resize of /dev/VolGroup00/LogVol00 to 14376960 (4k) blocks. The filesystem on /dev/VolGroup00/LogVol00 is now 14376960 blocks long.
Once the resize completes the file system will have been extended to use the additional space provided by the new disk drive. All this has been achieved without moving a single file. As far as any users on the system are concerned nothing has changed (except that there is now more disk space). The new space can be verified using the df command. For example:
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 54G 2.7G 48G 6% / /dev/hda1 99M 12M 82M 13% /boot tmpfs 513M 0 513M 0% /dev/shm /dev/hdc 3.1G 3.1G 0 100% /media/UDF Volume
As we can see from the above output, our 29.84GB root (/) partition is now 54GB in size as a result of adding 25GB of disk space from a new disk drive to the logical volume.