This commit is contained in:
gferg 2003-05-02 20:48:54 +00:00
parent f249c0e685
commit 352b6f3791
25 changed files with 5573 additions and 0 deletions

View File

@ -0,0 +1,103 @@
<chapter id="accelerator"><title>Accelerator Keys in the GUI</title>
<para>You can avoid using a mouse for navigating the EVMS GUI by
using a series of key strokes, or "accelerator keys," instead.
The following sections tell how to use accelerator keys
in the EVMS Main Window, the Selection Window, and the Configuration Options
Window.
</para>
<sect1 id="mainwindow"><title>Main Window Accelerator Keys</title>
<para>In the Main Window view, use the following keys to navigate:
<variablelist><varlistentry><term>Left and right arrow keys</term><listitem><para>Navigate between the notebook tabs of the different views.</para></listitem></varlistentry>
<varlistentry><term>Down arrow key and <keycap>Spacebar</keycap> key</term><listitem><para>Bring keyboard focus into the view.</para></listitem></varlistentry>
</variablelist></para>
<para>
Once in a view, use the following keys to navigate:
<variablelist><varlistentry><term>up and down arrow keys</term><listitem><para>Allow movement around the window.</para></listitem></varlistentry>
<varlistentry><term>&quot;+&quot; key</term><listitem><para>Opens an object tree.</para></listitem></varlistentry>
<varlistentry><term>&quot;-&quot; key</term><listitem><para>Collapses an object tree.</para></listitem></varlistentry>
<varlistentry><term><keycap>ENTER</keycap> key</term><listitem><para>Brings up the context menu (on a row).</para></listitem></varlistentry>
<varlistentry><term>Arrow keys</term><listitem><para>Navigate a context menu.</para></listitem></varlistentry>
<varlistentry><term><keycap>ENTER</keycap></term><listitem><para>Activates an item.</para></listitem></varlistentry>
<varlistentry><term><keycap>CANCEL</keycap></term><listitem><para>Dismisses the context menu.</para></listitem></varlistentry>
<varlistentry><term><keycap>Tab</keycap></term><listitem><para>Gets you out of the view and moves you back up to the notebook tab.</para></listitem></varlistentry>
</variablelist>
</para>
<para>
To access the action bar menu, press the <keycap>Alt</keycap> key and
then the underlined
accelerator key for the menu choice (for example, "A" for the
<guimenuitem>Actions</guimenuitem>
dropdown menu).
</para>
<para>In a dropdown menu, you can use the up and down arrow keys
to navigate. You could also just type the accelerator key for the menu
item, which is the character with the underscore. For example, to initiate
a command to delete a container, type <keycap>Alt</keycap> + "A" + "D" + "C."</para>
<para>
<keycap>Ctrl-S</keycap> is a shortcut to initiate saving changes.
<keycap>Ctrl-Q</keycap> is a shortcut to initiate quitting the EVMS GUI.
</para>
</sect1>
<sect1 id="selecwindow"><title>Selection Window Accelerator Keys</title>
<para>
A selection window typically contains a selection list, plus four to five
buttons below it. Use the following keys to navigate in the selection window:
<variablelist>
<varlistentry><term><keycap>Tab</keycap> key</term><listitem><para>Navigate (change keyboard focus) between the list and the buttons.</para></listitem></varlistentry>
<varlistentry><term>Up and down arrow keys</term><listitem><para>Navigate within the selection list.</para></listitem></varlistentry>
<varlistentry><term><keycap>Spacebar</keycap> key</term><listitem><para>Select and unselect items in the selection list.</para></listitem></varlistentry>
</variablelist>
To activate a button, press the <keycap>Enter</keycap> key on the button or type the accelerator character (if one exists).</para>
</sect1>
<sect1><title>Configuration Options Window Accelerator Keys</title>
<para>
Use the following keys to navigate in the configuration options window:
<variablelist>
<varlistentry><term><keycap>Tab</keycap> key</term><listitem><para>Cycles focus between fields and buttons.</para></listitem></varlistentry>
<varlistentry><term>Left and right arrow keys</term><listitem><para>Navigates the folder tabs if the window has a widget notebook.</para></listitem></varlistentry>
<varlistentry><term><keycap>Spacebar</keycap> key or the down arrow</term><listitem><para>Switches focus to a different notebook page.</para></listitem></varlistentry>
<varlistentry><term><keycap>Enter</keycap> key or typing accelerator character (if one exists)</term><listitem><para>Activates a button</para></listitem></varlistentry>
</variablelist>
</para>
<para>For widgets, use the following keys to navigate:
<variablelist>
<varlistentry><term><keycap>Tab</keycap> key</term><listitem><para>Cycles forward through a set of widgets.</para></listitem></varlistentry>
<varlistentry><term><keycap>Shift-Tab</keycap> key</term><listitem><para>Cycles backward through a set of widgets.</para></listitem></varlistentry></variablelist>
</para>
<para>
The widget navigation, selection, and activation is the same in all dialog
windows.
</para>
</sect1>
</chapter>

View File

@ -0,0 +1,155 @@
<chapter id="addfeatures"><title>Adding features to an existing volume</title>
<para>This chapter tells how to add additional EVMS features to an
already existing EVMS volume.
</para>
<sect1 id="whyadd"><title>Why add features to a volume?</title>
<para>EVMS lets you add features such as drive linking or bad block relocation to
a volume that already exists. By adding features, you avoid having to potentially
destroy the volume and recreate it from scratch. For example, take the
scenario of a volume that contains important data but is almost full.
If you wanted to add more data to that volume but no free space existed on the
disk immediately after the segment, you could add a drive link to the volume.
The drive link concatenates another object to the end of the volume and
continues seamlessly.
</para>
</sect1>
<sect1 id="exaddfeature"><title>Example: add drive linking to an existing volume</title>
<para> The following example shows how to add drive linking to a volume with
the EVMS GUI, Ncurses, and CLI interfaces.
</para>
<blockquote><example><title>Add drive linking to an existing volume</title>
<para>The following sections show how to add a drive link to volume
<filename>/dev/evms/vol</filename> and call the drive link "DL."
</para>
</example>
<para><note><title>NOTE</title><para>Drive linking can be done only on
EVMS volumes; therefore, <filename>/dev/evms/vol</filename> must be converted to an EVMS volume if it is not
already. </para></note></para>
</blockquote>
<sect2 id="addfeaturegui"><title>Using the EVMS GUI</title>
<para>Follow these steps to add a drive link to the volume with the EVMS GUI:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Add</guimenuitem><guimenuitem>Feature to Volume</guimenuitem></menuchoice>.
</para>
</listitem>
<listitem><para>Select <guimenuitem>/dev/evms/vol</guimenuitem>
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select <guimenuitem>Drive Linking Feature</guimenuitem>.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Type <userinput>DL</userinput> in the Name Field.</para>
</listitem>
<listitem><para>Click <guibutton>Add</guibutton>.</para>
</listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to add a drive link with the GUI
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the <guimenuitem>Volumes</guimenuitem> tab, right click
<filename>/dev/evms/vol</filename>.</para></listitem>
<listitem><para>Click <guimenuitem>Add feature...</guimenuitem></para></listitem>
<listitem><para>Continue adding the drive link beginning with step 3 of the
GUI instructions.</para></listitem>
</orderedlist>
</sect2>
<!-- Ncurses-->
<sect2 id="addfeaturesncurses"><title>Using Ncurses</title>
<para>Follow these steps to add a drive link to a volume with Ncurses:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Add</guimenuitem>
<guimenuitem>Feature to Volume</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select
<guimenuitem>/dev/evms/vol</guimenuitem>.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select
<guimenuitem>Drive Linking Feature</guimenuitem>.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Press <keycap>Spacebar</keycap> to edit the Name field.
</para></listitem>
<listitem><para>At the &quot;::&quot; prompt enter <userinput>DL</userinput>.
</para></listitem>
<listitem><para>Press <keycap>Enter</keycap>.
</para></listitem>
<listitem><para>Activate <guibutton>Add</guibutton>.</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to add a drive link with the
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the Volumes view, press <keycap>Enter</keycap> on <guimenuitem>/dev/evms/vol</guimenuitem>.</para>
</listitem>
<listitem><para>Activate the <guimenuitem>Add feature</guimenuitem> menu item.</para>
</listitem>
<listitem><para>Continue adding the drive link beginning with step 3 of the Ncurses instructions.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="addfeaturescli"><title>Using the CLI</title>
<para>Use the
<command>add feature</command> to add a feature to an existing volume.
Specify the command name followed by a colon, followed by any options
and the volume to operate on. To determine the options for a given
feature, use the following query:
</para>
<programlisting>query: plugins, plugin=DriveLink, list options</programlisting>
<para>
The option names and descriptions are listed to help you construct
your command. For our example, the command would look like the following:
</para>
<programlisting>add feature: DriveLink={ Name=&quot;DL }, /dev/evms/vol</programlisting>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,132 @@
<appendix id="appxcsm"><title>The CSM plug-in</title>
<para>The Cluster Segment Manager (CSM) is the EVMS plug-in that identifies and
manages cluster storage. The CSM protects disk storage objects by writing metadata
at the start and end of the disk, which prevents other plug-ins from attempting to use the disk.
Other plug-ins can look at the disk, but they cannot see their own metadata signatures
and cannot consume the disk. The protection that CSM provides allows the CSM to
discover cluster storage and present it in an appropriate fashion to the system. </para>
<para>All cluster storage disk objects must be placed in containers that have the
following attributes:</para>
<itemizedlist>
<listitem>
<para>cluster ID that identifies the cluster management software
</para>
</listitem>
<listitem>
<para>node ID that identifies the owner of the disk objects
</para>
</listitem>
<listitem>
<para>storage type: private, shared, or deported
</para>
</listitem>
</itemizedlist>
<para>
The CSM plug-in reads metadata and constructs containers that consume
the disk object. Each disk provides a usable area, mapped as an EVMS
data segment, but only if the disk is accessible to the node viewing
the storage.</para>
<para>The CSM plug-in performs these operations:
</para>
<itemizedlist>
<listitem>
<para>
examines disk objects
</para>
</listitem>
<listitem>
<para>
creates containers
</para>
</listitem>
<listitem>
<para>
uses the containers to consume disk objects
</para>
</listitem>
<listitem>
<para>
produces data segment objects if the disk is accessible to the node
</para>
</listitem>
</itemizedlist>
<sect1 id="csmassn"><title>Assigning the CSM plug-in</title>
<para>Assigning a segment manager to a disk means that you want the plug-in to
manage partitions on the disk. In order to do this, the plug-in needs to create and
maintain appropriate metadata. The CSM creates the follow three segments on the disk:</para>
<itemizedlist>
<listitem>
<para>primary metadata segment</para>
</listitem>
<listitem>
<para>usable area data segment</para>
</listitem>
<listitem>
<para>secondary metadata segment</para>
</listitem>
</itemizedlist>
<para>The CSM collects the information it needs to perform the assign operation with the
following options:</para>
<variablelist>
<varlistentry><term>NodeId</term>
<listitem><para>Choose only from a list of configured node IDs that have been
provided to the CSM by clustering software. The default selection is the
node from which you are running the EVMS user interface.</para></listitem>
</varlistentry>
<varlistentry><term>Container Name</term>
<listitem><para>The name for the container. Currently, you need to keep this name unique
across the cluster to prevent name-in-conflict errors should the container fail over to
another node that has a container with the same name. Later releases of EVMS will assist
you with this. </para></listitem>
</varlistentry>
<varlistentry><term>Storage Type</term>
<listitem><para>Can be either: share, private, or deported. </para>
</listitem>
</varlistentry>
</variablelist>
<para>Note that you would typically assign the CSM to a disk when you want to
add a disk to an existing CSM container. If you are creating a new container, you
have a choice of using either:
<menuchoice>
<guimenu>Actions</guimenu><guimenuitem>Create</guimenuitem><guimenuitem>Container</guimenuitem>
</menuchoice> or
<menuchoice><guimenu>Actions</guimenu><guimenuitem>Add</guimenuitem><guimenuitem>Segment Manager</guimenuitem></menuchoice>.
</para>
<para>If the container doesn't exist, it will be created for it. If the container already
exists, the disk will be added to it.</para>
</sect1>
<sect1 id="unassignCSM"><title>Unassigning the CSM plug-in</title>
<para>Unassigning a CSM plug-in results in the CSM removing its metadata from
the specified disk storage object. The result is that the disk has no segments
mapped and appears as a raw disk object. The disk is removed from the
container that consumed it and the data segment is removed as well.</para>
</sect1>
<sect1><title>Deleting a CSM container</title>
<para>An existing CSM container cannot be deleted if it is producing any data segments,
because other EVMS plug-ins might be building higher-level objects on the CSM objects.
To delete a CSM container, first remove disk objects from the container. When the last
disk is removed, the container is also removed.</para>
</sect1>
</appendix>

View File

@ -0,0 +1,325 @@
<appendix id="appxdos"><title>The DOS link plug-in</title>
<para>The DOS plug-in is the most commonly used EVMS segment manager
plug-in. The DOS plug-in supports DOS disk partitioning as well as:</para>
<itemizedlist>
<listitem>
<para>OS/2 partitions that require extra metadata sectors.</para>
</listitem>
<listitem>
<para>Embedded partition tables: SolarisX86, BSD, and UnixWare.</para>
</listitem>
</itemizedlist>
<para>The DOS plug-in reads metadata and constructs segment storage
objects that provide mappings to disk partitions.
</para>
<sect1 id="DOShow"><title>How the DOS plug-in is implemented</title>
<para>The DOS plug-in provides compatibility with DOS partition tables.
The plug-in produces EVMS segment storage objects that map primary partitions
described by the MBR partition table and logical partitions
described by EBR partition tables.
</para>
<para>DOS partitions have names that are constructed from two pieces
of information:</para>
<itemizedlist>
<listitem>
<para>The device they are found on.</para>
</listitem>
<listitem>
<para>The partition table entry that provided the information.</para>
</listitem>
</itemizedlist>
<para>Take, for example, partition name <filename>hda1</filename>, which
describes a partition that is found on device <filename>hda</filename>
in the MBR partition table.
DOS partition tables can hold four entries.
Partition numbers 1-4 refer to MBR partition records. Therefore, our
example is telling us that partition <filename>hda1</filename> is described
by the very first partition record entry in the MBR partition table.
Logical partitions, however, are different than primary partitions.
EBR partition tables are scattered across a disk but are linked together
in a chain that is first located using an extended partition record found
in the MBR partition table.
Each EBR partition table contains a partition record that describes a logical
partition on the disk.
The name of the logical partition reflects its position in the EBR chain.
Because the MBR partition table reserves numerical names 1-4, the very
first logical partition is always named 5.
The next logical partition, found by following the EBR chain, is called 6,
and so forth.
So, the partition <filename>hda5</filename> is a logical partition that is
described by a partition record in the very first EBR partition table.
</para>
<para>While discovering DOS partitions, the DOS plug-in also looks for
OS/2 DLAT metadata to further determine if the disk is an OS/2 disk.
An OS/2 disk has additional metadata and the metadata is validated during
recovery.
This information is important for the DOS plug-in to know because an OS/2
disk must maintain additional partition information. (This is why the
DOS plug-in asks, when being assigned to a disk, if the disk is a
Linux disk or an OS/2 disk.) The DOS plug-in needs to know how much
information must be kept on the disk and what kind of questions it should
ask the user when obtaining the information.
</para>
<para>
An OS/2 disk can contain compatibility volumes as well as logical volumes.
A compatibility volume is a single partition with an assigned drive
letter that can be mounted. An OS/2 logical volume is a drive link of 1
or more partitions that have software bad-block relocation at the
partition level.
</para>
<para>
Embedded partitions, like those found on a SolarisX86 disk or a BSD
compatibility disk, are found within a primary partition.
Therefore, the DOS plug-in inspects primary partitions that it has
just discovered to further determine if any embedded partitions exist.
Primary partitions that hold embedded partition tables have partition
type fields that indicate this.
For example, a primary partition of type 0xA9 probably has a BSD partition
table that subdivides the primary partition into BSD partitions.
The DOS plug-in looks for a BSD disk label and BSD data partitions in the
primary partition.
If the DOS plug-in finds a BSD disk label, it exports the BSD partitions. Because
this primary partition is actually just a container that holds the BSD
partitions, and not a data partition itself, it is not exported by the
DOS plug-in.
Embedded partitions are named after the primary partition they were
discovered within. As an example, <filename>hda3.1</filename> is
the name of the first embedded partition found within primary partition
<filename>hda3</filename>.
</para>
</sect1>
<sect1 id="assignDOS"><title>Assigning the DOS plug-in</title>
<para>
Assigning a segment manager to a disk means that you want the plug-in
to manage partitions on the disk.
In order to assign a segment manager to a disk, the plug-in needs to
create and maintain the appropriate metadata, which is accomplished
through the "disk type" option.
When you specify the "disk type" option and choose
Linux or OS/2, the plug-in knows what sort of metadata it needs to keep
and what sort of questions it should ask when creating partitions.
</para>
<para>
An additional OS/2 option is the "disk name" option, by which you can
provide a name for the disk that will be saved in OS/2 metadata and that
will be persistent across reboots.
</para>
</sect1>
<sect1 id="creatingDOS"><title>Creating DOS partitions</title>
<para>
There are two basic DOS partition types:</para>
<orderedlist>
<listitem>
<para>A primary partition, which is described by a partition record
in the MBR partition table.</para>
</listitem>
<listitem>
<para>A logical partition, which is described by a partition record
in the EBR partition table.</para>
</listitem>
</orderedlist>
<para>Every partition table has room for four partition records; however,
there are a few rules that impose limits on this.
</para>
<para>
An MBR partition table can hold four primary partition records unless you
also have logical partitions.
In this case, one partition record is used to describe an extended
partition and the start of the EBR chain that in turn describes
logical partitions.
</para>
<para>
Because all logical partitions must reside in the extended partition, you
cannot allocate room for a primary partition within the extended partition
and you
cannot allocate room for a logical partition outside or adjacent to this area.
</para>
<para>
Lastly, an EBR partition table performs two functions:</para>
<orderedlist>
<listitem>
<para>It describes a logical partition and therefore uses a partition
record for this purpose.</para>
</listitem>
<listitem>
<para>It uses a partition record to locate the next EBR partition table.</para>
</listitem>
</orderedlist>
<para>
EBR partition tables use at most two entries.</para>
<para>
When creating a DOS partition, the options you are presented with depend
on the kind of disk you are working with. However, both OS/2 disks and
Linux disks require that you choose a freespace segment on the disk
within which to create the new data segment. The create options are:</para>
<variablelist>
<varlistentry><term>size</term>
<listitem>
<para>The size of the partition you are creating.
Any adjustments that are needed for alignment are performed by the
DOS plug-in and the resulting size might differ slightly from the
value you enter.
</para>
</listitem>
</varlistentry>
<varlistentry><term>offset</term>
<listitem>
<para>Lets you skip sectors and
start the new partition within the freespace area by specifying a
sector offset.
</para>
</listitem>
</varlistentry>
<varlistentry><term>type</term>
<listitem>
<para>Lets you enter a partition type or choose from a list of
partition types; for example, native Linux.
</para>
</listitem>
</varlistentry>
<varlistentry><term>primary</term>
<listitem>
<para>Lets you choose between creating a primary or logical partition.
Due to the rules outlined above, you might or might not have a choice.
The DOS plug-in can determine if a primary or logical partition can be
created in the freespace area you chose and disable this choice.
</para>
</listitem>
</varlistentry>
<varlistentry><term>bootable</term>
<listitem>
<para>Lets you enable the sys_ind flag field in a primary partition
and disable it when creating a logical partition.
The sys_ind flag field identifies the active primary partition for booting.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
Additional OS/2 options are the following:</para>
<variablelist>
<varlistentry><term>partition name</term>
<listitem>
<para>
An OS/2 partition can have a name, like Fred or Part1.
</para>
</listitem>
</varlistentry>
<varlistentry><term>volume name</term>
<listitem>
<para>
OS/2 partitions belong to volumes, either
compatibility or logical, and volumes have names. However, because
the DOS plug-in is not a logical volume manager, it cannot actually
create OS/2 logical volumes.
</para>
</listitem>
</varlistentry>
<varlistentry><term>drive letter</term>
<listitem>
<para>You can specify the drive letter for an OS/2 partition, but it
is not a required field. Valid drive letters are: C,D...Z.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="expandDOS"><title>Expanding DOS partitions</title>
<para>
A partition is a physically contiguous run of sectors on a disk.
You can expand a partition by adding unallocated sectors to the initial
run of sectors on the disk. Because the partition must remain physically
contiguous, a partition can only be expanded by growing into an unused
area on the disk.
These unused areas are exposed by the DOS plug-in as freespace segments.
Therefore, a data segment is only expandable if a freespace segment
immediately follows it. Lastly, because a DOS partition must end on a
cylinder boundary, DOS segments are expanded in
cylinder size increments. This means that if the DOS segment you want
to expand is followed by a freespace segment, you might be unable to
expand the DOS segment if the freespace segment is less than a cylinder
in size.
</para>
<para>
There is one expand option, as follows:</para>
<variablelist>
<varlistentry><term>size</term>
<listitem>
<para>
This is the amount by which you want to expand the data segment. The amount must
be a multiple of the disk's cylinder size.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="shrinkDOS"><title>Shrinking DOS partitions</title>
<para>
A partition is shrunk when sectors are removed from the end of the
partition.
Because a partition must end on a cylinder boundary, a partition is
shrunk by removing cylinder amounts from the end of the segment.</para>
<para>
There is one shrink option, as follows:</para>
<variablelist>
<varlistentry><term>size</term>
<listitem>
<para>The amount by which you want to reduce the size of the segment.
Because a segment ends on a cylinder boundary, this value must be
some multiple of the disk's cylinder size.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="deleteDOS"><title>Deleting partitions</title>
<para>You can delete an existing DOS data segment 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 partitions.
</para>
</sect1>
</appendix>

View File

