# Expanding and shrinking volumes

This chapter tells how to expand and shrink EVMS volumes with the EVMS GUI, Ncurses, and CLI interfaces. Note that you can also expand and shrink compatibility volumes and EVMS objects.

## Why expand and shrink volumes?

Expanding and shrinking volumes are common volume operations on most systems. For example, it might be necessary to shrink a particular volume to create free space for another volume to expand into or to create a new volume.

EVMS simplifies the process for expanding and shrinking volumes, and protects the integrity of your data, by coordinating expand and shrink operations with the volume's file system. For example, when shrinking a volume, EVMS first shrinks the underlying file system appropriately to protect the data. When expanding a volume, EVMS expands the file system automatically when new space becomes available.

Not all file system interface modules (FSIM) types supported by EVMS allow shrink and expand operations, and some only perform the operations when the file system is mounted ("online"). The following table details the shrink and expand options available for each type of FSIM.

### FSIM support for expand and shrink operations

FSIM type | Shrinks | Expands
--- | --- | ---
JFS | No | Online only
XFS | No | Online only
ReiserFS | Offline only | Offline and online
ext2/3 | Offline only | Offline only
SWAPFS | Offline only | Offline only
OpenGFS | No | Online only
NTFS | Offline only | Offline only

You can perform all of the supported shrink and expand operations with each of the EVMS user interfaces.

## Example: shrink a volume

This section tells how to shrink a compatibility volume by 500 MB.

> ### Shrink a volume

> Shrink the volume `/dev/evms/lvm/Sample Container/Sample Region`, which is the compatibility volume that was created in the chapter entitled "Creating Volumes," by 500 MB.

### Using the EVMS GUI

Follow these steps to shrink the volume with the EVMS GUI:

1. Select Actions ShrinkVolume...

2. Select /dev/evms/lvm/Sample Container/Sample Region from the list of volumes.

3. Click Next.

4. Select /lvm/Sample Container/Sample Region from the list of volumes.

5. Click Next.

6. Enter `500MB` in the "Shrink by Size" field.

7. Click Shrink.

Alternatively, you can perform some of the steps to shrink the volume with the GUI context sensitive menu:

1. From the Volumes tab, right click `/dev/evms/lvm/Sample Container/Sample Region`

2. Click Shrink...

3. Continue the operation beginning with step 3 of the GUI instructions.

### Using Ncurses

Follow these steps to shrink a volume with Ncurses:

1. Select Actions Shrink Volume.

2. Select /dev/evms/lvm/Sample Container/Sample Region from the list of volumes.

3. Activate Next.

4. Select lvm/Sample Container/Sample Region from the shrink point selection list.

5. Activate Next.

6. Scroll down using the down arrow until Shrink by Size is highlighted.

7. Press spacebar.

8. Press Enter.

9. At the "::" prompt enter `500MB`.

10. Press Enter.

11. Activate Shrink.

Alternatively, you can perform some of the steps to shrink the volume with the context sensitive menu:

1. From the Volumes view, press Enter on `/dev/evms/lvm/Sample Container/Sample Region`.

2. Activate the Shrink menu item.

3. Continue the operation beginning with step 3 of the Ncurses instructions.

### Using the CLI

The `shrink` command takes a shrink point followed by an optional name value pair or an optional shrink object. To find the shrink point, use the `query` command with the shrink points filter on the object or volume you plan to shrink. For example:

    query: shrink points, "/dev/evms/lvm/Sample Container/Sample Region"

Use a list options filter on the object of the shrink point to determine the name-value pair to use, as follows:

    query: objects, object="lvm/Sample Container/Sample Region", list options

With the option information that is returned, you can construct the command, as follows:

    shrink: "lvm/Sample Container/Sample Region", remove_size=500MB

## Example: expand a volume

This section tells how to expand a volume a compatibility volume by 500 MB.

> ### Expand a volume

> Expand the volume `/dev/evms/lvm/Sample Container/Sample Region`, which is the compatibility volume that was created in the chapter entitled "Creating Volumes," by 500 MB.

### Using the EVMS GUI

Follow these steps to expand the volume with the EVMS GUI:

1. Select Actions Expand Volume...

2. Select /dev/evms/lvm/Sample Container/Sample Region from the list of volumes.

3. Click Next.

4. Select lvm/Sample Container/Sample Region from the list as the expand point.

5. Click Next.

6. Enter `500MB` in the "Additional Size" field.

7. Click Expand.

Alternatively, you can perform some of the steps to expand the volume with the GUI context sensitive menu:

1. From the Volumes tab, right click `/dev/evms/lvm/Sample Container/Sample Region`.

2. Click Expand...

3. Continue the operation to expand the volume beginning with step 3 of the GUI instructions.

### Using Ncurses

Follow these steps to expand a volume with Ncurses:

1. Select Actions ExpandVolume.

2. Select /dev/evms/lvm/Sample Container/Sample Region from the list of volumes.

3. Activate Next.

4. Select lvm/Sample Container/Sample Region from the list of expand points.

5. Activate Next.

6. Press spacebar on the Additional Size field.

7. At the "::" prompt enter `500MB`.

8. Press Enter.

9. Activate Expand.

Alternatively, you can perform some of the steps to shrink the volume with the context sensitive menu:

1. From the Volumes view, press Enter on /dev/evms/lvm/Sample Container/Sample Region.

2. Activate the Expand menu item.

3. Continue the operation beginning with step 3 of the Ncurses instructions.

### Using the CLI

The `expand` command takes an expand point followed by an optional name value pair and an expandable object. To find the expand point, use the `query` command with the Expand Points filter on the object or volume you plan to expand. For example:

    query: expand points, "/dev/evms/lvm/Sample Container/Sample Region"

Use a list options filter on the object of the expand point to determine the name-value pair to use, as follows:

    query: objects, object="lvm/Sample Container/Sample Region", list options

The free space in your container is the container name plus `/Freespace`.

With the option information that is returned, you can construct the command, as follows:

    expand: "lvm/Sample Container/Sample Region", add_size=500MB,
    "lvm/Sample Container/Freespace"