This chapter describes advanced Logical Storage Manager (LSM) system administration using the LSM command line interface. Information is included about how to manipulate subdisks and plexes, as well as information on common LSM administration utilities.
Table 8-1 introduces the commands and utilities discussed in this chapter.
| Command | Description |
voledit
|
Sets and changes various attributes for LSM configuration records that do not depend upon volume usage types. Each invocation can be applied to only one disk group at a time. |
volmake
|
Creates subdisks, plex, and volume records. |
volmend
|
Mends simple problems in configuration records. |
volplex
|
Performs LSM operations on plexes and volume-and-plex combinations.
The
volplex
utility takes several operands. The first operand is a keyword that
determines the specific operation to perform. The remaining operands
specify the configuration objects to which the operation is to be
applied. Each operation can be applied to only one disk group at a
time.
|
volprint
|
Displays information about volumes, plexes, and subdisks. |
volsd
|
Performs LSM operations on subdisks
and on plex-and-subdisk combinations.
The
volsd
utility takes several operands. The first operand is a keyword that
determines the specific operation to perform. The remaining operands
specify the configuration objects to which the operation is to be applied.
Each operation can be applied to only one disk group at a time.
|
LSM volumes are composed of two types of objects, plexes and subdisks. A plex is composed of a single subdisk or a series of subdisks linked together in an address space. A subdisk is a portion of a physical disk and is defined by disk media, offset, and length. Subdisks are low-level building blocks of an LSM configuration. The following sections describe each of the operations that can be performed in relation to subdisks. These subdisk operations are:
The
volsd
utility is used to maintain subdisk-plex associations. The
volsd
utility can associate a subdisk with a plex or disassociate a subdisk
from its associated plex,
to move the contents of a subdisk to another subdisk, to split one subdisk
into two subdisks that occupy the same space as the original, or to join two
contiguous subdisks into one.
Note
Some
volsdoperations can take a considerable amount of time to complete.
For detailed information,
refer to the
volsd(8)
reference page.
The command to create LSM objects is
volmake.
The steps to create a subdisk include specifying the following:
To create a subdisk, use either of the following commands:
#
volmake sd
name disk, offset, len
or
#
volmake sd
name
len=
length
offset=
disk_offset
disk=
lsm_disk
For example, use either of the following command lines to create a
subdisk labeled
disk02-01,
that starts at the beginning of disk
disk02,
and has a length of 8000 blocks:
#
volmake sd disk02-01 disk02,0,8000
or
#
volmake sd disk02-01 len=8000 offset=0 disk=disk02
Note
Commands take sizes in blocks. Adding a suffix changes the unit of measure. A
ksuffix specifies 1024-byte blocks. To preserve (encapsulate) data that exists on the disk, a plex and volume must be created to cover that data.
You can remove subdisks when they are no longer in use or needed. To remove a subdisk, use the following command:
#
voledit rm
subdisk_name
For example, the command line to remove a subdisk labeled
disk02-01
looks like this:
#
voledit rm disk02-01
The
volprint
utility displays information about LSM objects. To display general
information for all subdisks, use the following command:
#
volprint -st
The
-s
option instructs
volprint
to get information about subdisks.
The
-t
option prints a single-line output record that depends on the type of object
being listed.
To display complete information about a particular subdisk, use the following command:
#
volprint -l
subdisk_name
For example, the command line to obtain all database information on a subdisk
labeled
disk02-01
looks like this:
#
volprint -l disk02-01
Associating a subdisk with a plex places the amount of disk space defined by the subdisk at a specific offset within the plex. In all cases, the entire area that the subdisk fills must not be occupied by any portion of another subdisk. There are several different ways that subdisks can be associated with plexes, depending on the overall state of the configuration.
If the system administrator has already created all the subdisks needed for a particular plex, subdisks are associated at plex creation by using a command similar to the following:
#
volmake plex home-1 sd=disk02-01,disk03-00,disk03-01
This command creates a plex
home-1
and associates subdisks
disk02-01,
disk03-00,
and
disk03-01
with the plex
home-1
during the plex creation process. Subdisks are associated in order starting
at offset 0. Using a command like this one eliminates the need to specify the
multiple commands necessary to create the plex and then associate each of
the subdisks with that plex. In the example, the subdisks are
associated with the plex in the order they are listed (after the
sd=);
the disk space defined as
disk02-01
will be first, the disk space of
disk03-00
is second, and
disk03-01
is third.
This method of associating subdisks is convenient during the initial
configuration. Subdisks can also be associated with a plex that already
exists.
any subdisks that are already associated with the plex, unless
the
-l
option is specified with the
volsd
command.
The
-l
option provides a way to associate subdisks at a specific offset
within the plex.
The
-l
option is needed in a case where a system administrator has
created a sparse plex for a particular volume, and wants
to make this plex complete.
To make the plex complete, it is necessary to create a subdisk of
exactly the size needed to fill the hole in the sparse plex, and
then associate the subdisk with the plex by specifying the offset
of the beginning of the hole in the plex.
Use the following command to accomplish this task:
#
volsd -l
offset
assoc
sparse_plex_name exact_size_subdisk
Note
The subdisk must be exactly the right size because LSM does not allow for the space defined by two subdisks to overlap within a single plex.
Logging subdisks are one-block long subdisks that are defined for and added to a plex that is to become part of a volume using block-change logging. Block-change logging is enabled for a volume when the volume has at least two active plexes that include a logging subdisk. Logging subdisks are ignored as far as the usual plex policies are concerned, and are only used to hold the block-change log (described in Section 13.1.4).
Because block-change logs are one block in length, only a limited number of recent changes can be kept in the log. Older entries are removed from the log as newer I/O changes take place and are added to the log. Because all I/O must follow a log write, if no unused or completed log entries are available for use in the log block, then further I/O is delayed until some of the pending I/O completes and releases log space. This delay could adversely affect system performance.
Note
Only one logging subdisk can be associated with a plex. Because this subdisk is frequently written, care should be taken to position it on a disk that is not heavily used. Placing a logging subdisk on a heavily-used disk can result in severe degradation of system performance.
To add a logging subdisk to a plex, use the following command:
#
volsd aslog
plex subdisk
For example, the command line to associate a subdisk labeled
disk02-01
with a plex labeled
vol01-02
(which is already associated with volume
vol01)
looks like this:
#
volsd aslog vol01-02 disk02-01
To break an established relationship between a subdisk and the plex to which it belongs, the subdisk is disassociated from the plex. A subdisk is disassociated when the subdisk is to be removed or used in another plex. To disassociate a subdisk, use the following command:
#
volsd dis
subdisk_name
To disassociate a subdisk labeled
disk02-01
from the plex with which it is currently associated,
use the following command:
#
volsd dis disk02-01
Subdisks can also be removed with the command:
#
volsd -orm dis
subdisk_name
The
voledit
utility changes information related to subdisks. To change information
relating to a subdisk use the following command:
#
voledit set
field=value ... subdisk_name ...
For example, the command line to change the comment field of a subdisk labeled
disk02-01
looks like this:
#
voledit set comment=
"New comment"
disk02-01
The following subdisk fields can be changed using
voledit:
putil
[n]
fields
tutil
[n]
fields
len
field (only if the subdisk is disassociated)
Table 8-2
describes these fields.
| Field | Description |
putil0
|
This utility field is reserved for use by the LSM utilities and is retained after a reboot. |
putil1
|
This utility field is reserved for use by high-level utilities such as
the Visual Administrator interface
(dxlsm)
and the LSM Support Operations
interface
(voldiskadm).
This field is retained after a reboot.
|
putil2
|
This utility field is reserved for use by the system administrator or site-specific applications. This field is retained after a reboot. |
tutil0
|
This utility field is reserved for use by the LSM utilities and is cleared after a reboot. |
tutil1
|
This utility field is reserved for use by high-level utilities such as
dxlsm
and
voldiskadm.
This field is cleared after a reboot.
|
tutil2
|
This utility field is reserved for use by the system administrator or site-specific applications. This field is cleared after a reboot. |
Note
Entering data in the
putil0field prevents the subdisk from being used as part of a plex, if it is not already being so used.
Moving a subdisk copies the disk space contents of a subdisk onto another subdisk. If the subdisk being moved is associated with a plex, then the data stored on the original subdisk is copied to the new subdisk, the old subdisk is disassociated from the plex, and the new subdisk is associated with the plex, at the same offset within the plex as the source subdisk. To move a subdisk, use the following command:
#
volsd mv
old_subdisk_name new_subdisk_name
For the subdisk move operation to perform correctly, the following conditions must be met:
Splitting a subdisk divides an existing subdisk into two subdisks. The
-s
option is required to specify the size of the first of the two subdisks that
will be created. To split a subdisk, use the following command:
#
volsd -s
size
split
sd newsd newsd2
In this example,
sd
is the name of the original subdisk,
newsd
is the name of the first of the two subdisks that will be created, and
newsd2
is the name of the second subdisk to be created.
If the existing subdisk is associated with a plex before the
split
operation, upon completion of the split, both of the resulting subdisks will
be associated with the same plex.
Joining a subdisk combines two or more existing subdisks into one subdisk. To join subdisks, the subdisks must be contiguous on the same disk; if the selected subdisks are associated, they must be associated with the same plex, and be contiguous in that plex.
To join a subdisk, use the following command:
#
volsd join
subdisk1 subdisk2 new_subdisk
Plexes are logical groupings of subdisks that create an area of disk space independent of any physical disk size. Replication of disk data can be accomplished by defining multiple plexes that will be attached to one volume. The replication provided by multiple plexes prevents data loss in the event of a single-point disk-subsystem failure. Multiple plexes also provide increased data integrity and reliability.
Plex operations include:
The
volplex
utility performs LSM operations on plex or on volume-and-plex
combinations.
The first operand is a keyword that determines the specific operation to
perform. The remaining operands specify the configuration objects to which the
operation is to be applied. The
volplex
utility can attach a plex to a volume and detach a plex from a volume. A
detached plex does not participate in I/O activity to the volume, but
remains associated with the volume. The semantics of a detached plex
are somewhat different dependent upon usage type, but in the case of
the standard usage types,
fsgen
and
gen,
a detached plex is reattached when a volume is next started.
Another capability provided by
volplex
is disassociation of a plex from the volume with which it is
associated. When a plex is disassociated, its relationship to the
volume is completely broken. At that point, the plex is available for
other uses and can be associated with a different volume. This
functionality is useful as part of a backup procedure.
Additionally,
volplex
provides options to copy the contents of the specified volume onto all of the
named plexes, moving the contents of one plex onto a new plex, and allows
for other usage-type-dependent operations to be added.
For detailed information about how to use
volplex,
refer to the
volplex(8)
reference page.
Plexes are created by identifying subdisks and
associating them to the plex that you want to create.
The
volmake
command creates LSM objects. To create a plex from existing subdisks, use
the following command:
#
volmake plex
plex_name
sd=
subdisk_name,
...
For example, the command line to create a plex labeled
vol01-02
using two existing subdisks labeled
disk02-01
and
disk02-02
looks like this:
#
volmake plex vol01-02 sd=disk02-01,disk02-02
If a volume is mirrored, backup can be performed on that volume by taking one of the volume's plexes off line for a period of time. This eliminates the need for extra disk space for the purpose of backup only. However, it also eliminates redundancy of the volume for the duration of the time needed for the backup.
Perform a backup of a mirrored volume on an active system as follows:
vol-01,
for this example):
#
volplex dis vol-01
This operation should only take a few seconds. It will leave the
device
/dev/plex/vol-01
available as an image of the volume frozen at the time of the
disassociation.
#
volmake -Ufsgen vol vtmp plex=vol-01
#
volume start vtmp
#
fsck -p /dev/rvol/vtmp
#
dump 0 /dev/rvol/vtmp
#
volplex dis vol-01
#
volplex att
volume-name
vol-01
A plex becomes a participating plex for a volume by associating the plex with the volume. To associate a plex with an existing volume, use the following command:
#
volplex att
volume_name plex_name
For example, the command line to associate a plex labeled
vol01-02
with volume labeled
vol01
looks like this:
#
volplex att vol01 vol01-02
Alternately, if the volume has not been created, a plex (or multiple plexes) can be associated with the volume to be created as part of the volume create command:
#
volmake -U
usetype
vol
vol_name
plex=
plex_name1, plex_name2
...
For example, the command line to create a mirrored,
fsgen-type
volume
labeled
home,
and associate two existing plexes labeled
home-1
and
home-2
to the volume
home
looks like this:
#
volmake -Ufsgen vol home plex=home-1,home-2
When a plex is no longer needed, it can be removed. Examples of operations that require plexes to be removed are:
Caution
To save the data on a plex that is to be removed, you need to know the original configuration of that plex. Several parameters from that configuration, such as stripe width and subdisk ordering, are critical to the construction of a new plex which would contain the same data. Before such a plex is removed, its configuration should be recorded.
A plex can be disassociated from a volume and removed with the following command:
#
volplex -o rm dis
plex_name
To disassociate and remove a plex labeled
vol01-02
use the following command:
#
volplex -o rm dis vol01-02
This removes the plex
vol01-02
and all associated subdisks.
Note
Without the
-orm, thevolplexcommand disassociates the plex and subdisks, but does not remove them. To remove the disassociated plex and subdisks, use the following command:
# voledit -r rmplex_name
Because the
-roption ofvoleditremoves multiple objects. Exercise caution when using it.
Listing plexes helps identify free plexes that can be used for building
volumes. Using the
volprint
utility with the plex
(-p)
option lists information about all plexes; the
-t
option prints a single line of information about the plex. To list free
plexes, use the following command:
#
volprint -pt
To display detailed information about all plexes, use the following command:
#
volprint -lp
To display detailed information about a specific plex, use the following command:
#
volprint -l
plex_name
The
comment
field and the
putil
and
tutil
fields are used by the utilities after plex creation. The
putil
fields attributes are maintained after a reboot; the
tutil
fields are temporary and are not retained after a reboot.
Both
putil
and
tutil
have three uses and are numbered according to those uses.
These fields can be modified as needed.
LSM uses the utility fields marked
putil0
and
tutil0;
other products use those
marked
putil1
and
tutil1.
Those marked
putil2
and
tutil2
are user fields.
Table 8-2
describes the uses for the
putil
and
tutil
fields.
To change plex attributes, use the following command:
#
voledit set
field
=
value
...
plex_name
...
The following steps demonstrate how you can use the
voledit
command to modify comment fields:
comment
field that identifies what
the plex
(vol01-02)
is used for to
my_plex.
u
in
tutil2
to indicate that the subdisk is in use.
admin
in the
putil2
field:
#
voledit set comment="my plex" tutil2="u" putil2="admin" \
vol01-02
To prevent a particular plex from being associated with a volume,
set the
putil0
field to a non-null string as specified in the following command:
#
voledit set putil0="DO-NOT-USE" vol01-02
Once a volume has been created and placed on line (ENABLED), LSM provides mechanisms by which plexes can be temporarily disconnected from the volume. This is useful, for example, when the hardware on which a plex resides needs repair or when a volume has been left unstartable and a source plex for the volume revive operation must be chosen manually.
Resolving a disk or system failure includes taking a volume off line and
attaching and detaching its plexes. The two commands used to accomplish disk
failure resolution are
volmend
and
volplex.
To take a plex OFFLINE so that repair or maintenance can be performed on the physical disk containing that plexes' subdisks, use the following command:
#
volmend off
plex_name
...
If a disk drive suffered a head crash, the system administrator should put all
plexes that have associated subdisks represented on the affected drive
OFFLINE. For example, if plexes
vol01-02
and
vol02p1
had subdisks on a drive to be repaired, use the following command:
#
volmend off vol01-02 vol02p1
This command places
vol01-02
and
vol02-01
in the OFFLINE state, and they remain in that state until explicitly changed.
To temporarily detach one plex in a mirrored volume, use the following command:
#
volplex det
plex_name
...
For example, the command line to temporarily detach a plex labeled
vol01-02
and place it in maintenance mode looks like this:
#
volplex det vol01-02
This command temporarily detaches the plex, but maintains the association
between the plex and its volume; however, the plex will not be used for
I/O. A plex detached with the preceding command will be recovered when
the system is rebooted.
The plex state is set to STALE, so that if a
volume
start
command is run on the appropriate volume (for example, after a system reboot), the
plex will be revived and made ACTIVE.
When the plex is ready to return as an active part of its volume, follow this procedure:
#
volume start vol_name.
If it is unstartable, set one of the plexes to CLEAN as follows:
#
volmend plex clean
plex_name,
Then start the volume.
#
volplex att
volume_name plex_name
...
As with returning an OFFLINE plex to ACTIVE, this command starts a revive operation of the plexes stated, and when each revive operation is completed, sets the plex state to ACTIVE.
When the disk has been repaired or replaced and is again ready for use, the plexes must be put back on line (plex state set to ACTIVE). The following steps describe putting plexes back on line.
#
volplex att
volume_name plex_name
...
For example, the command for a plex labeled
vol01-02
on a volume labeled
vol01
looks like this:
#
volplex att vol01 vol01-02
This starts a revive operation of the plex
vol01-02
and, after the revive operation
is completed, sets the plex utility state to ACTIVE.
#
volmend on
plex_name
For example, the command for a plex labeled
vol01-02
looks like this:
#
volmend on vol01-02
In this case, the state of
vol01-02
is set to STALE, so that when the volume is next started, the data on the
plex will be revived from the other plex, and incorporated into the volume
with its state set to ACTIVE.
If it becomes necessary to manually change the state of a plex,
refer to
Section 14.9.2.
See the
volmake(8)
and
volmend(8)
reference pages for more information about these commands.
Moving a plex copies the data content from the original plex onto a new plex. In order for a move operation to be successful, the following criteria must be met:
The size of the plex has several important implications. If the new
plex
is smaller, or more sparse, than the original plex, an incomplete copy of
the data on the original plex results. If this is the desired action, then
the
-o
force
option is required.
If the new plex is longer, or less sparse, than the original plex, then the data that exists on the original plex will be copied onto the new plex. Then, any area that was not on the original plex, but is represented on the new plex, will be filled from other complete plexes associated with the same volume. If the new plex is longer than the volume itself, then the remaining area of the new plex above the size of the volume will not be initialized.
The command to move data from one plex to another is:
#
volplex mv
original_plex new_plex
This operation copies the contents of a volume onto a specified plex. The volume to be copied must not be enabled. The plex must not be associated with any other volume.
To copy a plex, use the following command:
#
volplex cp
vol_name new_plex
After the copy operation is completed,
new_plex
will not be associated with the specified volume
vol_name.
The plex contains a complete copy of the volume data. The plex that is
being copied should be the same size or larger than the volume, otherwise an
incomplete copy of the data results. For this same reason,
new_plex
also should not be sparse.
The following sections describe LSM utilities that are commonly used to perform system administration and maintenance functions.
The volume configuration daemon
(vold)
is the interface between the LSM utilities and the kernel
volconfig
device driver.
The
volconfig
device is a special device file created by LSM that interacts with
vold
to make LSM configuration changes.
The
voldctl
utility is the interface to
vold.
Some
voldctl
operations involve modifications to the
volboot
file, which indicates the locations of root configuration copies.
The
voldctl
utility is used for the following tasks:
volboot
file, which contains a list of disks containing root configuration databases
For detailed information about how to use
voldctl,
refer to the
voldctl(8)
reference page.
The
voledit
utility has two functions:
In general, LSM objects that are associated are not removable. This means that:
Note
Using the recursive suboption (
-r) to the removal option of thevoleditcommand removes all objects from the specified object downward. In this way, a plex and its associated subdisks, or a volume and its attached plexes and their associated subdisks, can be removed by a single invocation of this command.Because the
-roption ofvoleditremoves multiple objects, exercise caution when using it.
For detailed information about how to use
voledit,
refer to the
voledit(8)
reference page.
The
volmake
utility is used to add a new volume, plex, or subdisk to the set of objects
managed by LSM. The
volmake
command adds a new record for that object to the LSM database. Records
can be created entirely from parameters specified on the command line,
or they can be created using a description file.
If operands are specified, then the first operand is a keyword that determines the kind of object to be created, the second operand is the name given to that object, and additional operands specify attributes for the object. If no operands are specified on the command line, then a description file is used to specify what records to create.
A
description
file
is a file that contains plain text describing the objects to be created
with
volmake.
A description file can contain several commands, and can be edited to perform
a list of
volmake
utility operations. You can create a description file of existing LSM
objects with the
volprint
utility, and then later recreate these LSM objects using the
volmake
utility. The following example shows a sample description file:
#rectyp #name #options sd 3s1-01 dmname=disk03 offset=0 len=20480 sd 4s1-01 dmname=disk04 plex db-dsk layout=STRIPEst_width=16ksd=3s1-01,4s1-01 sd mem1-01 dmname=memdisk01 len=640h comment="Hot spot for dbvol" plex db-mem sd=mem1-01:40320 vol db use_type=genplex=db-dsk,db-mem read_pol=PREFERpref_name=memdbplx comment="Uses mem1 for hot spot in last 5m"
By default, this description file is read from standard input.
However, by using the
-d
option, a file name can be specified.
For detailed information about how to use
volmake,
as well as detailed descriptions and definitions of the object-specific fields
specified with
volmake,
refer to the
volmake(8)
reference page.
The
volmend
utility performs miscellaneous LSM usage-type-specific operations on
volumes, plexes, and subdisks.
These operations are used to:
Use the
volmend
utility primarily to escape from a state that was accidentally
reached. The offline and online functions are also available with
disk-related commands.
For detailed information about how to use
volmend,
refer to the
volmend(8)
reference page.
The
volassist
command provides a convenient, one-step interface to LSM and
is especially useful for basic and commonly used administrative operations.
The
volassist
command automatically finds space for and creates simple volumes or
plexes for existing volumes, resizes volumes, and provides online
backup of volumes.
The
volassist
command uses a set of tunable parameters that you can specify in
defaults files or on the command line. The tunable parameters default
to reasonable values if they are not defined anywhere.
The tunable parameters are specified as follows:
The built-in defaults are used when the value for a particular parameter is not specified elsewhere (on the command line or in a defaults file).
The system-wide defaults file contains default values that may be altered by the system administrator. These values are used for tunable parameters that are not specified on the command line or in the user's defaults file.
The user can create a personal defaults file. If a personal defaults file exists, the values therein are used for tunable parameters that are not specified on the command line. These values override those in the system-wide defaults file.
The values specified on the command line override any values specified internally or in defaults files.
Tunable parameters are specified in the
/etc/defaults/volassist
file, which you must create. The format of the defaults file is a list of
attribute=value pairs separated by new lines.
These
attribute=value pairs are the same as those specified as options on the command line.
The following is a sample
volassist
defaults file:
# LSM Vn.n # volassist defaults file. Use '#' for comments
# layout layout=concat,noncontig,span
# mirroring nmirror=2 mirror=no
# allocation policies align=4k alloc=20m
# striping stripewidth=64k
# logging logtype=none
# volume usage type usetype=fsgen
For detailed information about how to use
volassist,
refer to the
volassist(8)
reference page.