@ -0,0 +1,143 @@
<appendix id="appxdrivelink"><title>The drive link plug-in</title>
<para>The EVMS drive link plug-in is an aggregating plug-in that
combines storage objects into a single object.
The resulting drive link storage object can be made into a
compatibility volume, EVMS volume, or even be consumed by
higher-level storage objects.
The drive link plug-in is one way to create large storage objects and
volumes from smaller individual pieces.
</para>
<sect1 id="how"><title>How drive linking is implemented</title>
<para>The drive link plug-in consumes storage objects, called link
objects, producing a larger drive link object whose address space spans
the link objects.
The drive link plug-in knows how to assemble the link objects so as to
create the exact same address space every time.
The information required to do this is kept on each link child as persistent
drive-link metadata.
During discovery, the drive link plug-in inspects each known storage
object for this metadata.
The presence of this metadata identifies the storage object as a link object.
The information contained in the metadata is sufficient to:</para>
<itemizedlist>
<listitem>
<para>Identify the link object itself.</para>
</listitem>
<listitem>
<para>Identify the drive link storage object that the link object belongs to.
</para>
</listitem>
<listitem>
<para>Identify all link objects belonging to the drive link storage.
object</para>
</listitem>
<listitem>
<para>Establish the order in which to combine the child link objects.</para>
</listitem>
</itemizedlist>
<para>If any link objects are missing at the conclusion of the discovery
process, the drive link storage object contains gaps where the missing
link objects occur.
In such cases, the drive link plug-in attempts to fill in the gap with a
substitute link object and construct the drive link storage object in
read-only mode, which allows for recovery action.
The missing object might reside on removable storage that has been removed or
perhaps a lower layer plug-in failed to produce the missing object.
Whatever the reason, a read-only drive link storage object, together
logging errors, help you takea the appropriate actions to recover the drive link.
</para>
</sect1>
<sect1 id="createlink"><title>Creating a drive link</title>
<para>
The drive link plug-in provides a list of acceptable objects from which it can create a drive link object.
When you create an EVMS storage object and choose
the drive link plug-in, a list of acceptable objects is provided that you
simply choose from.
The ordering of the drive link is implied by the order in which you pick objects from the
provided list.
After you provide a name for the drive link, the identified link
objects are consumed and the new drive link object is produced.
There are no create options.
</para>
</sect1>
<sect1 id="dlexpandpart"><title>Expanding partitions</title>
<para>
Drive links are aggregating objects that can be expanded in the following ways:</para>
<itemizedlist>
<listitem>
<para>
By adding an additional storage object to the end of the drive link.
</para>
</listitem>
<listitem>
<para>
Bexpanding the last storage object in the drive link.
</para>
</listitem>
</itemizedlist>
<para>
If the expansion point is the drive link storage object, you can perform the
expansion by choosing from a list of objects that the drive link plug-in
finds acceptable for the expansion.
Multiple objects can be selected and added to the drive link.
</para>
<para>
If the expansion point is a link object, then the
plug-in that produced the link object does the expansion.
For example, if the link object was a segment, then the segment manager
plug-in that produced the storage object expands the link object.
Afterward, the drive link storage object is resized to reflect the expansion.
</para>
<para>
There are no expand options.
</para>
</sect1>
<sect1 id="dlshrink"><title>Shrinking a drive link</title>
<para>
Drive links can be shrunk in the following ways:
<itemizedlist>
<listitem><para>By removing link objects from the end of the drive link.</para>
</listitem>
<listitem><para>By shrinking the last storage object in the drive link.</para>
</listitem>
</itemizedlist>
</para>
<para>Removing
a link object from anywhere other than the end of the drive link produces a gap in the drive link address
space, similar to the gap produced by missing link objects.
The drive link plug-in attempts to orchestrate the shrinking of a
drive-link storage object by only listing the last link object.
If you select this object, the drive link plug-in then lists the next-to-last link object, and so forth, moving backward through the link
objects to satisfy the shrink command.
</para>
<para>
There are no shrink options.
</para>
</sect1>
<sect1 id="dldelete"><title>Deleting a drive link</title>
<para>
A drive link can be deleted as long as it is not currently a
compatibility volume, an EVMS volume, or consumed by another EVMS plug-in.
</para>
<para>
No options are available for deleting a drive link storage object.
</para>
</sect1>
</appendix>

View File

@ -0,0 +1,123 @@
<appendix id="ext23fsim"><title>Ext-2/3 file system interface module</title>
<para>
The Ext-2/3 FSIM lets EVMS users create and manage Ext2 and
Ext3 file systems from
within the EVMS interfaces. In order to use the Ext-2/3 FSIM,
the e2fsprogs package
must be installed on your system. The e2fsprogs package
can be found at
<ulink url="http://e2fsprogs.sourceforge.net/">http://e2fsprogs.sourceforge.net/</ulink>.
</para>
<sect1 id="createext23fsim"><title>Creating Ext-2/3 file systems</title>
<para>
Ext-2/3 file systems can be created with <command>mkfs</command> on any EVMS
or compatibility volume that does not already
have a file system. The following options are available for creating
Ext-2/3 file systems:</para>
<variablelist>
<varlistentry><term>badblocks</term>
<listitem>
<para>Perform a read-only check for bad blocks on the volume
before creating the file system. The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>badblocks_rw</term>
<listitem>
<para>Perform a read/write check for bad blocks on the volume before
creating the file system. The default is false.
</para>
</listitem>
</varlistentry>
<varlistentry><term>vollabel</term>
<listitem>
<para>Specify a volume label for the file system. The default is none.
</para>
</listitem>
</varlistentry>
<varlistentry><term>journal</term>
<listitem>
<para>Create a journal for use with the Ext2 file system. The default
is true.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="checkext23fsim"><title>Checking Ext-2/3 file systems</title>
<para>
The following options are available for checking Ext-2/3 file systems with
<command>fsck</command>:
</para>
<variablelist>
<varlistentry><term>force</term>
<listitem>
<para>Force a complete file system check, even if the file system is
already marked clean. The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>readonly</term>
<listitem>
<para>Check the file system is in read-only mode. Report but do not
fix errors. If the file system is mounted, this option is
automatically selected. The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>badblocks</term>
<listitem>
<para>Check for bad blocks on the volume and mark them as busy. The
default is false.
</para>
</listitem>
</varlistentry>
<varlistentry><term>badblocks_rw</term>
<listitem>
<para>Perform a read-write check for bad blocks on the volume and mark
them as busy. The default is false.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="removereiserfsim"><title>Removing Ext-2/3 file systems</title>
<para>
An Ext-2/3 file system can be removed from its volume if the file system is
unmounted. This operation involves erasing the superblock from the volume
so the file system will not be recognized in the future. There are no
options available for removing file systems.
</para>
</sect1>
<sect1 id="expandshrinkext23fsim"><title>Expanding and shrinking Ext-2/3
file systems</title>
<para>
An Ext-2/3 file system is automatically expanded or shrunk when its volume
is expanded or shrunk.
However, Ext-2/3 only allows these operations if the volume is
unmounted, because online expansion and shrinkage is not yet supported.
</para>
</sect1>
</appendix>

View File

@ -0,0 +1,407 @@
<appendix id="appxinitram"><title>Building an init-ramdisk to use with EVMS</title>
<para>EVMS versions 1.9.0 and later perform volume discovery in user space and
communicate with kernel drivers to activate the volumes. This process presents
a problem with having the root file system on an EVMS volume. In order for the
root file system volume to be activated, the EVMS tools must be running. However,
in order to access the EVMS tools, the root file system must be mounted.</para>
<para>The solution to this dilemma is to use an initial ramdisk (initrd). An initrd is a
ram-based device that acts as a temporary root file system at boot time and provides
the ability to run programs and load modules that are necessary to activate the true
root file system. Thus, in order to have your root file system on an EVMS volume, you
need to create and use an initrd.</para>
<para>The following sections provide instructions for creating a new initrd image for use
with EVMS.</para>
<sect1 id="instbuildemvs"><title>Build and install EVMS</title>
<para>Follow the normal EVMS installation instructions for configuring your kernel
and building the EVMS tools. See <xref linkend="evmscmuse"/> or the INSTALL file in
the EVMS package for more information.</para>
</sect1>
<sect1 id="kernsup"><title>Kernel support for initrd</title>
<para>Before you can start creating the initrd, make sure your kernel
supports ramdisks. You can verify that your kernel supports ramdisks
when the kernel is being configured; if it does not support ramdisks, you
change the settings so that the kernel does support ramdisks.</para>
<para>Start the kernel configuration:</para>
<programlisting>cd /usr/src/linux
make xconfig</programlisting>
<para>On the Main Menu screen, under the section for Block Devices, check
to see if "RAM disk support" and "Initial RAM disk (initrd) support"
are supported (a "Y" should be in the field before each entry).
If they are not supported, enter a "Y" for "RAM disk support" and
"Initial RAM disk (initrd) support."</para>
<programlisting>Main Menu
-Block Devices
&lt;Y>RAM disk support
&lt;Y>Initial RAM disk (initrd) support</programlisting>
<para>This support must be built statically into the kernel. Building RAM disk support
as a module will not work. The &quot;Default RAM disk size&quot; option is not important at
this time, because it can be modified with a command-line option to the kernel.</para>
<para>Save your kernel configuration and rebuild and reinstall your kernel.</para>
</sect1>
<sect1><title>Build the initrd image</title>
<para>The next step is to build the actual ramdisk image, which is
described in the following subsections.
The important thing to remember is that any program that needs to
run from the initrd needs to be copied to the initrd.
In addition, any shared libraries that are needed by programs that run
from the initrd need to be copied to the initrd as well.</para>
<sect2 id="createnewinitrd"><title>Create a new, blank initrd</title>
<para>Start by creating a new initrd image with an ext2 file system.
The following example creates the initrd image at
<filename>/boot/initrd-evms</filename>.
You can choose to use a different file name if you wish.</para>
<para>The size of the initrd in the following example is 16 MB.
You can make the initrd larger or smaller by adjusting the &quot;count&quot;
value.
The minimum size needed for all the required EVMS tools and supporting
libraries is about 11 MB.
If you are installing kernel modules to your initrd (see step 3-H below)
or other non-EVMS programs, the size might need to be increased.</para>
<programlisting>dd if=/dev/zero of=/boot/initrd-evms bs=1M count=16
mke2fs -F -m 0 -b 1024 /boot/initrd-evms</programlisting>
</sect2>
<sect2><title>Mount the initrd</title>
<para>In order to copy all the required files to the initrd, the initrd must be mounted
through a loopback device. To mount the initrd through a loopback device requires
that you have loopback support compiled in your kernel (or as a kernel module).
See the &quot;Block Devices&quot; menu in the kernel configuration for more information
about loopback.</para>
<programlisting>mkdir /mnt/initrd
mount -t ext2 -o loop /boot/initrd-evms /mnt/initrd</programlisting>
</sect2>
<sect2><title>Set up the basic directory structure</title>
<para>Use the following commands to create several basic directories that
are required on the initrd:</para>
<programlisting>cd /mnt/initrd
mkdir bin dev etc lib proc sbin var
cd var
mkdir lock log</programlisting>
</sect2>
<sect2><title>Copy helpful utilities</title>
<para>The script that runs in the initrd requires a few common command-line utilities, which
you can create with the following commands:</para>
<programlisting>cd /bin
cp -a bash cat echo expr grep mount sh umount /mnt/initrd/bin
cd /etc
cp fstab /mnt/initrd/etc</programlisting>
</sect2>
<sect2><title>Copy supporting libraries</title>
<para>The utilities from the previous step, along with the EVMS tools, require a few
common shared libraries. You can create these shared libraries with the following
commands:</para>
<programlisting>cd /lib
cp -a ld-* /mnt/initrd/lib
cp -a libc-* libc.* /mnt/initrd/lib
cp -a libdl-* libdl.* /mnt/initrd/lib
cp -a libpthread* /mnt/initrd/lib
cp -a libtermcap* /mnt/initrd/lib</programlisting>
<para>It is possible that some of the utilities (bash in particular) require additional
libraries. Use the <command>ldd</command> command to determine if you need additional
libraries copied to your initrd. For example, output from
the <command>ldd /bin/bash</command> command provides a list similar to the following:</para>
<programlisting>libtermcap.so.2 =&gt; /lib/libtermcap.so.2 (0x40020000)
libdl.so.2 =&gt; /lib/libdl.so.2 (0x40024000)
libc.so.6 =&gt; /lib/libc.so.6 (0x40027000)
/lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x4000000)</programlisting>
<para>All libraries listed by <command>ldd</command> need to be copied to the
<filename>/lib</filename> directory on the initrd.</para>
</sect2>
<sect2><title>Copy the EVMS tools</title>
<para>Several EVMS libraries and a couple of executables need to be copied
to the initrd.
First, you need to locate where the EVMS libraries were installed. By default,
these libraries are installed in <filename>/lib</filename>. If you specified a different
prefix or <filename>libdir</filename> when you configured EVMS, the libraries might be located in a
different directory. It is important that these libraries be installed in the same
location on the initrd as they are on your real system. For example, if the libraries
installed in <filename>/lib</filename>, the libraries need to be copied to <filename>/lib</filename> on the initrd;
If the libraries are installed in <filename>/usr/lib</filename>, they need to be copied to <filename>/usr/lib</filename> on the initrd.</para>
<para>The following example assumes the libraries are installed in <filename>/lib</filename>. Only
the shared libraries (.so) need to be copied. The static versions (.a) are not
needed on the initrd.</para>
<programlisting>cd /lib
cp -a libevms*so* /mnt/initrd/lib
cp -a libdlist*so* /mnt/initrd/lib</programlisting>
<para>Next, copy the plug-in libraries to the initrd. The plug-ins are always installed
in the <filename>evms</filename> subdirectory of the directory where <filename>libevms</filename> is installed.</para>
<para>Not all of the plug-ins need to be copied to the initrd. Several plug-ins are
only for interfacing with the file system utilities and are not necessary at boot time.
Other plug-ins are only for interfacing with clustering packages, which cannot be
started until the regular boot process.</para>
<para>The following is a list of the specific plug-ins that do not need to be installed:</para>
<itemizedlist>
<listitem><para>csm</para></listitem>
<listitem><para>ext2</para></listitem>
<listitem><para>ha</para></listitem>
<listitem><para>jfs</para></listitem>
<listitem><para>reiser</para></listitem>
<listitem><para>replace</para></listitem>
<listitem><para>rsct</para></listitem>
<listitem><para>swap</para></listitem>
<listitem><para>xfs</para></listitem>
</itemizedlist>
<para>Create and change directory to <filename>/lib/evms</filename>:</para>
<programlisting>mkdir /mnt/initrd/lib/evms
cd /lib/evms</programlisting>
<para>Copy the contents of the <filename>/lib/evms</filename> directory, minus the plug-ins
listed earlier that
do not need to be installed, to <filename>/mnt/initrd/lib/evms</filename>:</para>
<programlisting>for foo in aix bbr bsd disk dos drivelink gpt lvm md os2 s390 snapshot sparse
do
cp -a *$foo* /mnt/initrd/lib/evms
done</programlisting>
<para>Next, copy the activation program to the initrd. The full user interfaces are
not needed, because the only thing the initrd does is activate the volumes.
Unlike the EVMS libraries, the exact location of this program in the initrd is not
important, so it can simply go in <filename>sbin</filename>:</para>
<programlisting>cd /sbin
cp evms_activate /mnt/initrd/sbin
cp get_dev_num /mnt/initrd/sbin</programlisting>
<para>Finally, if you have an <filename>/etc/evms.conf</filename> file installed, you should copy it to
the initrd so that EVMS uses the correct options during activation. (However,
if you have an <filename>/etc/evms.conf</filename> file but have never modified it for your system, it should still have all the default values and does not necessarily need to
be installed on the initrd.)</para>
<programlisting>cd /etc
cp evms.conf /mnt/initrd/etc</programlisting>
</sect2>
<sect2 id="setupdiskdev"><title>Set up disk devices</title>
<para>The initrd needs to be set up to reflect the disk devices that are on your system.
EVMS needs to find the disks in order to activate the volumes.</para>
<para>Before setting up the disk devices on the initrd, determine if you are
using <filename>devfs</filename>. If you are not sure, you can quickly check for the file
<filename>/dev/.devfsd</filename>. If <filename>/dev/.devfsd</filename> exists, you are running <filename>devfs</filename>.
You can also
check your kernel configuration in the &quot;Filesystems&quot; menu. If
&quot;/dev file system support&quot; and &quot;Automatically mount at boot&quot; are enabled, you are
running <filename>devfs</filename>.</para>
<sect3><title>devfs users</title>
<para>Because <filename>devfs</filename> runs automatically within the initrd, you do not need to
manually copy the device files to the initrd. However, <filename>devfs</filename> does need to be
mounted within the initrd for it to work properly. There are two ways to accomplish this:</para>
<itemizedlist>
<listitem><para>In the kernel configuration, in the &quot;Filesystems&quot; menu, set the
&quot;Automatically mount at boot time&quot; option. With this option set, <filename>devfs</filename> will be
automatically mounted on <filename>/dev</filename> when the initrd is loaded.</para></listitem>
<listitem><para>Manually mount <filename>devfs</filename> from the <command>linuxrc</command> script before running
<command>evms_activate</command>. See <xref linkend="writelinuxrc"/> for more details.</para></listitem>
</itemizedlist>
</sect3>
<sect3><title>devfsd users</title>
<para>EVMS does not require <filename>devfs</filename> users to run <filename>devfsd</filename>.
However, if you do run
<filename>devfsd</filename>, you also need to run it on the initrd to ensure that all disks and segments
are discovered with the same names on both the initrd and the real system. Thus, if
you run <filename>devfsd</filename>, you need to copy the <filename>devfsd</filename> program and
<filename>config</filename> file to the initrd, as
follows:</para>
<programlisting>cd /sbin
cp devfsd /mnt/initrd/sbin
cd /etc
cp devfsd.conf /mnt/initrd/etc</programlisting>
<para>Next, examine the <filename>devfsd.conf</filename> file (the one you just copied to the ramdisk) with
a text editor. First look for a line like this:</para>
<programlisting>LOOKUP.* MODLOAD</programlisting>
<para>Also in the <filename>devfsd</filename> file, look for a line that begins with RESTORE. This line
specifies a directory where <filename>devfsd</filename> stores changes to
the <filename>/dev</filename> file system. Create this
directory in your initrd. For example, if your <filename>devfsd.conf</filename> file contains the line
&quot;RESTORE /dev-state,&quot; issue the following commands to prevent error messages from
being generated when <filename>devfsd</filename> starts within the initrd:</para>
<programlisting>cd /mnt/initrd
mkdir dev-state</programlisting>
</sect3>
<sect3><title>Non-devfs users</title>
<para>Because <filename>devfs</filename> is not running and mounted within the initrd, you need to
manually copy the necessary device node files to the initrd. If you only have IDE
or SCSI disks, the following commands should be sufficient. If you specifically
know which disks are on your system, you can copy only those device files.</para>
<programlisting>cd /dev
cp -a hd[a-z] /mnt/initrd/dev</programlisting>
<para>In addition to the disk devices, you also need a console device:</para>
<programlisting>cp -a console /mnt/initrd/dev</programlisting>
</sect3>
</sect2>
<sect2 id="copykernmods"><title>Copy kernel modules</title>
<para>If you have any kernel modules that need to be loaded in order for EVMS to
run, those modules need to be copied to the initrd. In particular, if you build your
IDE or SCSI drivers, the Device Mapper or MD/Software-RAID drivers, or any
required file systems as modules, they need to be present on the initrd so they
can be loaded before you run EVMS and try to mount the root file system.</para>
<para>If you build all of the necessary drivers and file systems statically into the
kernel, you can skip this step. Skipping this step is the recommended approach so
that you avoid any possible problems that might be caused by required modules missing
from the initrd.</para>
<para>When copying the kernel modules, it is probably safest to copy the entire
module directory so as not to miss any modules that might be needed on the initrd:</para>
<programlisting>mkdir /mnt/initrd/lib/modules
cd /lib/modules
cp -a x.y.z /mnt/initrd/lib/modules</programlisting>
<para>x.y.z is the version of the kernel that will be running EVMS and the initrd.
</para>
<para>In addition, you will need the module-loading utilities, and probably the module
configuration file:</para>
<programlisting>cd /sbin
cp modprobe /mnt/initrd/sbin
cd /etc
cp modules.conf /mnt/initrd/etc</programlisting>
</sect2>
<sect2 id="writelinuxrc"><title>Write the linuxrc script</title>
<para>At this point, all of the necessary files, programs, and libraries should be on
the initrd. The only thing remaining is the <filename>linuxrc</filename> script.
When the kernel mounts the initrd, it tries to run a script called <filename>linuxrc</filename>, in the root of
the initrd. This script performs all the actions necessary for the initrd, and prepares the
root device so that it can be mounted when the initrd exits.</para>
<para>A sample <filename>linuxrc</filename> script is provided in the <filename>doc</filename> directory of the EVMS source package.
You can use this script as a starting point.</para>
<para>Copy the <command>linuxrc</command> sample to your initrd:</para>
<programlisting>cd /usr/src/evms-2.0.0/doc
cp linuxrc /mnt/initrd</programlisting>
<para>Open the <filename>linuxrc</filename> sample script in your favorite text editor. The following paragraphs
provide a brief explanation of what the <command>linuxrc</command> does at boot time and offer suggestions for
modifying the script for your system.</para>
<itemizedlist>
<listitem><para>The first section tries to mount <filename>devfs</filename>. You only need to
uncomment this section if you are running <filename>devfs</filename> and do not automatically mount
devfs on <filename>/dev</filename> (see <xref linkend="setupdiskdev"/> for more details).</para></listitem>
<listitem><para>The next section tries to start the <filename>devfs</filename> daemon. If <filename>devfs</filename>
is not running or <filename>devfsd</filename> is not present, this section is skipped.</para></listitem>
<listitem><para>The next section mounts the <filename>proc</filename> file system.
EVMS looks in the <filename>/proc</filename> file system to find the location of the
Device Mapper driver. Also, later parts of the <filename>linuxrc</filename> script try to
access <filename>/proc</filename> in order to properly set the root file system device.</para></listitem>
<listitem><para>The next section loads the kernel modules. If you did not copy any
kernel modules to your initrd (<xref linkend="copykernmods"/>), you can leave this section commented out.
If you need to load kernel modules from the initrd, this is the place to do it. Use
the <command>modprobe</command> command for each module that needs to be loaded.
A few examples have been provided within the section.</para></listitem>
<listitem><para>The next section is where EVMS runs and activates all of the volumes.</para></listitem>
<listitem><para>The next section examines the kernel command line for a parameter
that specifies the root volume. More information about how to set up this
parameter is included in <xref linkend="setupbootloader"/>. Device Mapper
dynamically allocates all device numbers, which means it is possible that the
root volume specified to LILO or GRUB might have a different number when the
initrd runs than when the system was last running. In order to make sure the
correct volume is mounted as root, the <filename>linuxrc</filename> script must determine what the
desired root volume name is, determine the number for that device, and set
that value in the appropriate file in <filename>/proc</filename>.</para></listitem>
<listitem><para>Finally, the <filename>/proc</filename> file system can be unmounted.
Also, <filename>devfs</filename>
can be unmounted (but only if it was mounted at the start of the script).</para></listitem>
</itemizedlist>
<para>When the <filename>linuxrc</filename> script completes, the kernel automatically tries to
mount the root file system, and the initrd is removed from memory.</para>
</sect2>
<sect2><title>Unmount the initrd image</title>
<para>The contents of the initrd should now be complete and you can unmount it.</para>
</sect2>
<sect2><title>Compress the initrd image</title>
<para>To conserve space, compress the initrd image:</para>
<programlisting>gzip /boot/initrd-evms</programlisting>
</sect2>
</sect1>
<sect1 id="setupbootloader"><title>Set up the boot loader</title>
<para>In order to actually use the initrd at boot time, the boot-loader must know the location
of the initrd so it can tell the kernel where to load it from. There are also some other changes
that the boot loader needs to know about in order to successfully mount your EVMS
volume as the root file system. The procedure is slightly different for LILO and GRUB, the
two main boot loaders used with Linux.</para>
<sect2><title>LILO procedure</title>
<para>LILO uses the file <filename>/etc/lilo.conf</filename> as its configuration file. Edit
the file with a text editor. If you have not already done so, add an image section
for the kernel you will be using with EVMS. The section should look something like this:</para>
<programlisting>image = /boot/vmlinuz-2.4.20 # Replace with your kernel image
label = 2.4.20 #Any label you'd like to use
read-only
initrd = /boot/initrd-evms.gz # The compressed initrd you just created
append = &quot;ramdisk=16384 root=/dev/evms/Root&quot;</programlisting>
<para>The last line (beginning with &quot;append&quot;) in this section is very important. The line specifies
parameters that are passed to the kernel command line. The &quot;ramdisk&quot; option
overrides the default ramdisk size. This value is in kilobytes and needs to be
at least as big as the initrd image you created in step <xref linkend="createnewinitrd"/>. Thus, if your initrd
image is 20 MB, you need to set this value to 20 * 1024 = 20480.</para>
<para>The &quot;root&quot; option in the &quot;append&quot; line is not only a parameter to the kernel
but also an indicator to the <filename>linuxrc</filename> script (<xref linkend="writelinuxrc"/>) so it can determine the name of
your root file system and use it to tell the kernel the actual root device after the
volumes have been activated. Obviously, you should set this option to the actual
name of your root volume.</para>
<para>After updating <filename>/etc/lilo.conf</filename>, run <command>lilo</command> to install the boot-loader.</para>
</sect2>
<sect2><title>GRUB procedure</title>
<para>GRUB uses the file <filename>/boot/grub/menu.lst</filename> as its configuration file.
Edit this file with a text editor. If you have not already, add a menu item for the kernel
you will be using with EVMS. The menu item should look something like this:</para>
<programlisting>title 2.4.20 # Any label you'd like to use
kernel (hd0,0)/vmlinuz-2.4.20 root=/dev/evms/Root ramdisk=16384
# Replace with the name of your kernel image.
# See the Grub documentation for which (hdx,y)
# value to use.
initrd (hd0,0)/initrd-evms.gz # The compressed initrd image you just created</programlisting>
<para>The extra information after the kernel image name is very important.
These are parameters that are passed to the kernel command line.
The &quot;ramdisk&quot; option
overrides the default ramdisk size. This value is in kilobytes and needs to be
at least as big as the initrd image you created in <xref linkend="createnewinitrd"/>. Thus, if your initrd
image is 20 MB, you need to set this value to 20 * 1024 = 20480.</para>
<para>The &quot;root&quot; option in the &quot;kernel&quot; line is not only a parameter to the kernel
but also an indicator to the <filename>linuxrc</filename> script (<xref linkend="writelinuxrc"/>) so it can determine the name of
your root file system and use it to tell the kernel the actual root device after the
volumes have been activated. Obviously, you should set this option to the actual
name of your root volume.</para>
</sect2>
</sect1>
<sect1><title>Update the file system configuration</title>
<para>Because the goal of creating the initrd is to use an EVMS volume as your
root file system, you also need to update the <filename>fstab</filename> file. Edit <filename>/etc/fstab</filename> with a text editor.
There should be an entry in the file similar to the following:</para>
<programlisting>/dev/evms/RootVolume / ext2 defaults 1 1</programlisting>
<para>Replace <filename>RootVolume</filename> with the actual name of your root volume, and
<filename>ext2</filename> with
the appropriate type for the root file system.</para>
</sect1>
<sect1><title>Reboot the system</title>
<para>The kernel has been built with the appropriate support, the initrd image has
been constructed, and the boot-loader has been configured. You are now
ready to reboot your system using your EVMS volume as the root file system.</para>
<para>In general, you should still run <command>evms_activate</command> during your regular boot scripts.
Even though the volumes will already be activated, running <command></command>evms_activate
makes sure the device files in <filename>/dev/evms</filename> correctly reflect the device numbers
assigned by Device Mapper.</para>
</sect1>
</appendix>

