# The LVM2 plug-in

The LVM2 plug-in provides compatibility with the new volume format introduced by the LVM2 tools from Red Hat (previously Sistina). This plug-in is very similar in functionality to the LVM plug-in. The primary difference is the new, improved metadata format. LVM2 is still based on the concept of volume groups (VGs), which are constructed from physical volumes (PVs) and produce logical volumes (LVs).

Just like the LVM plug-in, the LVM2 plug-in represents volume groups as EVMS containers and represents logical volumes as EVMS regions. LVM2 containers combine storage objects (disks, segments, or other regions) to create a pool of freespace. Regions are then created from this freespace, with a variety of mappings to the consumed objects.

## Container operations

### Creating LVM2 containers

Containers are created with an initial set of objects. These objects can be disks, segments, or regions. There are two options available when creating an LVM2 container:

name

  The name of the new container.

extent_size

  The physical-extent (PE) size, which is the granularity with which regions can be created. The default is 32 MB. Unlike the LVM1 plug-in, there is no limitation to the number of extents that can be allocated to an LVM2 region.

### Adding objects to LVM2 containers

You can add objects to existing LVM containers in order to increase the pool of storage that is available for creating regions. Because the name and extent-size are set when the container is created, no options are available when you add new objects to a container. Each object must be large enough to hold at least one physical extent. If an object is not large enough to satisfy this requirement, the LVM2 plug-in will not allow the object to be added to the container.

### Removing objects from LVM2 containers

You can remove a consumed object from its container as long as no regions are mapped to that object. The LVM2 plug-in does not allow objects that are in use to be removed from their container. If an object must be removed, you can delete or shrink regions, or move extents, in order to free the object from use.

No options are available for removing objects from LVM containers.

### Expanding consumed objects in LVM2 containers

In addition to adding new objects to an LVM2 container, you can also expand the space in a container by expanding one of the existing consumed objects (PVs). For example, if a PV is a disk-segment with freespace immediately following it on the disk, you can expand that segment, which will increase the amount of freespace in the container. Likewise, if a PV is a RAID-0 or RAID-5 region, you can expand that region by adding additional objects, which in turn increases the freespace in the container.

When using the GUI or text-mode UIs, PV-expand is performed by expanding the container. If any of the existing PVs are expandable, they will appear in the expand-points list. Choose the PV to expand, and then the options for expanding that object. After the PV has expanded, the container's freespace will reflect the additional space available on that PV.

When using the CLI, PV-expand is performed by expanding the appropriate object directly. The CLI and the EVMS engine will route the necessary commands so the container is expanded at the same time.

The options for expanding a PV are dependent on the plug-in that owns that PV object. Please see the appropriate plug-in's appendix for more details on options for that object.

### Shrinking consumed objects in LVM2 containers

In addition to removing existing objects from an LVM2 container, you can also reduce the size of a container by shrinking one of the existing consumed objects (PVs). This is only allowed if the consumed object has physical extents (PEs) at the end of the object that are not allocated to any LVM2 regions. In this case, LVM2 will allow the object to shrink by the number of unused PEs at the end of that object.

For example, if a PV is a desk-segment, you can shrink that segment, which will decrease the amount of freespace in the container. Likewise, if a PV is a RAID-0 or RAID-5 region, you can shrink that region by removing one of the objects, which in turn decreases the freespace in the container.

When using the GUI or text-mode UIs, PV-shrink is performed by shrinking the container. If any of the existing PVs are shrinkable, they will appear in the shrink-points list. Choose the PV to shrink, and then the options for shrinking that object. After the PV has shrunk, the container's freespace will reflect the reduced space available on that PV.

When using the CLI, PV-shrink is performed by shrinking the appropriate object directly. The CLI and the EVMS engine will route the necessary commands so the container is shrunk at the same time.

The options for shrinking a PV are dependent on the plug-in that owns that PV object. Please see the appropriate plug-in's appendix for more details on options for that object.

### Deleting LVM2 containers

You can delete a container as long as the container does not have any produced regions. The LVM2 plug-in does not allow containers to be deleted if they have any regions. No options are available for deleting LVM2 containers.

### Renaming LVM2 containers

You can rename an existing LVM2 container. When renaming an LVM2 container, all of the regions produced from that container will automatically have their names changed as well, because the region names include the container name. In the EVMS GUI and text-mode UIs, this is done using the `modify properties` command, which is available through the "Actions" menu or the context-sensitive pop-up menus. In the EVMS CLI, this is done using the `set` command.

See for more information about the effects of renaming the regions.

## Region operations

### Creating LVM2 regions

You create LVM2 regions from the freespace in LVM2 containers. If there is at least one extent of freespace in the container, you can create a new region.

The following options are available for creating LVM2 regions:

name

  The name of the new region.

size

  The size of the new region. This size must be a multiple of the container's extent-size. If it isn't, the size will be rounded down as appropriate. By default, all of the available freespace in the container will be used for the new region.

stripes

  If the container consumes two or more objects, and each object has unallocated extents, then the new region can be striped across multiple objects. This is similar to RAID-0 striping and achieves an increased amount of I/O throughput. This option specifies how many objects the new region should be striped across. By default, new regions are not striped, and this value is set to 1.

stripe_size

  The granularity of striping. The default value is 64 KB. Use this option only if the stripes option is greater than 1.

pvs

  A list of names of the objects the new region should map to. By default, this list is empty, which means all available objects will be used to allocate space to the new region.

### Expanding LVM2 regions

You can expand an existing LVM region if there are any unused extents in the container. The following options are available for expanding LVM regions.

size

  The amount of space to add to the region. This is a delta-size, not the new absolute size of the region. As with creating new regions, this size must be a multiple of the container's extent-size, and will be rounded down if necessary.

stripes

  The number of objects to stripe this new portion of the region across. This value can be different than the number of stripes in the existing region. For example, if the region was created originally with three stripes, but now only two objects are available, then the new portion of the region could be striped across just those two objects. The number of stripes for the last mapping in the region will be used as the default.

stripe_size

  The granularity of striping. As with the number of stripes, this value can be different than the stripe-size for the existing region. By default, the stripe-size of the last mapping in the region is used.

pvs

  A list of names of the objects the region should be expanded onto. By default, this list is empty, which means all available objects will be used to allocate additional space for the region.

### Shrinking LVM2 regions

You can shrink an existing LVM region by removing extents from the end of the region. Regions must have at least one extent, so regions cannot be shrunk to zero.

The following options are available when shrinking LVM regions. Because regions are always shrunk by removing space from the end of the region, a list of objects cannot be specified in this command.

size

  The amount of space to remove from the region. This is a delta-size, not the new absolute size of the region. As with creating and expanding regions, this size must be a multiple of the container's extent-size, and will be rounded down if necessary.

### Deleting LVM2 regions

You can delete an existing LVM region as long as it is not currently a compatibility volume, an EVMS volume, or consumed by another EVMS plug-in. No options are available for deleting LVM regions.

### Renaming LVM2 regions

You can rename an existing LVM2 region. In the EVMS GUI and text-mode UIs, this is done using the `modify properties` command, which is available through the "Actions" menu or the context-sensitive pop-up menus. In the EVMS CLI, this is done using the `set` command.

If the renamed LVM2 region has a compatibility volume on it, then the name of that compatibility volume will also change. In order for this to work correctly, that volume must be unmounted before the name is changed. Also, be sure to update your `/etc/fstab` file if the volume is listed, or the volume won't be mounted properly the next time the system boots.

If the renamed LVM2 region has an EVMS volume or another storage object built on it, then the region's name change will be transparent to the upper layers. In this case, the rename can be done while the volume is mounted.