View File

@ -0,0 +1,146 @@
<appendix id="jfsfsim"><title>JFS file system interface module</title>
<para>
The JFS FSIM lets EVMS users create and manage JFS file systems from
within the EVMS interfaces. In order to use the JFS FSIM, version 1.0.9 or
later of the JFS utilities must be installed on your system. The latest
version of JFS can be found at
<ulink url="http://oss.software.ibm.com/jfs/">http://oss.software.ibm.com/jfs/</ulink>.
</para>
<sect1 id="createjfsfsim"><title>Creating JFS file systems</title>
<para>
JFS file systems can be created with <command>mkfs</command> on any EVMS
or compatibility volume (at least 16 MB in size) that does not already
have a file system. The following options are available for creating
JFS file systems:</para>
<variablelist>
<varlistentry><term>badblocks</term>
<listitem>
<para>Perform a read-only check for bad blocks on the volume
before creating the file system. The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>caseinsensitive</term>
<listitem>
<para>Mark the file system as case-insensitive (for OS/2 compatibility).
The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>vollabel</term>
<listitem>
<para>Specify a volume label for the file system. The default is none.
</para>
</listitem>
</varlistentry>
<varlistentry><term>journalvol</term>
<listitem>
<para>Specify the volume to use for an external journal. This option
is only available with version 1.0.20 or later of the JFS utilities.
The default is none.
</para>
</listitem>
</varlistentry>
<varlistentry><term>logsize</term>
<listitem>
<para>
Specify the inline log size (in MB). This option is only available if
the journalvol option is not set. The default is 0.4% of the size of
the volume up to 32 MB.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="checkjfsfsim"><title>Checking JFS file systems</title>
<para>
The following options are available for checking JFS file systems with
<command>fsck</command>:
</para>
<variablelist>
<varlistentry><term>force</term>
<listitem>
<para>Force a complete file system check, even if the file system is
already marked clean. The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>readonly</term>
<listitem>
<para>Check the file system is in read-only mode. Report but do not
fix errors. If the file system is mounted, this option is
automatically selected. The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>omitlog</term>
<listitem>
<para>Omit replaying the transaction log. This option should only
be specified if the log is corrupt. The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>verbose</term>
<listitem>
<para>Display details and debugging information during the check.
The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>version</term>
<listitem>
<para>Display the version of <filename>fsck.jfs</filename> and exit without
checking the file system. The default is false.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="removejfsfsim"><title>Removing JFS file systems</title>
<para>
A JFS file system can be removed from its volume if the file system is
unmounted. This operation involves erasing the superblock from the volume
so the file system will not be recognized in the future. There are no
options available for removing file systems.
</para>
</sect1>
<sect1 id="expandjfsfsim"><title>Expanding JFS file systems</title>
<para>
A JFS file system is automatically expanded when its volume is expanded.
However, JFS only allows the volume to be expanded if it is mounted,
because JFS performs all of its expansions online. In addition, JFS only
allows expansions if version 1.0.21 or later of the JFS utilities are
installed.
</para>
</sect1>
<sect1 id="shrinkjfsfsim"><title>Shrinking JFS file systems</title>
<para>
At this time, JFS does not support shrinking its file systems.
Hence, volumes with JFS file systems cannot be shrunk.
</para>
</sect1>
</appendix>

View File

@ -0,0 +1,199 @@
<appendix id="appxsnap"><title>The LVM plug-in</title>
<para>The LVM plug-in combines storage objects into groups called containers.
From these containers, new storage objects can be created, with a variety of
mappings to the consumed objects. Containers allow the storage capacity of
several objects to be combined, allow additional storage to be added in the future,
and allow for easy resizing of the produced objects.</para>
<sect1 id="lvmimp"><title>How LVM is implemented</title>
<para>The Linux LVM plug-in is compatible with volumes and volume groups from
the original Linux LVM tools from Sistina Software. The original LVM is based on the
concept of volume groups. A volume group (VG) is a grouping of physical volumes
(PVs), which are usually disks or disk partitions. The volume group is not directly
usable as storage space; instead, it represents a pool of available storage.
You create logical volumes (LVs) to use this storage. The storage space of the LV can
map to one or more of the group's PVs.</para>
<para>The Linux LVM concepts are represented by similar concepts in the EVMS LVM plug-in.
A volume group is called a container, and the logical volumes that are produced are
called regions. The physical volumes can be disks, segments, or other regions.
Just as in the original LVM, regions can map to the consumed objects in a variety of ways.</para>
</sect1>
<sect1 id="containerops"><title>Container operations</title>
<sect2 id="createlvmconts"><title>Creating LVM containers</title>
<para>Containers are created with an initial set of objects. In the LVM plug-in, the
objects can be disks, segments, or regions. LVM has two options for creating containers.
The value of these options cannot be changed after the container has been created. The
options are:</para>
<variablelist>
<varlistentry><term>name</term>
<listitem><para>The name of the new container.</para></listitem>
</varlistentry>
<varlistentry><term>pe_size</term>
<listitem><para>The physical extent (PE) size, which is the granularity with which regions can be created. The default is 16 MB. Each region must have a whole number of extents.
Also, each region can have only up to 65534 extents. Thus, the PE size for the container
limits the maximum size of a region in that container. With the default PE size, an LVM
region can be, at most 1 TB. In addition, each object consumed by the container must
be big enough to hold at least five extents. Thus, the PE size cannot be arbitrarily large. Choose wisely.</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2><title>Adding objects to LVM containers</title>
<para>You can add objects to existing LVM containers in order to increase the pool of
storage that is available for creating regions. A single container can consume up to 256
objects. Because the name and PE size of the containers 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 five physical extents. If an object is not large enough to
satisfy this requirement, the LVM plug-in will not allow the object to be added to the container.
</para>
</sect2>
<sect2><title>Removing objects from LVM containers</title>
<para>You can remove a consumed object from its container as long as no regions
are mapped to that object. The LVM plug-in does not allow objects that are in use to
be removed their 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.</para>
<para>No options are available for removing objects from LVM containers.</para>
</sect2>
<sect2><title>Deleting LVM containers</title>
<para>You can delete a container as long as the container does not have any produced
regions. The LVM plug-in does not allow containers to be deleted if they have any
regions. No options are available for deleting LVM containers.</para>
</sect2>
</sect1>
<sect1><title>Region operations</title>
<sect2><title>Creating LVM regions</title>
<para>You create LVM regions from the freespace in LVM containers. If there is at least
one extent of freespace in the container, you can create a new region.</para>
<para>The following options are available for creating LVM regions:</para>
<variablelist>
<varlistentry><term>name</term>
<listitem><para>The name of the new region.</para></listitem>
</varlistentry>
<varlistentry><term>extents</term>
<listitem><para>The number of extents to allocate to the new region. A new region must
have at least one extent and no more than the total available free extents in the container,
or 65534 (whichever is smaller). If you use the <filename>extents</filename> option, the appropriate value
for the size option is automatically calculated. By default, a new region uses all
available extents in the container.</para></listitem>
</varlistentry>
<varlistentry><term>size</term>
<listitem><para>The size of the new region. This size must be a multiple of the
container's PE size. If you use the <filename>size</filename> option, the appropriate value for the
extents options is automatically calculated. By default, a new region uses all
available freespace in the container.</para>
</listitem></varlistentry>
<varlistentry><term>stripes</term>
<listitem><para>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 across multiple objects. 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.</para>
</listitem>
</varlistentry>
<varlistentry><term>stripe_size</term>
<listitem><para>The granularity of striping. The default value is 16 KB. Use this option
only if the <filename>stripes</filename> option is greater than 1.</para>
</listitem>
</varlistentry>
<varlistentry><term>contiguous</term>
<listitem><para>This option specifies that the new region must be allocated on a single
object, and that the extents on that object must be physically contiguous. By default,
this is set to false, which allows regions to span objects. This option cannot be used
if the <filename>stripes</filename> option is greater than 1.</para>
</listitem>
</varlistentry>
<varlistentry><term>pv_names</term>
<listitem><para>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.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2><title>Expanding LVM regions</title>
<para>You can expand an existing LVM region if there are unused extents in the
container. If a region is striped, you can expand it only by using free space on
the objects it is striped across. If a region was created with the contiguous option,
you can only expand it if there is physically contiguous space following the
currently allocated space.</para>
<para>The following options are available for expanding LVM regions:</para>
<variablelist>
<varlistentry><term>add_extents</term>
<listitem><para>The number of extents to add to the region. If you specify this
option, the appropriate value for the add_size option is automatically
calculated. By default, the region will expand to use all free extents in the
container.</para></listitem>
</varlistentry>
<varlistentry><term>add_size</term>
<listitem><para>The amount of space to add to the region. If you specify this option,
the appropriate value for the add_extents option is automatically calculated.
By default, the region will expand to use all freespace in the container.</para></listitem>
</varlistentry>
<varlistentry><term>pv_names</term>
<listitem><para>A list of names of the objects to allocate the additional space from.
By default, this list is empty, which means all available objects will be used to
allocate new space to the region.</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2><title>Shrinking LVM regions</title>
<para>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.</para>
<para>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.</para>
<variablelist>
<varlistentry><term>remove_extents</term>
<listitem><para>The number of extents to remove from the region. If you specify this option,
the appropriate value for the <filename>remove_size</filename> option is automatically calculated. By
default, one extent is removed from the region.</para>
</listitem></varlistentry>
<varlistentry><term>remove_size</term>
<listitem><para>The amount of space to shrink the region by. If you specify this option,
the appropriate value for the <filename>remove_extents</filename> option is automatically calculated.</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2><title>Deleting LVM regions</title>
<para>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.</para>
</sect2>
</sect1>
</appendix>

View File

@ -0,0 +1,430 @@
<appendix id="appxmdreg"><title>The MD region manager</title>
<para>
Multiple disks (MD) support in Linux is a software implementation of RAID
(Redundant Array of Independent Disks). The basic idea of software RAID
is to combine multiple inexpensive hard disks into an array of disks to
obtain performance, capacity, and reliability that exceeds that of a single
large disk.
</para>
<para>
Linux software RAID works on most block devices. A Linux RAID device
can be composed of a mixture of IDE or SCSI devices. Furthermore,
because a Linux RAID device is itself a block device, it can be a
member of another Linux RAID device.
</para>
<para>
Whereas there are six standard types of RAID arrays (RAID-0 through RAID-5) in the hardware implementation, the Linux implementation of software
RAID has RAID-0, RAID-1, RAID-4, and RAID-5 levels. In addition to these
four levels, Linux also has support for another non-redundant array called
"Linear Mode."
</para>
<para>
All levels of Linux software RAID are discussed in greater detail in the
Software RAID HOWTO of The Linux Documentation Project
(<ulink url="www.tldp.org">TLDP</ulink>).
One important thing to remember is RAID is not a substitute for backups.
</para>
<sect1 id="createmdreg"><title>Creating an MD region</title>
<para>There are four EVMS MD region plug-ins: Linear, RAID-0, RAID-1,
and RAID-4/5. The RAID-4/5 region plug-in provides support for both
RAID-4 and RAID-5 arrays. After an MD region manager is selected, the software
provides a
list of acceptable objects. The ordering of the MD array is
implied by the order in which you pick objects from the provided list. The
following are MD region configuration options:
</para>
<variablelist>
<varlistentry><term>chunk size</term>
<listitem><para>The smallest chunk size is 4 KB and the largest is 4096 KB. The
chunk size is a power of 2 of the previous value. Consider the intended use of the
MD region when selecting chunk size. For example,
if the MD region contains mostly large files, you might see better performance
by having a larger chunk size. The block size of the file system being used is
also an importnat factor when selecting chunk size.</para>
<para>This option is available for use with RAID-0 and RAID-4/5.</para></listitem>
</varlistentry>
<varlistentry><term>spare disk</term>
<listitem><para>The benefit of having a spare disk is that when an active disk fails,
the kernel MD code automatically replaces the failed disk with the spare disk.
Otherwise, the MD array operates in a degraded mode.</para>
<para>This option is available for use with RAID-1 and RAID-4/5.</para></listitem>
</varlistentry>
<varlistentry><term>RAID-5 algorithms</term>
<listitem><para>There are four RAID-5 parity algorithms: left assymetric, right
assymetric, left symmetric, and right symmetric. The <ulink url="http://www.accs.com/p_and_p/RAID/LinuxRAID.html">ACCS</ulink> web
page provides examples of what the different parity algorithms do.</para>
<para>This option is available for use with the RAID-5 algorithm.</para></listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="addremspare"><title>Adding and removing a spare object (RAID-1 and RAID-4/5)</title>
<para>When adding a spare disk to an existing MD region, select an available object
that has the same size as the disks that are currently active in the MD region.
If the MD region consists of objects with different sizes, use the smallest size.</para>
<para>Note that after adding a spare to a degraded MD region, the kernel MD code
automatically starts the reconstruction of the MD array. When reconstruction finishes,
the spare disks becomes an active disk.</para>
<para>If you want to reorganize disks and segments, you can remove an existing
spare disk from the MD region. This is a safe operation because the spare disk does
not contain any data.</para>
</sect1>
<sect1 id="rmactiveraid"><title>Removing an active object (RAID-1 only)</title>
<para>Only the MD RAID-1 region plug-in lets you remove an active disk of the
MD region. This option is available for those MD RAID-1 regions that have at least
two active members.</para>
</sect1>
<sect1 id="rmfaultyobj"><title>Removing a faulty object (RAID-1 and RAID-4/5)</title>
<para>When an I/O error occurs on a disk, the disk is marked faulty by the kernel
MD code. Use this function to permanently remove the faulty disk from the MD region.</para>
</sect1>
<sect1 id="markobjfaulty"><title>Marking an object faulty (RAID-4/5 only)</title>
<para>This option is available when the RAID-4/5 array has at least one spare disk.
Use this option to swap an active disk with a spare disk. The active disk is marked
faulty and can be later removed, as described in <xref linkend="rmfaultyobj"/>.</para>
</sect1>
<sect1 id="replaceobj"><title>Replacing an object</title>
<para>In EVMS 2.0 and later, you can replace a member of an MD region with an
available storage object. The new object must be the same size as the replaced object.
This option is currently only supported for volumes that are offline.</para>
</sect1>
<sect1 id="characsraid"><title>Characteristics of Linux RAID levels</title>
<para>The following subsections describe the characteristics of each Linux RAID level.</para>
<sect2><title>Linear mode</title>
<para>Characteristics:</para>
<itemizedlist>
<listitem>
<para>
Two or more disks are combined into one virtual MD device.</para>
</listitem>
<listitem>
<para>
The disks are appended to each other, so writing linearly to the MD device
fills up disk 0 first, then 1, and so on.</para>
</listitem>
<listitem>
<para>
The disks do not have to be of the same size.</para>
</listitem>
</itemizedlist>
<para>Advantages:</para>
<itemizedlist>
<listitem>
<para>
Can be used to build a very large MD device.
</para>
</listitem>
<listitem>
<para>
No parity calculation overhead is involved.
</para>
</listitem>
</itemizedlist>
<para>Disadvantages:</para>
<itemizedlist>
<listitem>
<para>
Not a "true" RAID because it is not fault-tolerant.
</para>
</listitem>
<listitem>
<para>
One disk crash will probably result in loss of most or all data.
</para>
</listitem>
<listitem>
<para>
Should never be used in mission-critical environments.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2><title>RAID-0</title>
<para>Characteristics:</para>
<itemizedlist>
<listitem>
<para>
Two or more disks are combined into one virtual MD device.</para>
</listitem>
<listitem>
<para>
Also called "stripe" mode.
</para></listitem>
<listitem>
<para>
Stripe size determines how data is written to disk. For example,
writing 16 K bytes to a RAID-0 array of three disks with stripe size
of 4 K bytes is broken down into:</para>
<itemizedlist>
<listitem>
<para>
4 K bytes of disk 0
</para>
</listitem>
<listitem>
<para>
4 K bytes to disk 1
</para>
</listitem>
<listitem>
<para>
4 K bytes to disk 2
</para>
</listitem>
<listitem>
<para>
4 K bytes to disk 0
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
The disks should be the same size but they do not have to be the same size.
</para>
</listitem>
</itemizedlist>
<para>Advantages:</para>
<itemizedlist>
<listitem>
<para>
Can be used to build a very large MD device.
</para>
</listitem>
<listitem>
<para>
I/O performance is greatly improved by spreading I/O load across many
controllers and disks.
</para>
</listitem>
<listitem>
<para>
No parity calculation overhead is involved.
</para>
</listitem>
</itemizedlist>
<para>Disadvantages:</para>
<itemizedlist>
<listitem>
<para>
Not a "true" RAID because it is not fault-tolerant.
</para>
</listitem>
<listitem>
<para>
One disk crash is liable to result in the loss of the whole array.
</para>
</listitem>
<listitem>
<para>
Should never be used in mission-critical environments.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2><title>RAID-1</title>
<para>Characteristics:</para>
<itemizedlist>
<listitem>
<para>
Consists of two or more disks to provide a two-way or N-way mirrored MD device.
</para>
</listitem>
<listitem>
<para>
Writes result in writing identical data to all active disks in the array.
</para>
</listitem>
<listitem>
<para>
Reads can be performed on any active disk of the array.
</para>
</listitem>
<listitem>
<para>
Data is intact as long as there is at least one "good" active disk in the array.
</para>
</listitem>
<listitem>
<para>
The disks should be the same size. If they are different sizes, the size
of the RAID-1 array is determined by the smallest disk.
</para>
</listitem>
</itemizedlist>
<para>Advantages:</para>
<itemizedlist>
<listitem>
<para>
100% redundancy of data.
</para>
</listitem>
<listitem>
<para>
Under certain circumstances, a RAID-1 array can sustain multiple simultaneous
disk failures.
</para>
</listitem>
<listitem>
<para>
Kernel MD code provides good read-balancing algorithm.
</para>
</listitem>
<listitem>
<para>
No parity calculation overhead is involved.
</para>
</listitem>
</itemizedlist>
<para>Disadvantages:</para>
<itemizedlist>
<listitem>
<para>
Write performance is often worse than on a single device.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2><title>RAID-4</title>
<para>Characteristics:</para>
<itemizedlist>
<listitem>
<para>
Consists of three or more striped disks.
</para>
</listitem>
<listitem>
<para>
Parity information is kept on one disk. When a disk fails, parity information
is used to reconstruct all data.
</para>
</listitem>
<listitem>
<para>
The disks should be the same size. If they are different sizes, the size of
the RAID-4 array is determined by the smallest disk.
</para>
</listitem>
</itemizedlist>
<para>Advantages:</para>
<itemizedlist>
<listitem>
<para>
Like RAID-0, I/O performance is greatly improved by spreading the I/O load
across many controllers and disks.
</para>
</listitem>
</itemizedlist>
<para>Disadvantages:</para>
<itemizedlist>
<listitem>
<para>
The parity disk becomes a bottleneck. Therefore, a slow parity disk degrades
I/O performance of the whole array.
</para>
</listitem>
<listitem>
<para>
Cannot sustain a two-disk simultaneous failure.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2><title>RAID-5</title>
<para>Characteristics:</para>
<itemizedlist>
<listitem>
<para>
Consists of three or more striped disks.
</para>
</listitem>
<listitem>
<para>
Parity information is distributed evenly among the participating disks.
</para>
</listitem>
<listitem>
<para>
The disks should be the same size. If they are different sizes, the size of
the RAID-5 array is determined by the smallest disk.
</para>
</listitem>
</itemizedlist>
<para>Advantages:</para>
<itemizedlist>
<listitem>
<para>
Like RAID-0, I/O performance is greatly improved by spreading the I/O load
across many controllers and disks.
</para>
</listitem>
<listitem>
<para>
Read performance is similar to RAID-0.
</para>
</listitem>
</itemizedlist>
<para>Disadvantages:</para>
<itemizedlist>
<listitem>
<para>
Writes can be expensive when required read-in blocks for parity calculations
are not in the cache.
</para>
</listitem>
<listitem>
<para>
Cannot sustain a two-disk simultaneous failure.
</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
</appendix>

View File

@ -0,0 +1,85 @@
<appendix id="reiserfsim"><title>ReiserFS file system interface module</title>
<para>
The ReiserFS FSIM lets EVMS users create and manage ReiserFS file systems from
within the EVMS interfaces. In order to use the
ReiserFS FSIM, version 3.x.0 or
later of the ReiserFS utilities must be installed on your system.
In order to get full functionality from the ReiserFS FSIM, use version
3.x.1b or later. The latest
version of ReiserFS can be found at
<ulink url="http://www.namesys.com/">http://www.namesys.com/</ulink>.
</para>
<sect1 id="createreiserfsim"><title>Creating ReiserFS file systems</title>
<para>
ReiserFS file systems can be created with <command>mkfs</command> on any EVMS
or compatibility volume that does not already
have a file system. The following option is available for creating
ReiserFS file systems:</para>
<variablelist>
<varlistentry><term>vollabel</term>
<listitem>
<para>Specify a volume label for the file system. The default is none.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="checkreiserfsim"><title>Checking ReiserFS file systems</title>
<para>
The following option is available for checking XFS file systems with
<command>fsck</command>:
</para>
<variablelist>
<varlistentry><term>mode</term>
<listitem>
<para>There are three possible modes for checking a ReiserFS file system:
Check Read-Only, Fix, and Rebuild Tree."</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="removexreiserfsim"><title>Removing ReiserFS file systems</title>
<para>
A ReiserFS file system can be removed from its volume if the file system is
unmounted. This operation involves erasing the superblock from the volume
so the file system will not be recognized in the future. There are no
options available for removing file systems.
</para>
</sect1>
<sect1 id="expandreiserFSfsim"><title>Expanding ReiserFS file systems</title>
<para>
A ReiserFS file system is automatically expanded when its volume is expanded.
ReiserFS file systems can be expanded if the volume is mounted or
unmounted.
</para>
</sect1>
<sect1 id="shrinkreiserfsim"><title>Shrinking ReiserFS file systems</title>
<para>
A ReiserFS file system is automatically shrunk if the volume is shrunk.
ReiserFS file systems can only be shrunk if the volume is unmounted.
</para>
</sect1>
</appendix>

View File

@ -0,0 +1,139 @@
<appendix id="appxsnapplug"><title>The snapshot plug-in</title>
<para>A snapshot represents a frozen image of a volume. The source of a snapshot is
called an &quot;original.&quot; When a snapshot is created, it looks exactly like the original
at that point in time. As changes are made to the original, the snapshot remains the
same and looks exactly like the original at the time the snapshot was created.</para>
<para>The snapshot feature is very useful for performing data backups. In order to perform a consistent backup, the volume that is being backed up should not change while the
backup is running. This often means the volume must be taken offline during the
backup, which can be a significant inconvenience to users. With snapshots, the
volume can be kept online. A snapshot of the volume is created and the backup is taken
from the snapshot, while the original remains in active use.</para>
<sect1 id="snapimp"><title>How snapshotting is implemented</title>
<para>A snapshot represents a copy of its original volume &quot;frozen&quot; at some
point in time. Instead of actually copying all the data from the original to the snapshot,
a portion of data is copied only when that portion is being modified on the original.
This data portion is called a &quot;chunk.&quot;</para>
<para>When data is written to a chunk on the original volume, the snapshot intercepts
the I/O request and determines if that chunk has already been saved.
If the chunk has not been saved, the chunk is copied from the original to the
snapshot, and then the write request is allowed to proceed ot the original volume.
If additional data is written to that same chunk on the original, the chunk does not
need to be copied again.</para>
<para>When data is read from the snapshot, it is the same as when data is read from the original.
When a chunk of data is read from the snapshot, the snapshot determines if that
chunk has been saved. If it has, the data is retrieved from the snapshot.
If the chunk has not been saved, the data is retrieved from the original.</para>
</sect1>
<sect1 id="snapcreateact"><title>Creating and activating snapshot objects</title>
<para>Creating and activating a snapshot is a two-step process. The first step is to
create the snapshot object. The snapshot object specifies where the saved data will
be stored when changes are made to the original. The second step is to activate the
object, which is to make an EVMS volume from the object.</para>
<sect2><title>Creating a snapshot</title>
<para>You can create a snapshot object from any unused storage object in EVMS
(disks, segments, regions, or feature objects). The size of this consumed object is
the size available to the snapshot object. The snapshot object can be smaller
or larger than the original volume. If the object is smaller, the original volume could fill up
as data is copied from the oriignal to the snapshot, given sufficient activity on the original.
In this situation, the snapshot is deactivated and additional I/O to the snapshot fails.
</para>
<para>Base the size of the snapshot object on the amount of activity that is likely to take place
on the original during the lifetime of the snapshot. The more changes that occur on the
original and the longer the snapshot is expected to remain active, the larger the snapshot
should be. Clearly, determining this calculation is not simple and requires trial and error to determine the correct snapshot object size to use for a particular situation. The goal is
to create a snapshot object large enough to prevent the shapshot from being
deactivated if it fills up, yet small enough to not waste disk space. If the snapshot
object is the same size as the original volume (actually, a little larger, to account for
the snapshot mapping tables), the snapshot is never deactivated.</para>
<para><xref linkend="evmscreatesnap"/> tells how to create snapshots. The following options are available for
creating snapshot objects through the CLI:</para>
<variablelist>
<varlistentry><term>original</term>
<listitem><para>The name of the volume to take a snapshot of.
Only volumes (EVMS or compatibility) can be snapshotted.
Other storage objects cannot be snapshotted.
</para>
</listitem>
</varlistentry>
<varlistentry><term>snapshot</term>
<listitem><para>The name to assign to the new snapshot object.
</para>
</listitem>
</varlistentry>
<varlistentry><term>chunksize</term>
<listitem><para>The granularity of the data that is copied from the
original to the snapshot. The default chunksize is 64 KB.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2><title>Activating a snapshot</title>
<para>After you create a snapshot, activate it by making an EVMS volume from the object.
After you create the volume and save the changes, the snapshot is active. The only
option for activating snapshots is the name to give the EVMS volume. This name can be
the same as or different than the name of the snapshot object.</para>
</sect2>
</sect1>
<sect1><title>Other snapshot activities</title>
<para>In addition to creating and activating snapshots, you can also reinitialize them,
delete them, and roll them back. The following sections describe these tasks.</para>
<sect2><title>Reinitializing a snapshot</title>
<para>Snapshots can be reinitialized, which causes all of the saved data to be erased and
starts the snapshot from the current point in time. A reinitialized snapshot has the same
original, chunk size, and writeable flags as the original snapshot.</para>
<para>To reinitialize a snapshot, delete the EVMS volume from the snapshot without
deleting the snapshot object. Then create a new EVMS volume from the snapshot object.
</para>
</sect2>
<sect2><title>Deleting a snapshot</title>
<para>When a snapshot is no longer needed, you can remove it by deleting the EVMS
volume from the snapshot object, and then deleting the snapshot object. Because the
snapshot saved the initial state of the original volume (and not the changed state),
the original is always up-to-date and does not need any modifications when a snapshot
is deleted.</para>
<para>No options are available for deleting snapshots.</para>
</sect2>
<sect2><title>Rolling back a snapshot</title>
<para>Situations can arise where a user wants to restore the original volume to
the saved state of the snapshot. This action is called a rollback. One such scenario
is if the data on the original is lost or corrupted. Snapshot rollback acts as a quick
backup and restore mechanism, and allows the user to avoid a more lengthy restore
operation from tapes or other archives.</para>
<para>Another situation where rollback can be particularly useful is when you are
testing new software. Before you install a new software package, create a writeable
snapshot of the target volume. You can then install the software to the snapshot
volume, instead of to the original, and then test and verify the new software on the
snapshot. If the testing is successful, you can then roll back the snapshot to the
original and effectively install the software on the regular system. If there is a problem
during the testing, you can simply delete the snapshot without harming the original
volume.</para>
<para>Rollback can only be performed when both the snapshot and the original volumes
are unmounted and otherwise not in use. Rollback can also be performed only when
there is only a single snapshot of an original. If an original has multiple snapshots,
all but the desired snapshot must be deleted before rollback can take place.</para>
<para>No options are available for rolling back snapshots.</para>
</sect2>
</sect1>
</appendix>

View File

@ -0,0 +1,107 @@
<appendix id="xfsfsim"><title>XFS file system interface module</title>
<para>
The XFS FSIM lets EVMS users create and manage XFS file systems from
within the EVMS interfaces. In order to use the XFS FSIM, version 2.0.0 or
later of the XFS utilities must be installed on your system. The latest
version of XFS can be found at
<ulink url="http://oss.sgi.com/projects/xfs/">http://oss.sgi.com/projects/xfs/</ulink>.
</para>
<sect1 id="createxfsfsim"><title>Creating XFS file systems</title>
<para>
XFS file systems can be created with <command>mkfs</command> on any EVMS
or compatibility volume that does not already
have a file system. The following options are available for creating
XFS file systems:</para>
<variablelist>
<varlistentry><term>vollabel</term>
<listitem>
<para>Specify a volume label for the file system. The default is none.
</para>
</listitem>
</varlistentry>
<varlistentry><term>journalvol</term>
<listitem>
<para>Specify the volume to use for an external journal.
The default is none.
</para>
</listitem>
</varlistentry>
<varlistentry><term>logsize</term>
<listitem>
<para>
Specify the inline log size (in MB). This option is only available if
the journalvol option is not set. The default is 4 MB; the
allowed range is 2 to 256 MB.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="checkxfsfsim"><title>Checking XFS file systems</title>
<para>
The following options are available for checking XFS file systems with
<command>fsck</command>:
</para>
<variablelist>
<varlistentry><term>readonly</term>
<listitem>
<para>Check the file system is in read-only mode. Report but do not
fix errors. The default is false.</para>
</listitem>
</varlistentry>
<varlistentry><term>verbose</term>
<listitem>
<para>Display details and debugging information during the check.
The default is false.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="removexfsfsim"><title>Removing XFS file systems</title>
<para>
An XFS file system can be removed from its volume if the file system is
unmounted. This operation involves erasing the superblock from the volume
so the file system will not be recognized in the future. There are no
options available for removing file systems.
</para>
</sect1>
<sect1 id="expandxfsfsim"><title>Expanding XFS file systems</title>
<para>
An XFS file system is automatically expanded when its volume is expanded.
However, XFS only allows the volume to be expanded if it is mounted,
because XFS performs all of its expansions online.
</para>
</sect1>
<sect1 id="shrinkxfsfsim"><title>Shrinking XFS file systems</title>
<para>
At this time, XFS does not support shrinking its file systems.
Hence, volumes with XFS file systems cannot be shrunk.
</para>
</sect1>
</appendix>

View File

@ -0,0 +1,787 @@
<chapter id="clusterops"><title>Clustering operations</title>
<para>This chapter discusses how to configure cluster storage containers (referred to throughout
this chapter as &quot;cluster containers&quot;), a feature provided by the EVMS Cluster Segment
Manager (CSM).</para>
<para>Disks that are physically accessible from all of the nodes of the cluster can be
grouped together as a single manageable entity. EVMS storage objects can then be
created using storage from these containers.</para>
<para>Ownership is assigned to a container to make the container either private or shared.
A container that is owned by any one node of the cluster is called a private container.
EVMS storage objects and storage volumes created using space from a private
container are accessible from only the owning node.</para>
<para>A container that is owned by all the nodes in a cluster is called a shared container.
EVMS storage objects and storage volumes created using space from a shared
container are accessible from all nodes of the cluster simultaneously.</para>
<para>EVMS provides the tools to convert a private container to a shared container, and
a shared container to a private container. EVMS also provides the flexibility to
change the ownership of a private container from one cluster node to another
cluster node.</para>
<sect1><title>Rules and restrictions for creating cluster containers</title>
<para>Note the following rules and limitations for creating cluster containers:</para>
<itemizedlist>
<listitem><para>Do not assign non-shared disks to a cluster container.</para>
</listitem>
<listitem><para>Storage objects created on a cluster container must not span across
multiple cluster containers. Currently, the EVMS Engine cannot enforce this rule, so
you must ensure that objects and volumes created from cluster storage manager
segments do not span multiple containers.</para>
</listitem>
<listitem><para>A disk should not span cluster containers.</para>
</listitem>
<listitem><para>Do not assign RAID, snapshot, and BBR features to storage
objects on a cluster container.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1><title>Example: create a private cluster container</title>
<para>This section tells how to create a sample private
container and provides instructions for completing the following task:</para>
<blockquote><example><title>Create a private cluster container</title>
<para>Given a system with three available shared disks
(<filename>sdd</filename>, <filename>sde</filename>, and
<filename>sdf</filename>),
use the EVMS Cluster Segment Manager to combine these disk drives into a
container called <filename>Priv1</filename> owned by <filename>node1</filename>.
</para>
</example>
</blockquote>
<sect2><title>Using the EVMS GUI</title>
<para>To create a container with the EVMS GUI, follow these steps:</para>
<orderedlist>
<listitem><para>Select
<menuchoice><guimenu>Actions</guimenu><guimenuitem>Create</guimenuitem>
<guimenuitem>Container</guimenuitem>
</menuchoice> to see a list of plug-ins that support container creation.
</para>
</listitem>
<listitem><para>Select the <guimenuitem>Cluster Segment Manager</guimenuitem>.</para>
</listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
<para>The next dialog window contains a list of storage objects that
the CSM can use to create a container.</para>
</listitem>
<listitem><para>Select <filename>sdd</filename>, <filename>sde</filename>, and <filename>sdf</filename> from the list.</para>
</listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
</listitem>
<listitem><para>In the first pull-down menu, select the &quot;Node Id&quot; of the cluster node that
owns this container (<guimenuitem>node1</guimenuitem>). Select &quot;Storage Type&quot; as
<guimenuitem>private</guimenuitem> from the second pull-down menu.</para>
</listitem>
<listitem><para>Enter the name <userinput>Priv1</userinput> for the Container Name.</para>
</listitem>
<listitem><para>Click <guibutton>Create</guibutton>.</para>
<para>A window opens that displays the outcome.</para>
</listitem>
<listitem><para>Commit the changes.</para>
</listitem>
</orderedlist>
</sect2>
<sect2><title>Using Ncurses</title>
<para>To create the private container with the Ncurses interface, follow these steps:
</para>
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Create</guimenuitem><guimenuitem>Container</guimenuitem></menuchoice> to see a list
of plug-ins that support container creation.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow and select Cluster Segment Manager by
pressing <keycap>spacebar</keycap>. The plug-in you selected is marked with an &quot;x.&quot; </para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>The next submenu contains a list of disks that the Cluster Segment Manager finds
acceptable to use for the creation of a container.</para>
</listitem>
<listitem><para>Use <keycap>spacebar</keycap> to select <filename>sdd</filename>, <filename>sde</filename>,
and <filename>sdf</filename> from the list. The disks you select are marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>On the Create Storage Container - Configuration Options menu, press
<keycap>spacebar</keycap> on the Node Id, which will provide a list of nodes from
which to select.</para>
</listitem>
<listitem><para>Press <keycap>spacebar</keycap> on the node <filename>node1</filename> and
then press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow and press <keycap>spacebar</keycap> on the
Storage Type. A list of storage types opens.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to
<guimenuitem>private entry</guimenuitem> and press <keycap>spacebar</keycap>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to
<guimenuitem>Container Name</guimenuitem> and press <keycap>spacebar</keycap>.</para>
<para>The Change Option Value menu opens and asks for the Container Name. Type
in the name of the container as <userinput>Priv1</userinput>, and press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap> to complete the operation.</para>
</listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>An operation to create a private cluster container with the CLI takes three parameters: the name
of the container, the type of the container, and the nodeid to which the container belongs.
</para>
<para>On the CLI, type the following command to create the private container
<filename>Priv1</filename>:</para>
<programlisting>create: container,CSM={name=&quot;Priv1&quot;,type=&quot;private&quot;,nodeid=&quot;node1&quot;},sdd,sde,sdf</programlisting>
</sect2>
</sect1>
<sect1><title>Example: create a shared cluster container</title>
<para>This section tells how to create a sample shared container and provides
instructions to help you complete the following task:</para>
<blockquote><example><title>Create a shared cluster container</title>
<para>Given a system with three available shared disks
(<filename>sdd</filename>, <filename>sde</filename>, and
<filename>sdf</filename>),
use the EVMS Cluster Segment Manager to combine these disk drives into a shared
container called <filename>Shar1</filename>.
</para>
</example>
</blockquote>
<sect2><title>Using the EVMS GUI</title>
<para>To create a shared cluster container with the EVMS GUI, follow these steps:</para>
<orderedlist>
<listitem><para>Select
<menuchoice><guimenu>Actions</guimenu><guimenuitem>Create</guimenuitem>
<guimenuitem>Container</guimenuitem>
</menuchoice> to see a list of plug-ins that support container creation.
</para>
</listitem>
<listitem><para>Select the <guimenuitem>Cluster Segment Manager</guimenuitem>.</para>
</listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
<para>The next dialog window contains a list of storage objects that
the CSM can use to create a container.</para>
</listitem>
<listitem><para>Select <filename>sdd</filename>, <filename>sde</filename>, and <filename>sdf</filename> from the list.</para>
</listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
</listitem>
<listitem><para>You do not need to change the &quot;Node Id&quot; field. Select
Storage Type as
<guimenuitem>shared</guimenuitem> from the second pull-down menu.</para>
</listitem>
<listitem><para>Enter the name <userinput>Shar1</userinput> for the Container Name.</para>
</listitem>
<listitem><para>Click <guibutton>Create</guibutton>. A window opens to display the outcome.</para>
</listitem>
<listitem><para>Commit the changes.</para>
</listitem>
<listitem><para>Quit the GUI and run <command>evms_activate</command> on each of the cluster
nodes so that the nodes discover the volume.
This process will be automated in future releases of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using Ncurses</title>
<para>To create a shared cluster contained with the Ncurses interface, follow these steps:</para>
<orderedlist><listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Create</guimenuitem>
<guimenuitem>Container</guimenuitem>
</menuchoice> to see a list of plug-ins that support container creation.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow and select Cluster Segment Manager by
pressing <keycap>spacebar</keycap>. The plug-in you selected is marked with an &quot;x.&quot; </para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>The next submenu contains a list of disks that the Cluster Segment Manager finds
acceptable to use for the creation of a container.</para>
</listitem>
<listitem><para>Use <keycap>spacebar</keycap> to select <filename>sdd</filename>, <filename>sde</filename>,
and <filename>sdf</filename> from the list. The disks you select are marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Create Storage Container - Configuration Options menu open;
ignore the &quot;Node Id&quot; menu.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow and press <keycap>spacebar</keycap> on the
Storage Type. A list of storage types opens.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to
<guimenuitem>shared entry</guimenuitem> and press <keycap>spacebar</keycap>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to
<guimenuitem>Container Name</guimenuitem> and press <keycap>spacebar</keycap>.</para>
<para>The Change Option Value menu opens and asks for the Container Name. Type
in the name of the container as <userinput>Shar1</userinput>, and press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap> to complete the operation.</para>
</listitem>
<listitem><para>Quit Ncurses and run <command>evms_activate</command> on each of the cluster
nodes. This process will be automated in future releases of EVMS.</para>
</listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>An operation to create a shared cluster container with the CLI takes two parameters:
the name of the container and the type of the container.</para>
<para>On the CLI, type the following command to create shared container <filename>Shar1</filename>:</para>
<programlisting>create: container,CSM={name=&quot;Shar1&quot;,type=&quot;shared&quot;},sdd,sde,sdf</programlisting>
<para>Run <command>evms_activate</command> on each node of the cluster. This process will be automated in future releases of EVMS.</para>
</sect2>
</sect1>
<sect1><title>Example: convert a private container to a shared container</title>
<para>This section tells how to convert a sample private container to a shared
container and provides instructions for completing the following task:</para>
<blockquote><example><title>Convert a private container to shared</title>
<para>Given a system with a private storage container <filename>Priv1</filename> owned
by <filename>evms1</filename>, convert
<filename>Priv1</filename> to a shared storage container with the same name.</para>
</example>
</blockquote>
<note><title>CAUTION</title>
<para>Ensure that no application
is using the volumes on the container on any node of the cluster.</para></note>
<sect2><title>Using the EVMS GUI</title>
<para>Follow these steps to convert a private cluster container to a shared cluster
container with the EVMS GUI:</para>
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Modify</guimenuitem><guimenuitem>Container</guimenuitem></menuchoice> to see a list of containers.</para>
</listitem>
<listitem><para>Select the container <guimenuitem>csm/Priv1</guimenuitem> and press <keycap>Next</keycap>.</para>
<para>A Modify Properties dialog box opens.</para>
</listitem>
<listitem><para>Change &quot;Type Field&quot; to &quot;shared&quot; and click <keycap>Modify</keycap>.</para>
<para>A window opens that displays the outcome.</para>
</listitem>
<listitem><para>Commit the changes.</para>
</listitem>
<listitem><para>Quit the GUI and run <command>evms_activate</command> on all the cluster nodes so that the nodes discover
all the volumes on the <filename>csm/Priv1</filename> container. This process will be
automated in a future release of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using Ncurses</title>
<para>Follow these steps to convert a private cluster container to a shared cluster
container with the Ncurses interface:</para>
<orderedlist><listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Modify</guimenuitem><guimenuitem>Container</guimenuitem></menuchoice> to see a list of containers.</para>
</listitem>
<listitem><para>The Modify Container Properties dialog opens. Select the container
<filename>csm/Priv1</filename> by
pressing <keycap>spacebar</keycap>. The container you selected is marked with an &quot;x.&quot;</para>
<para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Use <keycap>spacebar</keycap> to select <filename>sdd</filename>, <filename>sde</filename>,
and <filename>sdf</filename> from the list. The disks you select are marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Modify Container Properties - Configuration Options&quot; dialog opens. Scroll down with the <keycap>down</keycap> arrow and press <keycap>spacebar</keycap> on the &quot;Type field&quot;.</para>
</listitem>
<listitem><para>Press <keycap>spacebar</keycap>.</para>
</listitem>
<listitem><para>The Change Option Value dialog opens. Type <userinput>shared</userinput> and press <keycap>Enter</keycap>.</para>
<para>The changed value is now displays in the Modify Container Properties -
Configuration Options dialog.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>The outcome of the command is displayed at the bottom of the screen.</para>
</listitem>
<listitem><para>Save the changes by clicking <keycap>Save</keycap> in the <guimenuitem>Actions</guimenuitem> pulldown menu.</para>
</listitem>
<listitem><para>Quit Ncurses and run <command>evms_activate</command> on all the cluster nodes so that the nodes discover
all the volumes on the <filename>csm/Priv1</filename> container. This process will be
automated in a future release of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>The <command>modify</command> command modifies the properties of a container. The first argument
of the command is the object to modify, followed by its new properties. The command
to convert the private container to a shared container in the example is:</para>
<programlisting>modify: csm/Priv1,type=shared</programlisting>
<para>Run <command>evms_activate</command> on all the cluster nodes so that the nodes discover
all the volumes on the <filename>csm/Priv1</filename> container. This process will be
automated in a future release of EVMS.</para>
</sect2>
</sect1>
<sect1><title>Example: convert a shared container to a private container</title>
<para>This section tells how to convert a sample shared container to a private
container and provides instructions for completing the following task:</para>
<blockquote><example><title>Convert a shared container to private</title>
<para>Given a system with a shared storage container <filename>Shar1</filename>, convert
<filename>Shar1</filename> to a private storage container owned by node <filename>node1</filename> (where
<filename>node1</filename> is the nodeid of one of the cluster nodes).</para>
</example>
</blockquote>
<note><title>CAUTION</title>
<para>Ensure that no application
is using the volumes on the container of any node in the cluster.</para></note>
<sect2><title>Using the EVMS GUI</title>
<para>Follow these steps to convert a shared cluster container to a private cluster
container with the EVMS GUI:</para>
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Modify</guimenuitem><guimenuitem>Container</guimenuitem></menuchoice> to see a list of containers.</para>
</listitem>
<listitem><para>Select the container <guimenuitem>csm/Shar1</guimenuitem> and press <keycap>Next</keycap>.</para>
<para>A Modify Properties dialog opens.</para>
</listitem>
<listitem><para>Change &quot;Type Field&quot; to &quot;private&quot; and the &quot;NodeID&quot; field to <filename>node1</filename>. Click <keycap>Modify</keycap>.</para>
<para>A window opens that displays the outcome.</para>
</listitem>
<listitem><para>Commit the changes.</para>
</listitem>
<listitem><para>Quit the GUI and run <command>evms_activate</command> on the other nodes to deactivate
the volumes of the shared container on the other nodes. This process will be
automated in a future release of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using Ncurses</title>
<para>Follow these steps to convert a shared cluster container to a private cluster
container with the Ncurses interface:</para>
<orderedlist><listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Modify</guimenuitem>
<guimenuitem>Container</guimenuitem></menuchoice></para>
</listitem>
<listitem>
<para>The Modify Container Properties dialog opens. Select the container
<filename>csm/Shar1</filename> by
pressing <keycap>spacebar</keycap>. The container you selected is marked with an &quot;x.&quot;</para>
<para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Modify Container Properties - Configuration Options&quot; dialog opens. Scroll down with the <keycap>down</keycap> arrow and press <keycap>spacebar</keycap> on the &quot;Type&quot; field.</para>
</listitem>
<listitem><para>Press <keycap>spacebar</keycap>.</para>
</listitem>
<listitem><para>The Change Option Value dialog opens. Type <userinput>private</userinput> and press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Modify Container Properties -
Configuration Options dialog opens. Scroll down the list to <guimenuitem>NodeId</guimenuitem>
with the <keycap>down</keycap> arrow
and press <keycap>spacebar</keycap>.</para></listitem>
<listitem><para>The Change Option Value dialog opens. Enter <userinput>node1</userinput> and press <keycap>Enter</keycap>.</para></listitem>
<listitem><para>The changed values now display in the Modify Container Properties -
Configuration Options dialog. Press <keycap>Enter</keycap>. </para>
<para>The outcome of the command is displayed at the bottom of the screen.</para>
</listitem>
<listitem><para>Save the changes by clickting <keycap>Save</keycap> in the <guimenuitem>Actions</guimenuitem> pulldown.</para></listitem>
<listitem><para>Quit Ncurses and run <command>evms_activate</command> on all the cluster nodes to deactivate the volumes of the shared container on all the other nodes. This process will be
automated in a future release of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>The <command>modify</command> command modifies the properties of a container. The first argument
of the command is the object to modify, followed by its new properties. The command
to convert the shared container to a private container in the example is:</para>
<programlisting>modify: csm/Shar1,type=private,nodeid=node1</programlisting>
<para>Run <command>evms_activate</command> on all the cluster nodes to deactivate the volumes
of the shared container on all the other nodes. This process will be
automated in a future release of EVMS.</para>
</sect2>
</sect1>
<sect1><title>Example: deport a private or shared container</title>
<para>
When a container is deported, the node disowns the container and deletes
all the objects created in memory that belong to that container.
No node in
the cluster can discover objects residing on a deported container or
create objects for a deported container.
This section explains how to deport a private or shared container.
</para>
<blockquote><example><title>Deport a cluster container</title>
<para>Given a system with a private or shared storage container named
<filename>c1</filename>, deport <filename>c1</filename>.
</para>
</example>
</blockquote>
<sect2><title>Using the EVMS GUI</title>
<para>
To deport a container with the EVMS GUI, follow these steps:
</para>
<orderedlist>
<listitem>
<para>Select
<menuchoice><guimenu>Actions</guimenu><guimenuitem>Modify</guimenuitem><guimenuitem>Container</guimenuitem></menuchoice>.
</para>
</listitem>
<listitem>
<para>Select the container <filename>csm/c1</filename> and press
<keycap>Next</keycap>.
</para>
<para>
A Modify Properties dialog opens.
</para>
</listitem>
<listitem>
<para>Change "Type Field" to "deported." Click <keycap>Modify</keycap>.
</para>
<para>
A window opens that displays the outcome.
</para>
</listitem>
<listitem>
<para>Commit the changes.
</para>
</listitem>
</orderedlist>
<note><title>NOTE</title>
<para>
If the deported container was a shared container, quit the GUI and then
run <command>evms_activate</command> on each cluster node. This operation
will be automated in a future release of EVMS.
</para>
</note>
</sect2>
<sect2><title>Using Ncurses</title>
<para>
To deport a container with Ncurses, follow these steps:
</para>
<orderedlist>
<listitem>
<para>Scroll down the list with the <keycap>down</keycap> arrow to
<guimenuitem>Modify</guimenuitem>. Press <keycap>Enter</keycap>.
</para>
<para>
A submeny is displayed.
</para>
</listitem>
<listitem>
<para>Scroll down until Container is highlighted. Press <keycap>Enter</keycap>.
</para>
<para>
The Modify Container Properties dialog opens.
</para>
</listitem>
<listitem>
<para>Select the container <filename>csm/c1</filename> by pressing
<keycap>spacebar</keycap>. The container you selected is marked with an "x."
</para>
</listitem>
<listitem>
<para>
Press <keycap>Enter</keycap>.
</para>
<para>
The Modify Container Properties - Configuration Options dialog opens.
</para>
</listitem>
<listitem>
<para>Scroll down and press <keycap>spacebar</keycap> on the "Type" field.
</para>
</listitem>
<listitem>
<para>
Press <keycap>spacebar</keycap>.
</para>
<para>
The Change Option Value dialog opens.
</para>
</listitem>
<listitem>
<para>Type <userinput>deported</userinput> and press <keycap>Enter</keycap>.
</para>
<para>
The changed value is displayed in the Modify Container Properties -
Configuration Options dialog.
</para>
</listitem>
<listitem>
<para>Press <keycap>Enter</keycap>.
</para>
<para>
The outcome of the command is displayed at the bottom of the screen.
</para></listitem>
<listitem>
<para>Commit the changes by clicking <keycap>Save</keycap> in the
<guimenuitem>Actions</guimenuitem> pulldown.
</para>
</listitem>
</orderedlist>
<note><title>NOTE</title>
<para>
If the deported container was a shared container, quit Ncurses and then
run <command>evms_activate</command> on each cluster node. This operation
will be automated in a future release of EVMS.
</para>
</note>
</sect2>
<sect2><title>Using the CLI</title>
<para>
To deport a container from the CLI, execute the following command
at the CLI prompt:
</para>
<programlisting>
modify: csm/c1,type="deported"
</programlisting>
<note><title>NOTE</title>
<para>
If the deported container was a shared container,
run <command>evms_activate</command> on each cluster node. This operation
will be automated in a future release of EVMS.
</para>
</note>
</sect2>
</sect1>
<sect1><title>Deleting a cluster container</title>
<para>
The procedure for deleting a cluster container is the same for deleting
any container. See <xref linkend="examdelrecur"/>
</para></sect1>
<sect1><title>Failover and Failback of a private container on Linux-HA</title>
<para>EVMS supports the Linux-HA cluster manager in EVMS V2.0 and later; support for
the RSCT cluster
manager will be made available in a future release of EVMS.</para>
<para><note><title>NOTE</title>
<para>Ensure that <command>evms_activate</command> is called in one of the startup scripts
before the <command>heartbeat</command> startup script is called. If <command>evms_activate</command> is not called, failover
might not work correctly. </para>
</note></para>
<para>Follow these steps to set up failover and failback of a private container:</para>
<orderedlist>
<listitem><para>Add an entry in <filename>/etc/ha.d/haresources</filename> for each
private container to be failed over. For example, if <filename>container1</filename> and
<filename>container2</filename> are to
be failed over together to the same node with <filename>node1</filename> as the owning node, add the
following entry to <filename>/etc/ha.d/haresources</filename>:</para>
<programlisting>node1 evms_failover::container1 evms_failover::container2</programlisting>
<para><filename>node1</filename> is the cluster node that owns this resource. The resource is failed over
to the other node when <filename>node1</filename> dies.</para>
<para>Similarly, if <filename>container3</filename> and <filename>container4</filename> are to be failed over together to the same
node with <filename>node2</filename> as the owning node, then add the following entry to
<filename>/etc/ha.d/haresources</filename>:</para>
<programlisting>node2 evms_failover::container3 evms_failover::container4</programlisting>
<para>Refer to the following source for more details on the semantics of resource groups:
<ulink url="http://www.linux-ha.org/download/GettingStarted.html">http://www.linux-ha.org/download/GettingStarted.html</ulink>.</para>
</listitem>
<listitem><para>Validate that the <filename>/etc/ha.d</filename>, <filename>/etc/ha.cf</filename> and <filename>/etc/ha.d/haresources</filename> files are the same
on all the nodes of the cluster.</para>
</listitem>
<listitem><para>The heartbeat cluster manager must be restarted, as follows, after the
<filename>/etc/ha.d/haresources</filename> file has been changed:</para>
<programlisting>/etc/init.d/heartbeat restart</programlisting>
<note><title>NOTE</title>
<para>
Do not add shared containers to the list of failover resources; doing so causes
EVMS to respond unpredictably.</para>
</note>
</listitem>
</orderedlist>
</sect1>
<sect1><title>Remote configuration management</title>
<para>EVMS supports the administration of cluster nodes by any node in the cluster. For
example, storage on remote cluster node <filename>node1</filename> can be administered from cluster node
<filename>node2</filename>. The following sections show how to set up remote administration
through the various EVMS user interfaces.</para>
<sect2><title>Using the EVMS GUI</title>
<para>To designate <filename>node2</filename> as the node to administer from the GUI, follow these steps:</para>
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Settings</guimenu><guimenuitem>Node Administered...</guimenuitem></menuchoice></para>
</listitem>
<listitem><para>Select <filename>node2</filename>.</para>
</listitem>
<listitem><para>Click <keycap>Administer</keycap> to switch to the new node.</para>
</listitem>
</orderedlist>
<para>
The discovery of the remote configuration is initiated and the status
bar displays the message "Now administering node node2," which indicates
that the GUI is switched over and node node.
</para>
</sect2>
<sect2><title>Using Ncurses</title>
<para>To designate <filename>node2</filename> as the node to administer from Ncurses, follow these steps:</para>
<orderedlist>
<listitem><para>Go to the <guimenuitem>Settings</guimenuitem> pulldown menu.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to the &quot;Node Administered&quot; option and
press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Administer Remote Node dialog opens. Select <filename>node2</filename> and press
<keycap>spacebar</keycap>.</para>
<para>The node you selected is marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The &quot;EVMS is examining your system. Please wait&quot; dialog opens. After a
while you will be switched over to the node <filename>node2</filename>.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>To designate <filename>node2</filename> as a node administrator from the CLI, issue this command:</para>
<programlisting>evms -n node2</programlisting>
</sect2>
</sect1>
<sect1><title>Forcing a cluster container to be imported</title>
<para>
A private container and its objects are made active on a node if:</para>
<itemizedlist>
<listitem>
<para>
the private container is owned by the node
</para>
</listitem>
<listitem>
<para>
the container is not deported
</para>
</listitem>
<listitem>
<para>
the node currently has quorum
</para>
</listitem>
</itemizedlist>
<para>
Similarly, a shared container and its objects are made active on a node if
the node currently has quorum. However, the administrator can force the
importation of private and shared containers by overriding these rules, as
follows:
</para>
<note><title>NOTE</title>
<para>
Use extreme caution when performing this operation by ensuring that the
node on which the cluster container resides is the only active node in the
cluster. Otherwise, the data in volumes on shared and private containers
on the node can get corrupted.
</para>
</note>
<orderedlist>
<listitem>
<para>
Enabling the maintenance mode in the <command>evms.conf</command> file.
The option to modify in the <command>evms.conf</command> file is the following:
</para>
<programlisting>
# cluster segment manager section
csm {
# admin_mode=yes # values are: yes or no
# The default is no. Set this key to
# yes when you wish to force the CSM
# to discover objects from all cluster
# containers, allowing you to perform
# configuration and maintenance. Setting
# admin_mode to yes will cause the CSM
# to ignore container ownership, which
# will allow you to configure storage
# in a maintenance mode.
</programlisting>
<para>
</para></listitem>
<listitem>
<para>
Running <command>evms_activate</command> on the node.
</para>
</listitem>
</orderedlist>
</sect1>
</chapter>

View File

@ -0,0 +1,570 @@
<chapter id="containerops"><title>Clustering operations</title>
<para>This chapter discusses how to configure cluster storage containers (referred to throughout
this chapter as &quot;cluster containers&quot;), a feature provided by the eVMS Cluster Segment
Manager (CSM).</para>
<para>Disks that are physically accessible from all of the nodes of the cluster can be
grouped together as a single manageable entity. EVMS storage objects can then be
created using storage from these containers.</para>
<para>Ownership is assigned to a container to make the container either private or shared.
A container that is owned by any one node of the cluster is called a private container.
EVMS storage objects and storage volumes created using space from a private
container are accessible from only the owning node.</para>
<para>A container that is owned by all the nodes in a cluster is called a shared container.
EVMS storage objects and storage volumes created using space from a shared
container are accessible from all nodes of the cluster simultaneously.</para>
<para>EVMS provides the tools to convert a private container to a shared container, and
a shared container to a private container. EVMS also provides the flexibility to
change the ownership of a private container from one cluster node to another
cluster node.</para>
<sect1><title>Rules and restrictions for creating cluster containers</title>
<para>Note the following rules and limitations for creating cluster containers:</para>
<itemizedlist>
<listitem><para>Non-shared disks should not be assigned to a cluster container.</para>
</listitem>
<listitem><para>Storage objects created on a cluster container must not span across
multiple cluster containers. Currently, the EVMS Engine cannot enforce this rule, so
you need to ensure that objects and volumes created from cluster storage manager
segments do not span multiple containers.</para>
</listitem>
<listitem><para>A disk should not span across cluster containers.</para>
</listitem>
<listitem><para>RAID, snapshot, and BBR features should not be assigned to storage
objects on a cluster container.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1><title>Example: Create a private cluster container</title>
<para>This section tells how to create a sample private
container with EVMS and provides instructions for completing the following task</para>
<blockquote><example><title>Create a private cluster container</title>
<para>Given a system with three available shared disks
(<filename>sdd</filename>, <filename>sde</filename>, and
<filename>sdf</filename>),
use the EVMS Cluster Segment Manager to combine these disk drives into a
container called <filename>Priv1</filename> owned by <filename>node1</filename>.
</para>
</example>
</blockquote>
<sect2><title>Using the EVMS GUI</title>
<para>To create a container with the EVMS GUI, follow these steps:</para>
<orderedlist>
<listitem><para>Select
<menuchoice><guimenu>Actions</guimenu><guimenuitem>Create</guimenuitem>
<guimenuitem>Container</guimenuitem>
</menuchoice> to see a list of plug-ins that support container creation.
</para>
</listitem>
<listitem><para>Select the <guimenuitem>Cluster Segment Manager</guimenuitem>.</para>
</listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
<para>The next dialog window contains a list of storage objects that
the CSM can use to create a container.</para>
</listitem>
<listitem><para>Select <filename>sdd</filename>, <filename>sde</filename>, and <filename>sdf</filename> from the list.</para>
</listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
</listitem>
<listitem><para>In the first pull-down menu, select the &quot;Node Id&quot; of the cluster node that
owns this container as <guimenuitem>node1</guimenuitem>. Select Storage Type as
<menuchoice>private</menuchoice> from the second pull-down menu.</para>
</listitem>
<listitem><para>Enter the name <userinput>Priv1</userinput> for the Container Name.</para>
</listitem>
<listitem><para>Click <guibutton>Create</guibutton>. A window opens to display the outcome.</para>
</listitem>
<listitem><para>Commit the changes.</para>
</listitem>
</orderedlist>
</sect2>
<sect2><title>Using Ncurses</title>
<para>To create the private container with the Ncurses interface, follow these steps:
</para>
<orderedlist><listitem><para>Scroll down the list using the <keycap>down</keycap> arrow to Create.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>. A submenu is displayed.</para>
</listitem>
<listitem><para>Scroll down until Container is highlighted. </para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>A list opens of plug-ins that support container creation.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow and select Cluster Segment Manager by
pressing <keycap>spacebar</keycap>. The plug-in you selected is marked with an &quot;x.&quot; </para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>The next submenu contains a list of disks that the Cluster Segment Manager finds
acceptable to use for the creation of a container.</para>
</listitem>
<listitem><para>Use <keycap>spacebar</keycap> to select <filename>sdd</filename>, <filename>sde</filename>,
and <filename>sdf</filename> from the list. The disks you select are marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>On the Create Storage Container - Configuration Options menu, press
<keycap>spacebar</keycap> on the Node Id, which will provide a list of nodes to select from.</para>
</listitem>
<listitem><para>Press <keycap>spacebar</keycap> on the node <filename>node1</filename> and
press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow and press <keycap>spacebar</keycap> on the
Storage Type. A list of storage types opens.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to
<guimenuitem>private entry</guimenuitem> and press <keycap>spacebar</keycap>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to
<guimenuitem>Container Name</guimenuitem> and press <keycap>spacebar</keycap>.</para>
<para>The Change Option Value menu opens and asks for the Container Name. Type
in the name of the container as <userinput>Priv1</userinput>, and press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap> to complete the operation.</para>
</listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>An operation to create a cluster container with the CLI takes three parameters: the name
of the container, the type of the container, and the nodeid to which the container belongs.
On the CLI, type the following command to create the private container <filename>Priv1</filename>:</para>
<programlisting>create: container,CSM={name=&quot;Priv1&quot;,type=&quot;private&quot;,nodeid=&quot;node1&quot;},sdd,sde,sdf</programlisting>
</sect2>
</sect1>
<sect1><title>Example: Create a shared cluster container</title>
<para>This sections tells how to create a Sample Shared Container with EVMS and provides
instructions to help you complete the following task:</para>
<blockquote><example><title>Create a shared cluster container</title>
<para>Given a system with three available shared disks
(<filename>sdd</filename>, <filename>sde</filename>, and
<filename>sdf</filename>),
use the EVMS Cluster Segment Manager to combine these disk drives into a shared
container called <filename>Shar1</filename>.
</para>
</example>
</blockquote>
<sect2><title>Using the EVMS GUI</title>
<para>To create a shared cluster container with the EVMS GUI, follow these steps:</para>
<orderedlist>
<listitem><para>Select
<menuchoice><guimenu>Actions</guimenu><guimenuitem>Create</guimenuitem>
<guimenuitem>Container</guimenuitem>
</menuchoice> to see a list of plug-ins that support container creation.
</para>
</listitem>
<listitem><para>Select the <guimenuitem>Cluster Segment Manager</guimenuitem>.</para>
</listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
<para>The next dialog window contains a list of storage objects that
the CSM can use to create a container.</para>
</listitem>
<listitem><para>Select <filename>sdd</filename>, <filename>sde</filename>, and <filename>sdf</filename> from the list.</para>
</listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
</listitem>
<listitem><para>You do not need to change the &quot;Node Id&quot; field. Select
Storage Type as
<menuchoice>shared</menuchoice> from the second pull-down menu.</para>
</listitem>
<listitem><para>Enter the name <userinput>Shar1</userinput> for the Container Name.</para>
</listitem>
<listitem><para>Click <guibutton>Create</guibutton>. A window opens to display the outcome.</para>
</listitem>
<listitem><para>Commit the changes.</para>
</listitem>
<listitem><para>Run <command>evms_activate</command> on each of the cluster nodes so that the nodes discover
the volume. This process will be automated in future releases of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using Ncurses</title>
<para>To create a shared cluster contained with the Ncurses interface, follow these steps:</para>
<orderedlist><listitem><para>Scroll down the list using the <keycap>down</keycap> arrow to Create.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>. A submenu is displayed.</para>
</listitem>
<listitem><para>Scroll down until Container is highlighted. </para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>A list opens of plug-ins that support container creation.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow and select Cluster Segment Manager by
pressing <keycap>spacebar</keycap>. The plug-in you selected is marked with an &quot;x.&quot; </para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>The next submenu contains a list of disks that the Cluster Segment Manager finds
acceptable to use for the creation of a container.</para>
</listitem>
<listitem><para>Use <keycap>spacebar</keycap> to select <filename>sdd</filename>, <filename>sde</filename>,
and <filename>sdf</filename> from the list. The disks you select are marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Create Storage Container - Configuration Options menu open;
ignore the &quot;Node Id&quot; menu.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow and press <keycap>spacebar</keycap> on the
Storage Type. A list of storage types opens.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to
<guimenuitem>shared entry</guimenuitem> and press <keycap>spacebar</keycap>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to
<guimenuitem>Container Name</guimenuitem> and press <keycap>spacebar</keycap>.</para>
<para>The Change Option Value menu opens and asks for the Container Name. Type
in the name of the container as <userinput>Shar1</userinput>, and press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap> to complete the operation.</para>
</listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>Execute the following command at the CLI prompt to create a shared container
<filename>Shar1</filename>:</para>
<programlisting>create: container,CSM={name=&quot;Shar1&quot;,type=&quot;shared&quot;},sdd,sde,sdf</programlisting>
</sect2>
</sect1>
<sect1><title>Example: Convert a private container to a shared container</title>
<para>This section tells how to convert a sample private container to a shared
container and provides instructions for completing the following task:</para>
<note><title>NOTE</title>
<para>Exercise caution while performing this operation. Ensure that no application
is using the volumes on the container on any node of the cluster.</para></note>
<blockquote><example><title>Convert a private container to shared</title>
<para>Given a system with a private storage container <filename>Priv1</filename> owned
by <filename>evms1</filename>, convert
<filename>Priv1</filename> to a shared storage container with the same name.</para>
</example>
</blockquote>
<sect2><title>Using the EVMS GUI</title>
<para>Follow these steps to convert a private cluster container to a shared cluster
container with the EVMU GUI:</para>
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Modify</guimenuitem><guimenuitem>Container</guimenuitem></menuchoice> to see a list of containers.</para>
</listitem>
<listitem><para>Select the container <guimenuitem>csm/Priv1</guimenuitem> and press <keycap>Next</keycap>.</para>
<para>A Modify Properties dialog box opens.</para>
</listitem>
<listitem><para>Change &quot;Type Field&quot; to &quot;shared&quot; and click <keycap>Modify</keycap>.</para>
<para>A window opens that displays the outcome.</para>
</listitem>
<listitem><para>Commit the changes.</para>
</listitem>
<listitem><para>Run <command>evms_activate</command> on all the cluster nodes so that the nodes discover
all the volumes on the <filename>csm/Priv1</filename> container. This process will be
automated in a future release of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using Ncurses</title>
<para>Follow these steps to convert a private cluster container to a shared cluster
container with the Ncurses interface:</para>
<orderedlist><listitem><para>Scroll down the list using the <keycap>down</keycap> arrow to
<guimenuitem>Modify</guimenuitem>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>. A submenu is displayed.</para>
</listitem>
<listitem><para>Scroll down until <guimenuitem>Container</guimenuitem> is highlighted. </para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>The Modify Container Properties dialog opens. Select the container
<filename>csm/Priv1</filename> by
pressing <keycap>spacebar</keycap>. The container you selected is marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>Use <keycap>spacebar</keycap> to select <filename>sdd</filename>, <filename>sde</filename>,
and <filename>sdf</filename> from the list. The disks you select are marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Modify Container Properties - Configuration Options&quot; dialog opens. Scroll down with the <keycap>down</keycap> arrow and press <keycap>spacebar</keycap> on the &quot;Type field&quot;.</para>
</listitem>
<listitem><para>Press <keycap>spacebar</keycap>.</para>
</listitem>
<listitem><para>The Change Option Value dialog opens. Type <userinput>shared</userinput> and press <keycap>Enter</keycap>.</para>
<para>The changed value is now displays in the Modify Container Properties -
Configuration Options dialog.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>The outcome of the command is displayed at the bottom of the screen.</para>
</listitem>
<listitem><para>Save the changes by clicking <keycap>Save</keycap> in the <menuchoice>Actions</menuchoice> pulldown menu.</para>
</listitem>
<listitem><para>Run <command>evms_activate</command> on all the cluster nodes so that the nodes discover
all the volumes on the <filename>csm/Priv1</filename> container. This process will be
automated in a future release of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>The <command>modify</command> command modifies the properties of a container. The first argument
of the command is the object to modify, followed by its new properties. The command
to convert the private container to a shared container in the example is:</para>
<programlisting>modify: csm/Priv1,type=shared</programlisting>
<para>Run <command>evms_activate</command> on all the cluster nodes so that the nodes discover
all the volumes on the <filename>csm/Priv1</filename> container. This process will be
automated in a future release of EVMS.</para>
</sect2>
</sect1>
<sect1><title>Example: Convert a shared container to a private container</title>
<para>This section tells how to convert a sample shared container to a private
container and provides instructions for completing the following task:</para>
<note><title>NOTE</title>
<para>Exercise caution while performing this operation. Ensure that no application
is using the volumes on the container on any node of the cluster.</para></note>
<blockquote><example><title>Convert a shared container to private</title>
<para>Given a system with a shared storage container <filename>Shar1</filename>, convert
<filename>Shar1</filename> to a private storage container owned by node <filename>node1</filename> (where
<filename>node1</filename> is the nodeid of one of the cluster nodes).</para>
</example>
</blockquote>
<sect2><title>Using the EVMS GUI</title>
<para>Follow these steps to convert a shared cluster container to a private cluster
container with the EVMU GUI:</para>
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Modify</guimenuitem><guimenuitem>Container</guimenuitem></menuchoice> to see a list of containers.</para>
</listitem>
<listitem><para>Select the container <guimenuitem>csm/Shar1</guimenuitem> and press <keycap>Next</keycap>.</para>
<para>A Modify Properties dialog opens.</para>
</listitem>
<listitem><para>Change &quot;Type Field&quot; to &quot;private&quot; and the &quot;NodeID&quot; field to <filename>node1</filename>. Click <keycap>Modify</keycap>.</para>
<para>A window opens that displays the outcome.</para>
</listitem>
<listitem><para>Commit the changes.</para>
</listitem>
<listitem><para>Run <command>evms_activate</command> on the other nodes to deactivate
the volumes of the shared container on the other nodes. This process will be
automated in a future release of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using Ncurses</title>
<para>Follow these steps to convert a shared cluster container to a private cluster
container with the Ncurses interface:</para>
<orderedlist><listitem><para>Scroll down the list using the <keycap>down</keycap> arrow to
<guimenuitem>Modify</guimenuitem>.</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>. A submenu is displayed.</para>
</listitem>
<listitem><para>Scroll down until <guimenuitem>Container</guimenuitem> is highlighted. </para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
<para>The Modify Container Properties dialog opens. Select the container
<filename>csm/Shar1</filename> by
pressing <keycap>spacebar</keycap>. The container you selected is marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Modify Container Properties - Configuration Options&quot; dialog opens. Scroll down with the <keycap>down</keycap> arrow and press <keycap>spacebar</keycap> on the &quot;Type&quot; field.</para>
</listitem>
<listitem><para>Press <keycap>spacebar</keycap>.</para>
</listitem>
<listitem><para>The Change Option Value dialog opens. Type <userinput>private</userinput> and press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Modify Container Properties -
Configuration Options dialog opens. Scroll down the list to <guimenuitem>NodeId</guimenuitem>
with the <keycap>down</keycap> arrow
and press <keycap>spacebar</keycap>.</para></listitem>
<listitem><para>The Change Option Value dialog opens. Enter <userinput>node1</userinput> and press <keycap>Enter</keycap>.</para></listitem>
<listitem><para>The changed values now display in the Modify Container Properties -
Configuration Options dialog. Press <keycap>Enter</keycap>. </para>
<para>The outcome of the command is displayed at the bottom of the screen.</para>
</listitem>
<listitem><para>Save the changes by clickting <keycap>Save</keycap> in the <menuchoice>Actions</menuchoice> pulldown.</para></listitem>
<listitem><para>Run <command>evms_activate</command> on all the cluster nodes to deactivate the volumes of the shared container on all the other nodes. This process will be
automated in a future release of EVMS.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>The <command>modify</command> command modifies the properties of a container. The first argument
of the command is the object to modify, followed by its new properties. The command
to convert the shared container to a private container in the example is:</para>
<programlisting>modify: csm/Shar1,type=private,nodeid=node1</programlisting>
<para>Run <command>evms_activate</command> on all the cluster nodes to deactivate the volumes
of the shared container on all the other nodes. This process will be
automated in a future release of EVMS.</para>
</sect2>
</sect1>
<sect1><title>Failover and Failback of a private container on Linux-HA</title>
<para>EVMS supports the Linux-HA cluster manager in EVMS V2.0 and later; support for
the RSCT cluster
manager will be made available in a future release of EVMS.</para>
<para><note><title>NOTE</title>
<para>Ensure that <command>evms_activate</command> is called in one of the startup scripts
before the heartbeat daemon starts (for example, <filename>/etc/kinit.d/heartbeat</filename>). If <command>evms_activate</command> is not called, failover
might not work correctly. </para>
</note></para>
<para>Follow these steps to set up failover and failback of a private container:</para>
<orderedlist>
<listitem><para>Add an entry in <filename>/etc/ha.d/haresources</filename> for each
private container to be failed over. For example, if <filename>container3</filename> and
<filename>container4</filename> are to
be filled over together to the same node with <filename>node1</filename> as the owning node, add the
following entry to <filename>/etc/ha.d/haresources</filename>:</para>
<programlisting>node1 evms_failover::container1 evms_failover::container1</programlisting>
<para><filename>node1</filename> is the cluster node that owns this resource. The resource is failed over
to the other node when <filename>node1</filename> dies.</para>
<para>Similarly, if <filename>container3</filename> and <filename>container4</filename> are to be failed over together to the same
node with <filename>node2</filename> as the owning node, then add the following entry to
<filename>/etc/ha.d/haresources</filename>:</para>
<programlisting>node2 evms_failover::container3 evms_failover::container4</programlisting>
<para>Refer to the following source for more details on the semantics of resource groups:
<ulink url="http://www.linux-ha.org/download/GettingStarted.html">http://www.linux-ha.org/download/GettingStarted.html</ulink>.</para>
</listitem>
<listitem><para>Validate that the <filename>/etc/ha.d</filename>, <filename>/etc/ha.cf</filename> and <filename>/etc/ha.d/haresources</filename> files are the same
on all the nodes of the cluster.</para>
</listitem>
<listitem><para>The heartbeat cluster manager must be restarted, as follows, after the
<filename>/etc/ha.d/haresources</filename> file has been changed:</para>
<programlisting>/etc/init.d/heartbeat restart</programlisting>
<para><note>NOTE</note>
Do not add shared containers to the list of failover resources; doing so causes
EVMS to respond unpredictably.</para>
</listitem>
</orderedlist>
</sect1>
<sect1><title>Remote configuration management</title>
<para>EVMS supports the administration of cluster nodes by any node in the cluster. For
example, storage on remote cluster node <filename>node1</filename> can be administered from cluster node
<filename>node2</filename>. The following sections show how to set up remote administration
through the various EVMS user interfaces.</para>
<sect2><title>Using the EVMS GUI</title>
<para>To designate node2 as a node administrator, enter this command:</para>
<programlisting>evmsgui -n node2</programlisting>
</sect2>
<sect2><title>Using Ncurses</title>
<para>To designate <filename>node2</filename> as a node administrator from Ncurses, follow these steps:</para>
<orderedlist>
<listitem><para>Go to the <guimenuitem>Setting</guimenuitem> pulldown menu.</para>
</listitem>
<listitem><para>Scroll down with the <keycap>down</keycap> arrow to the &quot;Node Administered&quot; option and
press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The Administer Remote Node dialog opens. Select <filename>node2</filename> and press
<keycap>spacebar</keycap>.</para>
<para>The node you selected is marked with an &quot;x.&quot;</para>
</listitem>
<listitem><para>Press <keycap>Enter</keycap>.</para>
</listitem>
<listitem><para>The &quot;EVMS is examining your system. Please wait&quot; dialog opens. After a
while you will be switched over to the node <filename>node2</filename>.</para></listitem>
</orderedlist>
</sect2>
<sect2><title>Using the CLI</title>
<para>To designate <filename>node2</filename> as a node administrator from the CLI, issue this command:</para>
<programlisting>evms -n node2</programlisting>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,307 @@
<chapter id="evmscreatedrivelinking"><title>Creating drive links</title>
<para>This chapter discusses the EVMS drive linking feature, which is
implemented by the drive link plug-in, and tells how to create, expand, shrink,
and delete a drive link.</para>
<sect1 id="whatisdrivelinking"><title>What is drive linking?</title>
<para>Drive linking linearly concatenates objects, allowing you to
create large storage objects and volumes from smaller individual pieces.
For example, say you need a 1 GB volume but do
not have contiguous space available of that length. Drive linking lets you
link two or more objects together to form the 1 GB volume.</para>
<para>
The types of objects that can be drive linked include disks, segments,
regions, compatibility volumes, and other feature objects.
</para>
<para>
Any resizing of an existing drive link, whether to grow it or shrink it,
must be coordinated with the appropriate file system operations.
EVMS handles these file system operations automatically.
</para>
<para>
Because drive linking is an EVMS-specific feature that contains EVMS metadata,
it is not backward compatible with other volume-management schemes.</para>
</sect1>
<sect1 id="howimp"><title>How drive linking is implemented</title>
<para>The drive link plug-in consumes storage objects, called link
objects, which produce a larger drive link object whose address space spans
the link objects.
The drive link plug-in knows how to assemble the link objects so as to
create the exact same address space every time.
The information required to do this is kept on each link child as persistent
drive-link metadata.
During discovery, the drive link plug-in inspects each known storage
object for this metadata.
The presence of this metadata identifies the storage object as a link object.
The information contained in the metadata is sufficient to:</para>
<itemizedlist>
<listitem>
<para>Identify the link object itself.</para>
</listitem>
<listitem>
<para>Identify the drive link storage object that the link object belongs to.
</para>
</listitem>
<listitem>
<para>Identify all link objects belonging to the drive link storage.
object</para>
</listitem>
<listitem>
<para>Establish the order in which to combine the child link objects.</para>
</listitem>
</itemizedlist>
<para>If any link objects are missing at the conclusion of the discovery
process, the drive link storage object contains gaps where the missing
link objects occur.
In such cases, the drive link plug-in attempts to fill in the gap with a
substitute link object and construct the drive link storage object in
read-only mode, which allows for recovery action.
The missing object might reside on removable storage that has been removed or
perhaps a lower layer plug-in failed to produce the missing object.
Whatever the reason, a read-only drive link storage object, together
logging errors, help you take the appropriate actions to recover the drive link.
</para>
</sect1>
<sect1><title>Creating a drive link</title>
<para>The drive link plug-in provides a list of acceptable objects from
which it can create a drive-link object.
When you create an EVMS storage object and then choose the drive
link plug-in, a list of acceptable objects is provided that you can choose
from.
The ordering of the drive link is implied by the order in which you pick
objects from the provided list.
After you provide a name for the new drive-link object, the identified
link objects are consumed and the new drive-link object is produced.
There are no create objects.
</para>
<para>Only the last object in a drive link
can be expanded, shrunk or removed. Additionally, a new object can be added to the
end of an existing drive link only if the file system (if one exists) permits.
Any resizing of a drive link, whether to grow it or shrink it, must be coordinated with the
appropriate file system operations. EVMS handles these file system operations
automatically.
</para>
</sect1>
<sect1 id="drivelinkex"><title>Example: create a drive link</title>
<para> This section shows how to create a drive link with EVMS:</para>
<blockquote><example><title>Create a drive link</title>
<para>Create a new drive link consisting of <filename>sde4</filename> and <filename>hdc2</filename>, and call it &quot;dl.&quot;</para></example></blockquote>
<sect2 id="guidrivelinking"><title>Using the EVMS GUI</title>
<para>To create the drive link using the GUI, follow these steps:
<orderedlist>
<listitem><para>Select
<menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Create</guimenuitem>
<guimenuitem>Feature Object</guimenuitem></menuchoice>
to see a list of EVMS features.
</para></listitem>
<listitem><para>Select
<guimenuitem>Drive Linking Feature</guimenuitem>.
</para>
</listitem>
<listitem>
<para>Click <guibutton>Next</guibutton>.</para>
</listitem>
<listitem><para>Click the objects you want to compose the drive link:
sde4 and hdc2.</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para>
</listitem>
<listitem><para>Type <filename>dl</filename> in the &quot;name&quot; field</para>
</listitem><listitem><para>Click
<guibutton>Create</guibutton>. </para>
<para>The last dialog window
presents the free space object you
selected as well as the available
configuration options for that
object.</para>
</listitem>
</orderedlist></para>
<para>Alternatively, you can perform some of the steps to create a drive link with the GUI
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the <guimenuitem>Available Objects</guimenuitem> tab,
right click <filename>sde4</filename>.</para></listitem>
<listitem><para>Click <guimenuitem>Create Feature Object...</guimenuitem></para></listitem>
<listitem><para>Continue creating the drive link beginning with step 2 of the GUI
instructions. In step 4, <filename>sde4</filename> is selected for you. You can also
select <filename>hdc2</filename>.</para></listitem>
</orderedlist>
</sect2>
<!-- Ncurses-->
<sect2 id="ncursdrivelink"><title>Using Ncurses</title>
<para>To create the drive link, follow these steps:</para>
<orderedlist><listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Create</guimenuitem><guimenuitem>Feature Object</guimenuitem></menuchoice> to see a list of EVMS features.</para> </listitem>
<listitem><para>Select <guimenuitem>Drive Linking Feature</guimenuitem>.</para>
</listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Use <keycap>spacebar</keycap>
to select the objects you want to compose the drive
link from: <filename>sde4</filename> and <filename>hdc2</filename>.</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Press
<keycap>spacebar</keycap> to edit the Name field.</para></listitem>
<listitem><para>Type <userinput>dl</userinput> at the "::" prompt.
Press <keycap>Enter</keycap>.</para></listitem>
<listitem><para>Activate <guibutton>Create</guibutton>.</para>
</listitem>
</orderedlist>
<para>Alternatively, you can perform some of the steps to create a drive link with the
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the Available Objects view, press <keycap>Enter</keycap> on <filename>sde4</filename>.</para>
</listitem>
<listitem><para>Activate the <guimenuitem>Create Feature Object</guimenuitem> menu item.</para>
</listitem>
<listitem><para>Continue creating the drive link beginning with step 4 of the Ncurses
instructions. <filename>sde4</filename> will be pre-selected. You can also select <filename>hdc2</filename>.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="drlinkseg"><title>Using the CLI</title>
<para>Use the
<command>create</command> command to create a drive link through the CLI. You pass the &quot;object&quot; keyword to the <command>create</command> command, followed by the plug-in and its options, and finally the objects.</para>
<para>To determine the options for the plug-in you are going to use, issue the following command:</para>
<programlisting>query: plugins, plugin=DriveLink, list options</programlisting>
<para>Now construct the <command>create</command> command, as follows:</para>
<programlisting>create: object, DriveLink={Name=dl}, sde4, hdc2</programlisting>
</sect2>
</sect1>
<sect1 id="expandpartitions">
<title>Expanding a drive link</title>
<para>
A drive link is an aggregating storage object that is built by combining a number of
storage objects into a larger resulting object. A drive link consumes link objects in order
to produce a larger storage object. The ordering of the link objects as well as the
number of sectors they each contribute is described by drive link metadata. The metadata
allows the drive link plug-in to recreate the drive link, spanning the link objects in a
consistent manner. Allowing any of these link objects to expand would corrupt the
size and ordering of link objects; the ordering of link objects is vital to the correct
operation of the drive link. However, expanding a drive link can be controlled by only
allowing sectors to be added at the end of the drive link storage object. This does not
disturb the ordering of link objects in any manner and, because sectors are only added
at the end of the drive link, existing sectors have the same address (logical sector
number) as before the expansion. Therefore, a drive link can be expanded by adding
additional sectors in two different ways:</para>
<itemizedlist>
<listitem>
<para>
By adding an additional storage object to the end of the drive link.
</para>
</listitem>
<listitem>
<para>
By expanding the last storage object in the drive link.
</para>
</listitem>
</itemizedlist>
<para>
If the expansion point is the drive link storage object, you can perform the
expansion by adding an additional storage object to the drive link. This is done
by choosing from a list of acceptable objects during the expand operation. Multiple objects
can be selected and added to the drive link.
</para>
<para>
If the expansion point is the last storage object in the drive link, then you expand the
drive link by interacting with the plug-in that produced the object. For example, if
the link was a segment, then the segment manager plug-in that produced the storage
object expands the link object. Afterwards, the drive link plug-in notices the size
difference and updates the drive link metadata to reflect the resize of the child object.</para>
<para>
There are no expand options.
</para>
</sect1>
<sect1 id="shrinkdrivelink"><title>Shrinking a drive link</title>
<para>
Shrinking a drive link has the same restrictions as expanding a drive link. A drive link
object can only be shrunk by removing sectors from the end of the drive link. This can
be done in the following ways:
<itemizedlist>
<listitem><para>By removing link objects from the end of the drive link.</para>
</listitem>
<listitem><para>By shrinking the last storage object in the drive link.</para>
</listitem>
</itemizedlist>
</para>
<para>
The drive link plug-in attempts to orchestrate the shrinking of a
drive-link storage object by only listing the last link object.
If you select this object, the drive link plug-in then lists the next-to-last
link object, and so forth, moving backward through the link
objects to satisfy the shrink command.
</para>
<para>If the shrink point is the last storage object in th drive link, then you shrink the
drive link by interacting with the plug-in that produced the object.</para>
<para>
There are no shrink options.
</para>
</sect1>
<sect1 id="deletedrivelink"><title>Deleting a drive link</title>
<para>
A drive link can be deleted as long as it is not currently a
compatibility volume, an EVMS volume, or consumed by another EVMS plug-in.
</para>
<para>
No options are available for deleting a drive link storage object.
</para>
</sect1>
</chapter>

View File

@ -0,0 +1,250 @@
<chapter id="evmscreatesnap"><title>Creating snapshots</title>
<para>This chapter discusses snapshotting and tells how to create
a snapshot.</para>
<sect1 id="whatissnapshotting"><title>What is a snapshot?</title>
<para>A snapshot represents a frozen image of a volume.
The source of a snapshot is
called an &quot;original.&quot;
When a snapshot is created, it looks exactly like the original
at that point in time.
As changes are made to the original, the snapshot remains the
same and looks exactly like the original at the time the snapshot was
created.
</para>
<para>The snapshot feature is very useful for performing data backups.
In order to perform a consistent backup, the volume that is being backed up
should not change while the
backup is running.
This often means the volume must be taken offline during the
backup, which can be a significant inconvenience to users.
With snapshots, the volume can be kept online.
A snapshot of the volume is created and the backup is taken
from the snapshot, while the original remains in active use.
</para>
</sect1>
<sect1 id="createactivsnap"><title>Creating and activating snapshot objects</title>
<para>Creating and activating a snapshot is a two-step process.
The first step is to create the snapshot object.
The snapshot object specifies where the saved data will
be stored when changes are made to the original.
The second step is to activate the
object, which is to make an EVMS volume from the object.</para>
<sect2><title>Creating a snapshot</title>
<para>You can create a snapshot object from any unused storage object in EVMS
(disks, segments, regions, or feature objects).
The size of this consumed object is
the size available to the snapshot object. The snapshot object can be smaller
or larger than the original volume.
If the object is smaller, the original volume could fill up
as data is copied from the original to the snapshot, given sufficient
activity on the original.
In this situation, the snapshot is deactivated and additional
I/O to the snapshot fails.
</para>
<para>Base the size of the snapshot object on the amount of activity that
is likely to take place on the original during the lifetime of the snapshot.
The more changes that occur on the
original and the longer the snapshot is expected to remain active,
the larger the snapshot should be.
Clearly, determining this calculation is not simple and requires trial and
error to determine the correct snapshot object size to use for a
particular situation.
The goal is to create a snapshot object large enough to prevent the
shapshot from being
deactivated if it fills up, yet small enough to not waste disk space.
If the snapshot
object is the same size as the original volume (actually, a little larger,
to account for the snapshot mapping tables), the snapshot is
never deactivated.
</para>
</sect2>
<sect2><title>Activating a snapshot</title>
<para>After you create a snapshot, activate it by making an EVMS volume from the object.
After you create the volume and save the changes, the snapshot is active. The only
option for activating snapshots is the name to give the EVMS volume. This name can be
the same as or different than the name of the snapshot object.</para>
</sect2>
</sect1>
<sect1 id="snapshotex"><title>Example: create a snapshot</title>
<para> This section shows how to create a snapshot with EVMS:</para>
<blockquote><example><title>Create a snapshot of a volume</title>
<para>Create a new snapshot of <filename>/dev/evms/vol</filename> on
<filename>lvm/Sample Container/Sample Region</filename>, and call
it &quot;snap.&quot;</para></example></blockquote>
<sect2 id="guisnapshot"><title>Using the EVMS GUI</title>
<para>To create the snapshot using the GUI, follow these steps:
<orderedlist>
<listitem><para>Select
<menuchoice>
<guimenu>Actions</guimenu>
<guimenuitem>Create</guimenuitem>
<guimenuitem>Feature Object</guimenuitem>
</menuchoice>
to see a list of EVMS feature objects.
</para></listitem>
<listitem><para>Select
<guimenuitem>Snapshot Feature</guimenuitem>.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Select <guimenuitem>lvm/Sample Container/Sample Region</guimenuitem>. </para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Select <guimenuitem>/dev/evms/vol</guimenuitem> from the list in the
&quot;Volume to be Snapshotted&quot; field.</para></listitem>
<listitem><para>Type <filename>snap</filename> in the &quot;Snapshot Object Name&quot; field.
</para></listitem>
<listitem><para>Click <guibutton>Create</guibutton>.
</para></listitem>
</orderedlist></para>
<para>Alternatively, you can perform some of the steps to create a snapshot with the GUI
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the <guimenuitem>Available Objects</guimenuitem> tab, right click
<filename>lvm/Sample Container/Sample Region</filename>.</para></listitem>
<listitem><para>Click <guimenuitem>Create Feature Object...</guimenuitem></para></listitem>
<listitem><para>Continue creating the snapshot beginning with step 2 of the
GUI instructions. You can skip steps 4 and 5 of the GUI instructions.</para></listitem>
</orderedlist>
</sect2>
<!-- Ncurses-->
<sect2 id="ncursnapshot"><title>Using Ncurses</title>
<para>To create the snapshot, follow these steps:</para>
<orderedlist><listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Create</guimenuitem>
<guimenuitem>Feature Object</guimenuitem></menuchoice>
to see a list of EVMS feature objects.</para> </listitem>
<listitem><para>Select <guimenuitem>Snapshot Feature</guimenuitem>.</para>
</listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Select <filename>lvm/Sample Container/Sample Region.</filename></para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Press
<keycap>spacebar</keycap> to edit the &quot;Volume to be Snapshotted&quot; field.</para></listitem>
<listitem><para>Highlight <filename>/dev/evms/vol</filename> and press <keycap>spacebar</keycap> to select.</para></listitem>
<listitem><para>Activate <guibutton>OK</guibutton>.</para></listitem>
<listitem><para>Highlight &quot;Snapshot Object Name&quot; and press <keycap>spacebar</keycap> to edit.</para></listitem>
<listitem><para>Type <userinput>snap</userinput> at the "::" prompt.
Press <keycap>Enter</keycap>.</para></listitem>
<listitem><para>Activate <guibutton>Create</guibutton>.</para></listitem>
</orderedlist>
<para>Alternatively, you can perform some of the steps to create a snapshot with the
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the Available Objects view, press <keycap>Enter</keycap> on <filename>lvm/Sample Container/Sample Region</filename>.</para>
</listitem>
<listitem><para>Activate the <guimenuitem>Create Feature Object</guimenuitem> menu item.</para>
</listitem>
<listitem><para>Continue creating the snapshot beginning with step 6 of the Ncurses
instructions.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="clisnapshot"><title>Using the CLI</title>
<para>Use the
<command>create</command> command to create a snapshot through the CLI. You pass the &quot;Object&quot; keyword to the <command>create</command> command, followed by the plug-in and its options, and finally the objects. </para>
<para>To determine the options for the plug-in you are going to use, issue the following command:</para>
<programlisting>query: plugins, plugin=Snapshot, list options</programlisting>
<para>Now construct the <command>create</command> command, as follows:</para>
<programlisting>create: object, Snapshot={original=/dev/evms/vol, snapshot=snap},
&quot;lvm/Sample Container/Sample Region&quot;</programlisting>
</sect2>
</sect1>
<sect1><title>Reinitializing a snapshot</title>
<para>Snapshots can be reinitialized, which causes all of the
saved data to be erased and
starts the snapshot from the current point in time.
A reinitialized snapshot has the same
original, chunk size, and writeable flags as the original
snapshot.</para>
<para>To reinitialize a snapshot, delete the EVMS volume from the
snapshot without deleting the snapshot object.
Then create a new EVMS volume from the snapshot object.
</para>
</sect1>
<sect1><title>Deleting a snapshot</title>
<para>When a snapshot is no longer needed, you can remove it by deleting the EVMS
volume from the snapshot object, and then deleting the snapshot object. Because the
snapshot saved the initial state of the original volume (and not the changed state),
the original is always up-to-date and does not need any modifications when a snapshot
is deleted.</para>
<para>No options are available for deleting snapshots.</para>
</sect1>
<sect1><title>Rolling back a snapshot</title>
<para>Situations can arise where a user wants to restore the original volume to
the saved state of the snapshot. This action is called a rollback. One such scenario
is if the data on the original is lost or corrupted. Snapshot rollback acts as a quick
backup and restore mechanism, and allows the user to avoid a more lengthy restore
operation from tapes or other archives.</para>
<para>Another situation where rollback can be particularly useful is when you are
testing new software. Before you install a new software package, create a writeable
snapshot of the target volume. You can then install the software to the snapshot
volume, instead of to the original, and then test and verify the new software on the
snapshot. If the testing is successful, you can then roll back the snapshot to the
original and effectively install the software on the regular system. If there is a problem
during the testing, you can simply delete the snapshot without harming the original
volume.</para>
<para>Rollback can only be performed when both the snapshot and the original volumes
are unmounted and otherwise not in use. Rollback can also be performed only when
there is only a single snapshot of an original. If an original has multiple snapshots,
all but the desired snapshot must be deleted before rollback can take place.</para>
<para>No options are available for rolling back snapshots.</para>
</sect1>
</chapter>

View File

@ -0,0 +1,63 @@
<chapter id="debuglevels"><title>The EVMS log file and error data collection</title>
<para>This chapter discusses the EVMS information and error log file and the various logging levels. It also explains how to change the logging level.</para>
<sect1 id="FSIMsupp"><title>About the EVMS log file</title>
<para>The EVMS Engine creates a log file called <filename>/var/log/evmsEngine.log</filename> every time the Engine is opened. The Engine also saves copies of up to 10 previous Engine sessions in the files <filename>/var/log/evmsEngine.n.log</filename>, where <filename>n</filename> is the number of the session between 1 and 10. </para>
</sect1>
<sect1 id="loglevels"><title>Log file logging levels</title>
<para>There are several possible logging levels that you can choose to be collected in <filename>/var/log/evmsEngine.log</filename>. The &quot;lowest&quot; logging level, <filename>critical</filename>, collects only messages about serious system problems, whereas the &quot;highest&quot; level, <filename>everything</filename>, collects all logging related messages. When you specify a particular logging level, the Engine collects messages for that level and all the levels below it. </para>
<para>The following table lists the allowable log levels and the information they provide:</para>
<para><table><title>EVMS logging levels</title><tgroup cols="2"><colspec colnum="1" colname="C1"/><colspec colnum="2" colname="C2"/>
<thead><row><entry>Level name</entry>
<entry>Description</entry> </row></thead>
<tbody>
<row><entry>Critical</entry><entry>The health of the system or the Engine is in jeopardy; for example, an operation has failed because there is not enough memory.</entry></row>
<row><entry>Serious</entry><entry>An operation did not succeed.</entry></row>
<row><entry>Error</entry><entry>The user has caused an error. The error messages are provided to help the user correct the problem.</entry></row>
<row><entry>Warning</entry><entry>An error has occurred that the system might or might not be able to work around.</entry></row>
<row><entry>Default</entry><entry>An error has occurred that the system has already worked around.</entry></row>
<row><entry>Details</entry><entry>Detailed information about the system.</entry></row>
<row><entry>Debug</entry><entry>Information that helps the user debug a problem.</entry></row>
<row><entry>Extra</entry><entry>More information that helps the user debug a problem than the &quot;Debug&quot; level provides.</entry></row>
<row><entry>Entry_Exit</entry><entry>Traces the entries and exits of functions.</entry></row>
<row><entry>Everything</entry><entry>Verbose output.</entry></row>
</tbody></tgroup></table></para>
</sect1>
<sect1 id="specifylevels"><title>Specifying the logging levels</title>
<para>By default, when any of the EVMS interfaces is opened, the Engine logs the <filename>Default</filename> level of messages into the <filename>/var/log/evmsEngine.log</filename> file. However, if your system is having problems and you want to see more of what is happening, you can change the logging level to be higher; if you want fewer logging messages, you can change the logging level to be lower. To change the logging level, specify the <command>-d</command> parameter and the log level on the interface open call. The following examples show how to open the various interfaces with the highest logging level (<filename>everything</filename>):</para>
<programlisting>GUI: evmsgui -d everything</programlisting>
<programlisting>Ncurses: evmsn -d everything</programlisting>
<programlisting>CLI: evms -d everything</programlisting>
<note><title>NOTE</title>
<para>If you use the EVMS mailing list for help with a problem, providing to us
the log file that is created when you open one of the interfaces (as shown
in the previous commands) makes it easier for us to help you.
</para>
</note>
<para>The EVMS GUI lets you change the logging level during an Engine session. To do so, follow these steps:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Settings</guimenu>
<guimenuitem>Log Level</guimenuitem>
<guimenuitem>Engine</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Click the <guibutton>Level</guibutton> you want.
</para></listitem>
</orderedlist></para>
<para>The CLI command, <command>probe</command>, opens and closes the Engine, which causes a new log to start. The log that existed before the <command>probe</command> command was issued is renamed <filename>/var/log/evmsEngine.1.log</filename> and the new log is named <filename>/var/log/evmsEngine.log</filename>.</para>
</sect1>
</chapter>

View File

@ -0,0 +1,165 @@
<chapter id="deleterecurs"><title>Destroying EVMS objects</title>
<para>This chapter tells how to destroy EVMS objects through the delete and
delete recursive operations.</para>
<sect1 id="howtodel"><title>How to delete objects: delete and delete recursive</title>
<para>There are two ways in EVMS that you can destroy objects that you no longer want: Delete and Delete Recursive. The Delete option destroys only the specific object you specify. The Delete Recursive option destroys the object you specify and its underlying objects, down to the container, if one exists, or else down to the disk. In order for an object to be deleted, it must not be mounted. EVMS verifies that the object you are attempting to delete is not mounted and does not perform the deletion if the object is mounted.</para>
</sect1>
<sect1 id="examdelrecur"><title>Example: perform a delete recursive operation</title>
<para> The following example shows how to destroy a volume and the objects below it with the EVMS GUI, Ncurses, and CLI interfaces.</para>
<blockquote><example><title>Destroy a volume and the region and container below it</title>
<para>This example uses the delete recursive operation to destroy volume <filename>/dev/evms/Sample Volume</filename> and the region and container below it. Volume <filename>/dev/evms/Sample Volume</filename> is the volume that was created in earlier. Although we could also use the delete option on each of the objects, the delete recursive option takes fewer steps. Note that because we intend to delete the container as well as the volume, the operation needs to be performed in two steps: one to delete the volume and its contents, and one to delete the container and its contents.
</para></example></blockquote>
<sect2 id="mkfsgui"><title>Using the EVMS GUI</title>
<para>Follow these steps to delete the volume and the container with the EVMS GUI:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Delete</guimenuitem>
<guimenuitem>Volume</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select volume <guimenuitem>/dev/evms/Sample Volume</guimenuitem>
from the list.
</para></listitem>
<listitem><para>Click <guibutton>Recursive Delete</guibutton>. This step deletes the volume
and the region <filename>lvm/Sample Container/Sample Region</filename>. If you want to
keep the
underlying pieces or want to delete each piece separately, you would click
<guibutton>Delete</guibutton> instead of <guibutton>Delete Recursive</guibutton>.
</para></listitem>
<listitem><para>Assuming you chose Delete Recursive (if not, delete the region before
continuing with these steps), select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Delete</guimenuitem>
<guimenuitem>Container</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select container <guimenuitem>lvm/Sample Container</guimenuitem> from the list.
</para></listitem>
<listitem><para>Click <guibutton>Recursive Delete</guibutton> to destroy the container and anything
under it. Alternatively, click <guibutton>Delete</guibutton> to destroy only the container (if you built the container on
disks as in the example, either command has the same effect).
</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the volume deletion steps with the GUI context
sensitive menu:</para>
<orderedlist>
<listitem><para>From the <guimenuitem>Volumes</guimenuitem> tab, right click
<filename>/dev/evms/Sample Volume</filename>.</para></listitem>
<listitem><para>Click <guimenuitem>Delete...</guimenuitem></para></listitem>
<listitem><para>Continue with the operation beginning with step 3 of the
GUI instructions.</para></listitem>
</orderedlist>
</sect2>
<!-- Ncurses-->
<sect2 id="mkfsncurses"><title>Using Ncurses</title>
<para>Follow these steps to delete the volume and the container with Ncurses:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Delete</guimenuitem><guimenuitem>Volume</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select volume
<guimenuitem>/dev/evms/Sample Volume</guimenuitem> from the list.
</para></listitem>
<listitem><para>Activate
<guibutton>Delete Volume Recursively</guibutton>.
This step deletes the volume and the region
<filename>lvm/Sample Container/Sample Region</filename>. If you want to keep the
underlying pieces or want to delete each piece separately, activate
<guibutton>Delete</guibutton> instead of <guibutton>Delete Recursive</guibutton>.
</para></listitem>
<listitem><para>Assuming you chose <guimenuitem>Delete Volume Recursively</guimenuitem>
(if not, delete the region before continuing with
these steps), select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>Delete</guimenuitem><guimenuitem>Container</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select container
<guimenuitem>lvm/Sample Container</guimenuitem> from the list.
</para></listitem>
<listitem><para>Click
<guimenuitem>Recursive Delete</guimenuitem> to destroy the container and
everything under it. Alternatively, activate <guibutton>Delete</guibutton> to delete
only the container (if you built the container on disks as in the
example, either command has the same effect).</para></listitem>
<listitem><para>Press <keycap>Enter</keycap>.
</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the volume deletion steps with the
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the Volumes view, press <keycap>Enter</keycap> on <guimenuitem>/dev/evms/Sample Volume</guimenuitem>.</para>
</listitem>
<listitem><para>Activate <guibutton>Delete</guibutton>.</para>
</listitem>
<listitem><para>Continue with the operation beginning with step 3 of the Ncurses instructions.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="deleterecurcli"><title>Using the CLI</title>
<para>Use the
<command>delete</command> and <command>delete recursive</command>
commands to destroy EVMS objects.
Specify the command name followed by a colon, and then specify the
volume, object, or container name. For example:
<orderedlist>
<listitem><para>Enter this command to perform the delete recursive
operation:</para>
<programlisting>delete recursive: "/dev/evms/Sample Volume"</programlisting>
<para>This step deletes the volume and the region
<filename>/lvm/Sample Container/Sample Region</filename>. If you wanted to keep the
underlying pieces or wanted to delete each piece separately, use the <command>delete</command> command, as follows:</para>
<programlisting>delete: "/dev/evms/Sample Volume"</programlisting>
</listitem>
<listitem><para>Assuming you chose <guimenuitem>Delete Volume Recursively</guimenuitem> (if not, delete the region before
continuing with these steps) enter the following to destroy the container and everything under it:</para>
<programlisting>delete recursive: "lvm/Sample Container"</programlisting>
<para>To destroy only the container, enter the following:</para>
<programlisting>delete: "lvm/Sample Container"</programlisting>
</listitem>
</orderedlist>
</para>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,87 @@
<chapter id="displaydetails"><title>Obtaining interface display details</title>
<para>The EVMS interfaces let you view more detailed information about an EVMS object than
what is readily available from the main views of the EVMS user interfaces. The type and extent
of additional information available is dependent on the interface you use. For example, the
EVMS GUI provides more in-depth information than does the CLI.</para>
<para>The following sections show how to find detailed information on the region
<filename>lvm/Sample Container/Sample Region</filename>, which is part of
volume <filename>/dev/evms/Sample Volume</filename> (created in section 10.2).</para>
<sect1 id="displaygui"><title>Using the EVMS GUI</title>
<para>With the EVMS GUI, it is only possible to display additional details on an object through
the Context Sensitive Menus, as shown in the following steps:
<orderedlist><listitem><para>Looking at the <guibutton>volumes view</guibutton>, click the &quot;+&quot; next
to volume <filename>/dev/evms/Sample Volume</filename>. Alternatively, look at the <guimenu>regions</guimenu> view.</para>
</listitem>
<listitem><para>Right click <filename>lvm/Sample Container/Sample Region</filename>.</para></listitem>
<listitem><para>Point at <guibutton>Display Details...</guibutton> and left click. A new window opens
with additional information about the selected region.</para></listitem>
<listitem><para>Click <guimenu>More</guimenu> by the <guibutton>Logical Extents box</guibutton>. Another window opens that displays the mappings of logical extents to physical extents.</para>
</listitem></orderedlist>
</para></sect1>
<sect1 id="displaydatancurses"><title>Using Ncurses</title>
<para>Follow these steps to display additional details on an object with Ncurses:
<orderedlist>
<listitem><para>Press
<keycap>Tab</keycap> to reach the Storage Regions view.
</para></listitem>
<listitem><para>Scroll down using the <keycap>down</keycap> arrow until
<filename>lvm/Sample Container/Sample Region</filename> is highlighted.
</para></listitem>
<listitem><para>Press <keycap>Enter</keycap>.
</para></listitem>
<listitem><para>In the context menu, scroll down using the <keycap>down</keycap> arrow
to highlight &quot;Display Details...&quot;
</para></listitem>
<listitem><para>Press <keycap>Enter</keycap> to activate the menu item.
</para></listitem>
<listitem><para>In the Detailed Information dialog, use the <keycap>down</keycap> arrow to
highlight the &quot;Logical Extents&quot; item and then use <keycap>spacebar</keycap> to open
another window that displays the mappings of logical extents to physical extents.
</para></listitem>
</orderedlist>
</para></sect1>
<sect1><title>Using the CLI</title>
<para>Use the
<command>query</command> command (abbreviated <command>q</command>) with filters to display details about EVMS objects. There are two filters that are especially helpful for navigating
within the command line: <command>list options</command> (abbreviated <command>lo</command>) and <command>extended info</command> (abbreviated <command>ei</command>). </para>
<para>The <command>list options</command> command tells you what can currently be done and what options you
can specify. To use this command, first build a traditional query command starting with the command name <command>query</command>, followed by a colon (<command>:</command>), and then the type of object you
want to query (for example, volumes, objects, plug-ins). Then, you can use filters to narrow
the search to only the area you are interested in. For example, to determine the acceptable
actions at the current time on <filename>lvm/Sample Container/Sample Region</filename>, enter the following command:</para>
<programlisting>query: regions, region=&quot;lvm/Sample Container/Sample Region&quot;, list options</programlisting>
<para>The <command>extended info</command> filter is the equivalent of Display Details in the EVMS GUI and Ncurses interfaces. The command takes the following form: <command>query</command>, followed by a colon (<command>:</command>), the filter (<command>extended info</command>), a comma (<command>,</command>), and the object you want more information about. The command returns a list containing the field names, titles, descriptions and values for each field defined for the object. For example, to obtain details on <filename>lvm/Sample Container/Sample Region</filename>, enter the following command:</para>
<programlisting>query: extended info, &quot;lvm/Sample Container/Sample Region&quot;</programlisting>
<para>Many of the field names that are returned by the <command>extended info</command> filter can be expanded
further by specifying the field name or names at the end of the command, separated
by commas. For example, if you wanted additional information about logical extents, the query would look like the following:</para>
<programlisting>query: extended info, &quot;lvm/Sample Container/Sample Region&quot;, Extents</programlisting>
</sect1>
</chapter>

View File

@ -0,0 +1,292 @@
<chapter id="expandshrink"><title>Expanding and shrinking volumes</title>
<para>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.</para>
<sect1 id="whyexpandshrink"><title>Why expand and shrink volumes?</title>
<para>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.</para>
<para>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.</para>
<para>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.
</para>
<para><table><title>FSIM support for expand and shrink operations</title><tgroup cols="3"><colspec colnum="1" colname="C1"/><colspec colnum="2" colname="C2"/><colspec colnum="3" colname="C3"/>
<thead><row><entry>FSIM type</entry>
<entry>Shrinks</entry>
<entry>Expands</entry>
</row>
</thead>
<tbody><row><entry>JFS</entry><entry>No</entry><entry>Online only</entry></row><row><entry>XFS</entry><entry>No</entry><entry>Online only</entry></row><row><entry>ReiserFS</entry><entry>Offline only</entry><entry>Offline and online</entry></row><row><entry>ext2/3</entry><entry>Offline only</entry><entry>Offline only</entry></row><row><entry>SWAPFS</entry><entry>Offline only</entry><entry>Offline only</entry></row></tbody></tgroup></table></para>
<para>You can perform all of the supported shrink and expand operations with each of the EVMS user interfaces.</para></sect1>
<sect1 id="exshrink"><title>Example: shrink a volume</title>
<para>This section tells how to shrink a compatibility volume by 500 MB.</para>
<blockquote><example><title>Shrink a volume</title>
<para>Shrink the volume
<filename>/dev/evms/lvm/Sample Container/Sample Region</filename>, which
is the compatibility volume that was created in the chapter entitled
&quot;Creating Volumes,&quot; by 500 MB.</para>
</example></blockquote>
<sect2 id="shrinkgui"><title>Using the EVMS GUI</title>
<para>Follow these steps to shrink the volume with the EVMS GUI:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Shrink</guimenuitem><guimenuitem>Volume...</guimenuitem></menuchoice></para></listitem>
<listitem><para>Select <menuchoice>
<guimenu>/dev/evms/lvm/Sample Container/Sample Region</guimenu> </menuchoice>
from the list of volumes.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select <menuchoice><guimenu>/lvm/Sample Container/Sample Region</guimenu></menuchoice> from the list of volumes.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Enter <userinput>500MB</userinput> in the &quot;Shrink by Size&quot; field.</para></listitem>
<listitem><para>Click <guibutton>Shrink</guibutton>.</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to shrink the volume with the GUI
context sensitive menu:</para>
<orderedlist><listitem><para>From the <guimenuitem>Volumes</guimenuitem> tab, right click
<filename>/dev/evms/lvm/Sample Container/Sample Region</filename></para></listitem>
<listitem><para>Click <guimenuitem>Shrink...</guimenuitem></para></listitem>
<listitem><para>Continue the operation beginning with step 3 of the GUI
instructions.</para></listitem>
</orderedlist>
</sect2>
<!-- Ncurses-->
<sect2 id="shrinkncurses"><title>Using Ncurses</title>
<para>Follow these steps to shrink a volume with Ncurses:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Shrink</guimenuitem>
<guimenuitem>Volume</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select
<guimenuitem>/dev/evms/lvm/Sample Container/Sample Region</guimenuitem> from the
list of volumes.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select
<guimenuitem>lvm/Sample Container/Sample Region</guimenuitem> from the
shrink point selection list.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Scroll down using the <keycap>down</keycap> arrow until
<guimenuitem>Shrink by Size</guimenuitem> is highlighted.
</para></listitem>
<listitem><para>Press <keycap>spacebar</keycap>.
</para></listitem>
<listitem><para>Press <keycap>Enter</keycap>.
</para></listitem>
<listitem><para>At the &quot;::&quot; prompt enter <userinput>500MB</userinput>.
</para></listitem>
<listitem><para>Press <keycap>Enter</keycap>.
</para></listitem>
<listitem><para>Activate <guibutton>Shrink</guibutton>.
</para></listitem>
</orderedlist>
</para>
<para>
Alternatively, you can perform some of the steps to shrink the volume with the
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the Volumes view, press <keycap>Enter</keycap> on <filename>/dev/evms/lvm/Sample Container/Sample Region</filename>.</para>
</listitem>
<listitem><para>Activate the <guimenuitem>Shrink</guimenuitem> menu item.</para>
</listitem>
<listitem><para>Continue the operation beginning with step 3 of the Ncurses instructions.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="shrinkcli"><title>Using the CLI</title>
<para>The <command>shrink</command> command takes a shrink point followed by an optional name
value pair or an optional shrink object. To find the shrink point, use the <command>query</command> command with the shrink points filter on the object or volume you plan to shrink. For example:</para>
<programlisting>query: shrink points, &quot;/dev/evms/lvm/Sample Container/Sample Region&quot;</programlisting>
<para>Use a list options filter on the object of the shrink point to determine the name-value pair to use, as follows:</para>
<programlisting>query: objects, object=&quot;lvm/Sample Container/Sample Region&quot;, list options</programlisting>
<para>With the option information that is returned, you can construct the command, as follows:</para>
<programlisting>shrink: &quot;lvm/Sample Container/Sample Region&quot;, remove_size=500MB</programlisting>
</sect2>
</sect1>
<sect1 id="mkfs"><title>Example: expand a volume</title>
<para>This section tells how to expand a volume a compatibility volume by 500 MB.</para>
<blockquote><example><title>Expand a volume</title>
<para>Expand the volume <filename>/dev/evms/lvm/Sample Container/Sample Region</filename>, which is the compatibility volume that was created in the chapter entitled &quot;Creating Volumes,&quot; by 500 MB.
</para></example></blockquote>
<sect2 id="expandgui"><title>Using the EVMS GUI</title>
<para>Follow these steps to expand the volume with the EVMS GUI:
<orderedlist>
<listitem><para>Select
<menuchoice><guimenu>Actions</guimenu><guimenuitem>Expand</guimenuitem>
<guimenuitem>Volume...</guimenuitem></menuchoice>
</para></listitem>
<listitem><para>Select
<menuchoice><guimenu>/dev/evms/lvm/Sample Container/Sample Region</guimenu></menuchoice>
from the list of volumes.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select <menuchoice><guimenu>lvm/Sample Container/Sample Region</guimenu></menuchoice> from the list as the expand point.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Enter <userinput>500MB</userinput> in the &quot;Additional Size&quot; field.</para></listitem>
<listitem><para>Click <guibutton>Expand.</guibutton></para></listitem></orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to expand the volume with the GUI
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the <guimenuitem>Volumes</guimenuitem> tab, right click
<filename>/dev/evms/lvm/Sample Container/Sample Region</filename>.</para></listitem>
<listitem><para>Click <guimenuitem>Expand...</guimenuitem></para></listitem>
<listitem><para>Continue the operation to expand the volume beginning with step 3
of the GUI instructions.</para></listitem>
</orderedlist>
</sect2>
<!-- Ncurses-->
<sect2 id="expandncurses"><title>Using Ncurses</title>
<para>Follow these steps to expand a volume with Ncurses:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>Expand</guimenuitem><guimenuitem>Volume</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select
<guimenuitem>/dev/evms/lvm/Sample Container/Sample Region</guimenuitem> from the
list of volumes.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select <guimenuitem>lvm/Sample Container/Sample Region</guimenuitem> from
the list of expand points.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Press <keycap>spacebar</keycap> on the <guimenuitem>Additional Size</guimenuitem> field.
</para></listitem>
<listitem><para>At the &quot;::&quot; prompt enter <userinput>500MB</userinput>.
</para></listitem>
<listitem><para>Press <keycap>Enter</keycap>.
</para></listitem>
<listitem><para>Activate <guibutton>Expand</guibutton>.
</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to shrink the volume with the
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the Volumes view, press <keycap>Enter</keycap> on /<guimenuitem>dev/evms/lvm/Sample Container/Sample Region</guimenuitem>.</para>
</listitem>
<listitem><para>Activate the <guimenuitem>Expand</guimenuitem> menu item.</para>
</listitem>
<listitem><para>Continue the operation beginning with step 3 of the Ncurses instructions.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="expandcli"><title>Using the CLI</title>
<para>The <command>expand</command> command takes an expand point followed by an optional name
value pair and an expandable object. To find the expand point, use the <command>query</command> command with the Expand Points filter on the object or volume you plan to expand. For example:</para>
<programlisting>query: expand points, &quot;/dev/evms/lvm/Sample Container/Sample Region&quot;</programlisting>
<para>Use a list options filter on the object of the expand point to determine the name-value pair to use, as follows:</para>
<programlisting>query: objects, object=&quot;lvm/Sample Container/Sample Region&quot;, list options</programlisting><para>The free space in your container is the container name plus <filename>/Freespace</filename>.</para>
<para>With the option information that is returned, you can construct the command, as follows:</para>
<programlisting>expand: &quot;lvm/Sample Container/Sample Region&quot;, add_size=500MB,
&quot;lvm/Sample Container/Freespace&quot;</programlisting>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,68 @@
<appendix id=""><title></title>
<para>
</para>
<para>
</para>
<sect1 id=""><title>Creating JFS file systems</title>
<para>
</para>
<para>
</para>
<variablelist>
<varlistentry><term>size</term>
<listitem>
<para>The device they are found on.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id=""><title>Checking JFS file systems</title>
<para>
</para>
</sect1>
<sect1 id=""><title>Removing JFS file systems</title>
<para>
<variablelist>
<varlistentry><term>size</term>
<listitem>
<para>The device they are found on.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect1>
<sect1 id=""><title>Expanding JFS file systems</title>
<para>
</para>
</sect1>
<sect1 id=""><title>Shrinking JFS file systems</title>
<para>
</para>
</sect1>
</appendix>

View File

@ -0,0 +1,326 @@
<chapter id="evmsfsimops"><title>FSIMs and file system operations</title>
<para>This chapter discusses the five File System Interface Modules (FSIMs) shipped with EVMS, and then provides examples of adding file systems and coordinating file system checks with the FSIMs.</para>
<sect1 id="FSIMsuppevms"><title>The FSIMs supported by EVMS</title>
<para>EVMS currently ships with five FSIMs. These file system modules allow EVMS to interact with file system utilities such as <command>mkfs</command> and <command>fsck</command>. Additionally, the FSIMs ensure that EVMS safely performs operations, such as expanding and shrinking file systems, by coordinating these actions with the file system. </para>
<para>You can invoke operations such as <command>mkfs</command> and <command>fsck</command> through the various EVMS user interfaces. Any actions you initiate through an FSIM are not committed to disk until the changes are saved in the user interface. Later in this chapter we provide examples of creating a new file system and coordinating file system checks through the EVMS GUI, Ncurses, and command-line interfaces.</para>
<para>The FSIMs supported by EVMS are:</para>
<itemizedlist>
<listitem><para>JFS</para></listitem>
<listitem><para>XFS</para></listitem>
<listitem><para>ReiserFS</para></listitem>
<listitem><para>Ext2/3</para></listitem>
<listitem><para>SWAPFS</para></listitem>
</itemizedlist>
<sect2 id="fsimjfs"><title>JFS</title>
<para>
The JFS module supports the IBM journaling file system (JFS).
Current support includes <command>mkfs</command>, <command>unmkfs</command>,
<command>fsck</command>, and online file system expansion.
Support for external logging will be added in a future release of EVMS.
You must
have at least version 1.0.9 of the JFS utilities for your system
to work with this EVMS FSIM. You can download the latest utilities
from the <ulink url="http://oss.software.ibm.com/jfs">JFS for Linux</ulink>
site.
</para>
<para>
For more information on the JFS FSIM, refer to <xref linkend="jfsfsim"/>.
</para>
</sect2>
<sect2 id="fsimxfs"><title>XFS</title>
<para>
The XFS FSIM supports the XFS file system from SGI.
Command support includes <command>mkfs</command>, <command>unmkfs</command>,
<command>fsck</command>, and online expansion. Use version 1.2 or higher, which you can download from <ulink url="ftp://oss.sgi.com/projects/xfs/download">the SGI open source FTP directory.</ulink>
</para>
<para>
For more information on the XFS FSIM, refer to <xref linkend="xfsfsim"/>.
</para>
</sect2>
<sect2 id="fsimreiserfs"><title>ReiserFS</title>
<para>
The ReiserFS module supports the ReiserFS journaling file system.
This module supports <command>mkfs</command>, <command>unmkfs</command>, <command>fsck</command>, online and offline
expansion and offline shrinkage. You need version 3.x.1a or higher
of the ReiserFS utilities for use with the EVMS FSIM modules. You can download
the ReiserFS utilities from <ulink url="http://www.namesys.com">The Naming
System Venture (Namesys) </ulink> web site.
</para>
<para>
For more information on the ReiserFS FSIM, refer to <xref linkend="reiserfsim"/>.
</para>
</sect2>
<sect2 id="fsimext23"><title>Ext2/3</title>
<para>
The EXT2/EXT3 FSIM supports both the ext2 and ext3 file system formats.
The FSIM supports <command>mkfs</command>, <command>unmkfs</command>,
<command>fsck</command>, and offline shrinkage and expansion.
</para>
<para>
For more information on the Ext2/3 FSIM, refer to <xref linkend="ext23fsim"/>.
</para>
</sect2>
<sect2 id="fsimswapfs"><title>SWAPFS</title>
<para>
The SWAPFS FSIM supports Linux swap devices. The FSIM lets you create
and delete swap devices, and supports <command>mkfs</command>,
<command>unmkfs</command>, shrinkage and expansion.
Currently, you are responsible for issuing the
<command>swapon</command> and <command>swapoff</command> commands either in
the startup scripts or manually.
You can resize swap device with the SWAPFS FSIM as long as the device is
not in use.
</para>
</sect2>
</sect1>
<sect1 id="fsimmkfs"><title>Example: add a file system to a volume</title>
<para>After you have made an EVMS or compatibility volume, add a file system to the volume before mounting it. You can add a file system to a volume through the EVMS interface of your choice.</para>
<blockquote><example><title>Add a JFS File System to a Volume</title>
<para>This example creates a new JFS file system, named <filename>jfs_vol</filename>, on volume <filename>/dev/evms/my_vol</filename>.
</para></example></blockquote>
<sect2 id="fsimmkfsgui"><title>Using the EVMS GUI</title>
<para>Follow these steps to create a JFS file system with the EVMS GUI:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>File Systems</guimenuitem>
<guimenuitem>Make</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select <menuchoice><guimenu>JFS File System Interface Module</guimenu></menuchoice>.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select <menuchoice><guimenu>/dev/evms/my_vol</guimenu></menuchoice>.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Type <userinput>jfs_vol</userinput> in the "Volume Label"
field. Customize any other options you are interested in.
</para></listitem>
<listitem><para>Click <guibutton>Make</guibutton>.
</para></listitem>
<listitem><para>The operation is completed when you save.</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to create a file system with the GUI
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the <guimenuitem>Volumes</guimenuitem> tab, right click
<filename>/dev/evms/my_vol</filename>.</para></listitem>
<listitem><para>Click <guimenuitem>Make Filesystem...</guimenuitem></para></listitem>
<listitem><para>Continue creating the file system beginning with step 2 of the
GUI instructions. You can skip steps 4 and 5 of the GUI instructions.</para></listitem>
</orderedlist>
</sect2>
<!-- Ncurses-->
<sect2 id="fsimmkfsncurses"><title>Using Ncurses</title>
<para>Follow these steps to create a JFS file system with Ncurses:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu><guimenuitem>File Systems</guimenuitem><guimenuitem>Make</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select JFS File System Interface Module.</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Select <filename>/dev/evms/my_vol</filename>.</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.</para></listitem>
<listitem><para>Scroll down using the <keycap>down</keycap> arrow until
<guimenuitem>Volume Label</guimenuitem> is highlighted.
</para></listitem>
<listitem><para>Press <keycap>Spacebar</keycap>.
</para></listitem>
<listitem><para>At the &quot;::&quot; prompt enter <userinput>jfs_vol</userinput>.
</para></listitem>
<listitem><para>Press <keycap>Enter</keycap>.
</para></listitem>
<listitem><para>Activate <guibutton>Make</guibutton>.</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to create a file system with the
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the Volumes view, press <keycap>Enter</keycap> on
<filename>/dev/evms/my_vol</filename>.</para>
</listitem>
<listitem><para>Activate the <guimenuitem>Make Filesystem</guimenuitem> menu item.</para>
</listitem>
<listitem><para>Continue creating the file system beginning with step 2 of the
Ncurses instructions.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="fsimmkfscli"><title>Using the CLI</title>
<para>Use the
<command>mkfs</command> command to create the new file system.
The arguments to <command>mkfs</command> include the FSIM type (in our example, JFS), followed
by any option pairs, and then the volume name. The command to accomplish
this is:</para>
<programlisting>mkfs: JFS={vollabel=jfs_vol}, /dev/evms/my_vol</programlisting>
<para>The command is completed upon saving.</para>
<para>If you are interested in other options that <command>mkfs</command> can
use, look at the results of the following query:</para>
<programlisting>query: plugins, plugin=JFS, list options</programlisting>
</sect2>
</sect1>
<sect1 id="fsimmkfsaex"><title>Example: check a file system</title>
<para>You can also coordinate file system checks from the EVMS user interfaces.</para>
<blockquote><example><title>Check a JFS File System</title>
<para>This example shows how to perform a file system check on a JFS file system, named <filename>jfs_vol</filename>, on volume <filename>/dev/evms/my_vol</filename>, with verbose output.
</para></example></blockquote>
<sect2 id="FSIMmkfsgui"><title>Using the EVMS GUI</title>
<para>Follow these steps to check a JFS file system with the EVMS GUI:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>File Systems</guimenuitem>
<guimenuitem>Check/Repair</guimenuitem></menuchoice>.
</para></listitem>
<listitem><para>Select <menuchoice><guimenu>/dev/evms/my_vol</guimenu></menuchoice>.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Click the <keycap>Yes</keycap> button by <guimenu>Verbose Output</guimenu>.
Customize any other options you are interested in.
</para></listitem>
<listitem><para>Click <guibutton>Check</guibutton>.
</para></listitem>
<listitem><para>The operation is completed when you save.</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to check a file system with the GUI context sensitive menu:</para>
<orderedlist>
<listitem><para>From the <guimenuitem>Volumes</guimenuitem> tab, right click
<filename>/dev/evms/my_vol</filename>.</para></listitem>
<listitem><para>Click <filename>Check/Repair File System...</filename>
</para></listitem>
<listitem><para>Continue checking the file system beginning with step 3 of the
GUI instructions.</para></listitem>
</orderedlist>
</sect2>
<!-- Ncurses-->
<sect2 id="fsimfsckncurses"><title>Using Ncurses</title>
<para>Follow these steps to check a JFS file system with Ncurses:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Actions</guimenu>
<guimenuitem>File System</guimenuitem><guimenuitem>Check/Repair</guimenuitem></menuchoice>
</para></listitem>
<listitem><para>Select
<filename> /dev/evms/my_vol</filename>.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Scroll down using the <keycap>down</keycap> arrow until
<guimenuitem>Vebose Output</guimenuitem> is highlighted.
</para></listitem>
<listitem><para>Press <keycap>Spacebar</keycap> to change <guimenuitem>Verbose Output</guimenuitem> to <keycap>Yes</keycap>.
</para></listitem>
<listitem><para>Activate <guibutton>Check</guibutton>.
</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can perform some of the steps to check a file system with the
context sensitive menu:</para>
<orderedlist>
<listitem><para>From the Volumes view, press <keycap>Enter</keycap> on <filename>/dev/evms/my_vol</filename>.</para>
</listitem>
<listitem><para>Activate the <guimenuitem>Check/Repair File System</guimenuitem> menu item.</para>
</listitem>
<listitem><para>Continue checking the file system beginning with step 3 of the Ncurses
instructions.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="FSIMmkfscli"><title>Using the CLI</title>
<para>The CLI <command>check</command> command takes a volume name and options as
input. The command to check the file system on <filename>/dev/evms/my_vol</filename> is the following:
</para>
<programlisting>check: /dev/evms/my_vol, verbose=TRUE</programlisting>
<para>Currently, a query command for viewing additional options is not available.</para>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,4 @@
<chapter id="plugin"><title>More About the Standard EVMS Plug-Institle>
<para>This appendix provides detailed information about the standard EVMS
plug-ins and describes

View File

@ -0,0 +1,160 @@
<chapter id="plugintasks"><title>Plug-in operations tasks</title>
<para>This chapter discusses plug-in operations tasks and shows how to complete a plug-in task with the EVMS GUI, Ncurses, and CLI interfaces.</para>
<sect1 id="aboutplugintasks"><title>What are plug-in tasks?</title>
<para>Plug-in tasks are functions that are available only within the context of a particular plug-in. These functions are not common to all plug-ins. For example, tasks to add spare disks to a RAID array make sense only in the context of the MD plug-in, and tasks to reset a snapshot make sense only in the context of the Snapshot plug-in.</para>
</sect1>
<sect1 id="pluginexample"><title>Example: complete a plug-in operations task</title>
<para> This section shows how to complete a plug-in operations task with the EVMS GUI, Ncurses, and CLI interfaces.</para>
<blockquote><example><title>Add a spare disk to a compatibility volume made from an MDRaid5 region</title>
<para>This example adds disk <filename>sde</filename> as a spare disk onto volume <filename>/dev/evms/md/md0</filename>, which is a compatibility volume that was created from an MDRaid5 region.</para></example></blockquote>
<sect2 id="plugingui"><title>Using the EVMS GUI</title>
<para>Follow these steps to add <filename>sde</filename> to <filename>/dev/evms/md/md0</filename> with the EVMS GUI:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Other</guimenu>
<guimenuitem>Storage Object Tasks...</guimenuitem></menuchoice>
</para></listitem>
<listitem><para>Select <menuchoice><guimenu>md/md0</guimenu></menuchoice>.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select <menuchoice><guimenu>Add spare object</guimenu></menuchoice>.
</para></listitem>
<listitem><para>Click <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select <menuchoice><guimenu>sde</guimenu></menuchoice>.</para></listitem>
<listitem><para>Click <guibutton>Add</guibutton>.
</para></listitem>
<listitem><para>The operation is completed when you save.</para></listitem>
</orderedlist>
</para><para>Alternatively, you could use context-sensitive menus to
complete the task, as follows:
<orderedlist>
<listitem><para>View the region <filename>md/md0</filename>. You can view the region either
by clicking on the small plus sign beside the volume name
(<filename>/dev/evms/md/md0</filename>) on the <menuchoice><guimenu>volumes tab</guimenu></menuchoice>,
or by selecting the <menuchoice><guimenu>regions tab</guimenu></menuchoice>.</para></listitem>
<listitem><para>Right click the region (<filename>md/md0</filename>). A list of acceptable
Actions and Navigational shortcuts displays. The last items on the
list are the tasks that are acceptable at this time.</para></listitem>
<listitem><para>Point to <menuchoice><guimenu>Add spare object</guimenu></menuchoice> and
left click.</para></listitem>
<listitem><para>Select <menuchoice><guimenu>sde</guimenu></menuchoice>.</para></listitem>
<listitem><para>Click <guibutton>Add</guibutton>.</para></listitem></orderedlist></para>
</sect2>
<!-- Ncurses-->
<sect2 id="plugintasksncurses"><title>Using Ncurses</title>
<para>Follow these steps to add <filename>sde</filename> to <filename>/dev/evms/md/md0</filename> with Ncurses:
<orderedlist>
<listitem><para>Select <menuchoice><guimenu>Other</guimenu>
<guimenuitem>Storage Object Tasks</guimenuitem></menuchoice>
</para></listitem>
<listitem><para>Select
<guimenuitem>md/md0</guimenuitem>.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select
<guimenuitem>Add spare object</guimenuitem>.
</para></listitem>
<listitem><para>Activate <guibutton>Next</guibutton>.
</para></listitem>
<listitem><para>Select
<guimenuitem>sde</guimenuitem>.
</para></listitem>
<listitem><para>Activate <guibutton>Add</guibutton>.
</para></listitem>
</orderedlist>
</para>
<para>Alternatively, you can use the context sensitive menu to complete the task:</para>
<orderedlist>
<listitem><para>From the Regions view, press <keycap>Enter</keycap> on <guimenuitem>md/md0</guimenuitem>.</para>
</listitem>
<listitem><para>Activate the <guimenuitem>Add spare object</guimenuitem> menu item.</para>
</listitem>
<listitem><para>Select <guimenuitem>sde</guimenuitem>.</para>
</listitem>
<listitem><para>Activate <guibutton>Add</guibutton>.</para>
</listitem>
</orderedlist>
</sect2>
<!-- CLI-->
<sect2 id="plugincli"><title>Using the CLI</title>
<para>With the EVMS CLI, all plug-in tasks must be
accomplished with the <command>task</command> command. Follow these steps
to add <filename>sde</filename> to <filename>/dev/evms/md/md0</filename>
with the CLI:
<orderedlist>
<listitem><para>The following query command with the list
options filter to determines
the acceptable tasks for a particular object and the name-value
pairs it supports. The command returns information about which
plug-in tasks are available at the current time and provides
the information necessary for you to complete the command.
</para>
<programlisting>query: objects, object=md/md0, list options</programlisting>
</listitem>
<listitem><para>The command takes the name of the task
(returned from the previous query), the object to operate on
(in this case, md/md0), any required options (none in this case)
and, if necessary, another object to be manipulated
(in our example, <filename>sde</filename>, which is the spare disk
we want to add):
<programlisting>task: addspare, md/md0, sde</programlisting>
The command is completed upon saving.</para>
</listitem>
</orderedlist></para>
</sect2>
</sect1>
</chapter>