Manual Page Result
0
Command: vol_pattern | Section: 4 | Source: Digital UNIX | File: vol_pattern.4.gz
vol_pattern(4) Kernel Interfaces Manual vol_pattern(4)
NAME
vol_pattern - Logical Storage Manager (LSM) disk group search specifi-
cations
DESCRIPTION
The vol_pattern search expression language can be used in volprint and
voledit, and with some Logical Storage Manager support library func-
tions, to locate Logical Storage Manager configuration records with
particular characteristics. Searches are limited to operation on one
disk group at a time. In the current release, search expressions are
limited to volume, plex, and subdisk recods. Search expressions cannot
be applied to disk group, disk media, or disk access records.
Search patterns provide an expression-based language for specifying
record attributes. In simple cases, patterns can be specified that
match records whose fields have specific values. In more complex
cases, records can be matched based on attributes of associated
records.
Search patterns are expressions that do not have side effects (for ex-
ample, variables cannot be set or changed). Expressions evaluate ei-
ther to true or false. If evaluation of an expression within the con-
text of a configuration record yields a value of true, then the expres-
sion matches the record; otherwise the expression does not match the
record.
The search pattern language does not have operators that cause changes
to be made, and does not have a concept of local variables that can be
set and used within or between expressions.
Types of Expressions
Expressions in the pattern language are similar to expressions in
awk(1). Expressions can have the following types for constants, vari-
ables, and subexpressions: A boolean variable or expression is either
true or false. Numbers and strings can be used as truth values if the
context requires a boolean value. For a number, zero implies false and
nonzero implies true. For a string, an empty string implies false and
a nonempty string implies true. A string is a literal string in quotes
or a character array field from a configuration record. Strings can be
implicitly promoted to boolean, but are never promoted to other types.
For example, a string-valued field in a record that contains only dig-
its cannot be compared with a number. String literals are described
later. A number is an integer quantity. The maximum size for a number
is the largest size that may be used for values in configuration
records. In the reference porting base for the Logical Storage Man-
ager, these numbers are 32 bit signed numbers.
Numbers can be specified in decimal, octal, or hexadecimal with
a suffix to indicate the unit of the number when it indicates an
object length or offset. Hexadecimal numbers begin with 0x, oc-
tal numbers begin with 0; otherwise numbers are in decimal.
When used as a length, numbers with no suffix are taken as sec-
tors.
Defined suffix characters are: b for 512-byte blocks, s for sec-
tors (typically 512 bytes), k for kilobytes, m for megabytes,
and g for gigabytes. Suffix characters also can be specified in
upper case.
Length numbers are actually defined in terms of sectors. As a
result, on a system with 512 byte sectors, 1k is the same as 2.
Thus, the expression:
nassoc=1k
tests for a record with 2 associated records, rather than 1024
associated records. An enumeration field is a number that rep-
resents one of the values for a field that has symbolic names.
The vol_pattern expression grammar handles enumeration values
exactly like numbers. Enumerations are usually only useful for
comparing compatible enumeration field and enumeration con-
stants. For example, the enumeration field pl_layout enumera-
tion field is a number whose possible values are represented by
the symbols CONCAT and STRIPE. A regular expression is a value,
much like a regular expression in awk or ed, that can be used to
specify a pattern for matching strings. Regular expressions can
only be used in the context of the boolean ~ and !~ operators.
Each time a transaction is issued against a disk group configu-
ration, a 64-bit configuration sequence number is increased.
When a configuration records is created or changed in a transac-
tion, the record is stamped with the configuration sequence num-
ber associated with that transaction.
When a record is created, it is given a 64-bit record ID. These
record IDs are never reused within a disk group configuration.
Configuration sequence numbers and record IDs can be specified
as constants of the form number.number, where both numbers are
specified in decimal.
Two higher-level types are also included, which can represent
multiple values of the same base type. These higher-level types
are: A set is a multi-valued variable (an array). Sets are nor-
mally used within the right-hand expression for the any and in
operators. Reference to a set expression yields all of the cur-
rently valid members of the set, of which there may be none. A
list is a set of expressions and sets within parenthesis that
are separated by commas. List expressions can only be used for
the right-hand expression of the in operator.
Expression Grammar
A pattern is an expression with the following components and operators,
in increasing order of precedence. Groups of operators described to-
gether have the same precedence. This is a conditional expression.
Expression expr1 is evaluated as a boolean value. If it has a truth
value of true, then the value for the conditional expression is the
value of expr2, otherwise the value for the conditional expression is
the value of expr3. The logical or operator. expr1 and expr2 are
evaluated as boolean expressions. If either expr1 or expr2 have a
truth value of true, the expression is true; otherwise, the value of
the expression is false. The logical and operator. expr1 and expr2
are evaluated as boolean expressions. If both expr1 and expr2 have a
truth value of true, the expression is true; otherwise, the value of
the expression is false. The expression expr is evaluated as a boolean
expression for all combinations of elements for all sets within expr
that represent sets. If any of these combinations yields a truth value
of true, then the value of the any expression is true; otherwise, the
value is false.
For example, pl_sd is a set defining the names of subdisk
records that are associated with a plex. The following expres-
sion searches for plex records that have an associated subdisk
on disk disk01: any pl_sd.sd_disk=""disk01"" Each name in the
pl_sd_name set is referenced as a subdisk and checked to see if
that subdisk is on disk disk01. The expression is true if it is
true for any subdisk. Expression expr is evaluated, and the re-
sulting value is compared to all of the values in list. If any
of the values in list match expr, then the value of the in ex-
pression is true; otherwise, the value is false. The list can
either be a list of expressions within parentheses that are sep-
arated by commas, or it can be a single expression. If any of
the expressions in list represent sets, then the comparison is
made against all combinations of values in that set.
Type promotions are not performed on the expressions in list, or
on expr. Types for all these expression*Os must match exactly.
For example, the following expression searches for plexes that
have either a regular subdisk or a subdisk on disk disk01:
""disk01"" in (pl_sd.sd_disk,pl_log_sd.sd_disk)
The binary ~ and !~ operators are used to match string values
against a regular expression. The value of expr must be a
string. For the ~ operator, if the value of expr matches the
regular expression regexp, then the value for the match expres-
sion is true; otherwise the value is false. For the !~ opera-
tor, if expr matches regexp the result is false; otherwise the
result is true.
The / character in the regular expression must be escaped with \
if it does not occur within a character range.
For example, to search for subdisks that are defined on a parti-
tion of any device, use the following expressions:
Thesethexpressions/[compare string, number, sequence number,
record ID, or boolean values. If either expr1 or expr2 is a
boolean value, then the other is promoted to a boolean as well.
For the = operator, if the two values are equal then the result
is true; otherwise, the result is false. For the != operator,
if the two values are equal, then the result is false; other-
wise, the result is true.
For consistency with awk(1) and many other languages, == is al-
These aexpressionsfcompare=theemagnitudes of numbers or sequence
numbers. They cannot be applied to any other types of expres-
These. expressions addaorosubtract two numbers, yielding another
Theserexpressions multiply, divide, or take the modulo of two
Thebeunaryie(plngoperator napplied to any expression yields the
value of that expression. The unary - operator negates the
value of a number-valued expression expr. expr is evaluated as
a boolean expression. If its value is true, then the value for
the ! expression is false; otherwise, the value for the ! ex-
pression is true. expr is evaluated as a string expression.
Its value is used as the name of a record in the disk group con-
figuration. If the record exists, and if that record contains a
field named field-name, then the value of this expression is the
value in that field within the referenced record. If the record
does not exist, or if the record does not contain a field named
field-name, then the behavior is context-dependent.
If this occurs within the context of an any or 4in operator,
then the next combination of values for the right-hand side of
the any or in operator is evaluated. If this occurs within the
context of an && or || operator, then the left or right-hand ex-
pression of that operator yields false, whichever side the . op-
erator occurs on. The innermost any, in, &&, or || operator de-
termines the context. If no such context exists, then the re-
sult of the entire search pattern is that the record being
tested does not match the pattern.
The effect of this short-circuiting behavior is that an expres-
sion which is found not to make sense because a record does not
exist, or does not contain a specific field, will cause that ex-
pression to be false. The effect is similar to implicit as-
serts, which are described later in this section under field
name. Parentheses can be used to override precedence rules. A
string, number, sequence number, or record ID literal, as de-
fined in the section Types of Expressions. An assert is a spe-
cial type of variable name that is true within the context of a
specific type of record. Outside of that context, an assert
causes the expression that it is in to be false. The scope of
an assert is the right or left-hand side of the smallest expres-
sion within a || or && operator. If an assert does not occur
within a || or && operator, then the search pattern does not
match the record being evaluated. The names that specify as-
serts are vol, plex and sd which specify volume, plex and sub-
disk records, respectively. There is a set of symbolic con-
stants that can be specified in search patterns. For example,
true and false are the two truth values. Also, if a field
within a record has a specific set of symbolic values, then
these symbolic values are available as numeric constants. See
the section titled Constants. There is a small set of global
variables that can be referenced in search patterns. Such vari-
ables can be used within any context. See the section titled
Global Variables. Referencing the name of a field in a configu-
ration record yields the value of that field within the configu-
ration record being evaluated.
Not all field names are defined for all record types. If a
field name is referenced that is not valid in the context of the
record type, then the smallest expression on either side of a &&
or || operator becomes false. This is an implicit assert. For
example, the following expression matches only volume records
because the v_kstate field is only defined for volume records:
v_kstate!=V_ENABLED
Some fields in a record only make sense if another field con-
tains a specific value. For example, the pl_st_width field in
plex records is not defined unless the value of the pl_layout
field is PL_STRIPE. These cases are treated as implicit as-
serts.
Constants
The names of constants that are recognized within search patterns are:
Constants representing boolean true. Constants representing boolean
false. The enumeration constants that represent values for the
v_read_pol field in volume records. The v_current_read_pol field can
be set to ROUND or PREFER. These constants can also be specified with
a prefix of V_ to match the enumeration values in the include file
sys/vol.h. The enumeration constants that represent values for the
v_kstate field in volume and plex records. These constants can also be
specified with a prefix of V_ or PL_. FAIL_DET_PL, DET_VOL,
FAIL_DET_VOL, GEN_DET, GEN_DET_SPARSE, GEN_FAIL, GEN_DET2"
The enumeration constants that represent values for the v_r_all,
v_r_some, v_w_all, and v_w_some fields in volume records. These
constants can also be specified with a prefix of V_. The enu-
meration constants that represent values for the v_log_type
field in volume records. These enumeration constants can also
be specified with a prefix of V_PFLAG_ to match the enumeration
values in the include file sys/vol.h. The enumeration constants
that represent values for the pl_layout field in plex records.
These constants can also be specified with a prefix of PL_. The
enumeration constants that represent values for the pl_iomode
field in plex records. These enumeration constants can also be
specified with a prefix of PL_TFLAG_ to match the values in the
include file sys/vol.h. The value for a device number field in-
dicating that the device number is undefined.
Global Variables
The configurationlsequencecnumberuofdthetdisksgroup configuration. The
number of fields in a tutil or putil arrays in a volume, plex, or sub-
disk structure. This is always 3, but it is treated as a global vari-
able anyway.
Generic Fields
Some fields can be found in all types of configuration records. These
fields can be referenced without a v_, pl_, or sd_ suffix, and do not
generate implicit asserts. These fields can be used either to name
fields in the record being evaluated, or as a field name reference for
the .1 operator.
A generic field name can be specified with a prefix of v_, pl_, or sd_
to indicate that implicit asserts should be used and that the field re-
quires a context of a volume, plex, or subdisk record, respectively.
Currently, use of a prefix for a generic field name is ignored for the
right-hand side of a . operator.
Ahseteofgstringserepresentingnallsofrthe temporary utility fields. A
string representing the first temporary utility field. A string repre-
senting the second temporary utility field. A string representing the
third temporary utility field. A set of strings representing all of
the permanent utility fields. A string containing the first permanent
utility field. A string containing the second permanent utility field.
A string containing the third permanent utility field. A string con-
taining the record name. A string containing the comment field. A
number representing the length of the volume, plex or subdisk. A
boolean value indicating whether the volume, plex, or subdisk is open.
A subdisk is considered open of the volume or plex device for the sub-
disk is open. A plex is considered open only if the plex device is
open. A volume is considered open if the volume or one of its plex de-
vices is open. The record ID of the record being evaluated. The disk
group configuration sequence number corresponding to the transaction
that created or that last modified the record. A boolean value indi-
cating whether the record is locked in the current transaction of the
caller. This variable is not useful when used with volprint or
voledit. It is useful for C programs only.
Special fields exist that do not obey the prefix convention, but which
apply to more than one type of record. These are: This is the name of
a field to which a record is associated. In the context of a plex or
subdisk record, assoc yields the name of the volume or plex to which
the record is associated. If the record is not associated, assoc
yields an empty string. Use of assoc is not appropriate in the context
of a volume record. This causes an implicit assert when applied to a
volume. This is the set of associated record names. In the context of
a volume or plex record, this yields the names of the associated plexes
and subdisks, of which there may be none. This is not appropriate in
the context of a subdisk record. This causes an implicit assert when
applied to a subdisk. This is the number of records in the aslist set.
This causes an implicit assert when applied to a subdisk.
Volume Record Fields
Ahbooleansvalue indicatingcwhetherotheorecordeisrlocked:within the cur-
rent transaction of the caller. A boolean value indicating whether the
volume is locked against I/O activity within the current transaction of
the caller. An enumeration field for the kernel-enabled state for the
volume. This can have one of the following values: DISABLED, DETACHED,
or ENABLED. These are numbers that represent the exception policies
for the volume. Each of these fields can have one of the following ex-
ception policy values: NO_OP, FAIL_OP, DET_PL, FAIL_DET_PL, DET_VOL,
FAIL_DET_VOL, GEN_DET, GEN_DET_SPARSE, GEN_FAIL, or GEN_DET2. A number
representing a sequence number for the last error that occurred on the
volume. The sequence number of the last transaction that detached the
volume due to a failure of some kind. This is also set when all copies
of the block-change-log for the volume are detached by I/O failures. A
string containing the usage type of the volume. A string containing
the file system type for the volume, as set by the administrator. A
string representing the usage-type-dependent state for the volume. A
boolean value indicating whether the writeback-on-read-error policy is
turned on for the volume. This policy is set by default and can be
turned off or back on using voledit. See voledit(8) for more informa-
tion. A boolean value indicating whether volume writes are copied to a
private buffer in the kernel before being written to disk. See
voledit(8) for more information. A boolean value indicating whether
the value of v_writecopy was specified explicitly by the administrator
using volmake or voledit. If v_specify_writecopy is false then the
value for v_writecopy will be derived from the configuration of the
volume: v_writecopy will be turned on if block-change-logging is in op-
eration on the volume, and will be turned off otherwise. A number rep-
resenting the number of plexes associated with the volume. The set of
plex names that are associated with the volume. An enumeration repre-
senting the read policy for the volume. This can be one of the values
ROUND, PREFER, or SELECT. The value SELECT indicates that read policy
will be adjusted to match the configuration of the volume: if there is
one associated striped plex, it will be preferred; otherwise the policy
will be round-robin. An enumeration representing the current read pol-
icy that is in effect for the volume. This is the same as v_read_pol
unless v_read_pol is SELECT, in which case v_current_read_pol matches
the chosen policy. A string containing the preferred plex for the vol-
ume. This is only defined if the value for v_current_read_pol is PRE-
FER. Otherwise, use of this variable causes an implicit assert. The
record ID of the preferred plex. A number representing the minor num-
ber of the volume block and character devices. This is the persistent
device number for the volume. If two volumes on the system have the
same value for v_minor, then one of the volumes will be given a differ-
ent device number, which will be reflected in v_bdev and v_cdev. The
block and character device numbers for the volume. A boolean value in-
dicating whether the volume can use one of the reserved minor numbers
(minor numbers zero through four). The root and swap usage types set
this flag to allow them to grab minor numbers 0 and 1 for the root and
swap volumes. A number representing the user ID for the volume. There
is currently no way to represent a user name in a search pattern. A
number representing the group ID for the volume. There is currently no
way to represent a group name in a search pattern. A number represent-
ing the file permission modes for the volume. There is currently no
way to represent a symbolic mode in a search pattern. A number repre-
senting the length of logs associated with the volume, if any. An enu-
meration representing the logging type for the volume. This can have
one of the following values: LOGUNDEF (no specific type specified),
LOGNONE (no logging), or LOGBLKNO (block-change logging). A boolean
value that is true if logging is enabled for the volume. Logging is
enabled if the volume is enabled, and it has at least one associated,
enabled plex with an enabled, associated log subdisk. Two numbers that
together represent the most significant and least significant long val-
ues for the current log serial number for a volume. The log serial
number, represented as a combined binary integer, is incremented every
time a new log is written for a volume that has logging enabled. A
boolean value indicating that all block-change-log copies for the value
were detached due to I/O failures. A string value that is used by us-
age types to represent options to the volume start utility. See the
usage-type-specific volume(8) reference pages for more information. A
boolean value indicating whether the volume was in use at the time of a
system failure. This will not be set if the volume was not written
prior to the crash. This flag indicates that plex synchronization re-
covery is required for the volume. v_active is normally cleared during
system startup when the volume is started. A boolean value indicating
that read-writeback plex synchronization recovery has been started for
the volume. This is normally set when a mirrored volume is started
when the v_active flag was set. A boolean value indicating whether the
read-writeback recovery mode is still enabled in the kernel. This flag
is turned on when v_rwback is turned on, but is cleared by the kernel
when recovery for the volume is complete. A number indicating the off-
set within the volume to where recovery has completed. A read opera-
tion on a volume performs a plex synchronization recovery if the read
is after this point in the volume. A read that occurs at the current
read-writeback offset advances the offset to the end of the read. When
the offset reaches the end of the volume, recovery is complete and
v_krwback is turned off. A number indicating the largest sector size,
in bytes, of any disk associated with the volume.
Plex Record Fields
Ahbooleansvalue thatbisstruefifdtherplexxisecompact.e:A plex is compact
if its entire length is mapped by subdisks, leaving no holes. Note
that the length of a plex is computed as the length to the end of the
last block in the plex address space that is mapped by a subdisk. The
offset to the first unmapped block in the plex. If the plex is com-
pact, this will match the plex length. If the plex is not mapped, this
will be the offset of the first hole in the plex. An enumeration rep-
resenting the I/O mode of the plex. This can have one of the following
values: RO (read-only), WO (write-only), or RW (read-write). A boolean
value that is true if block-change-logging is enabled for the plex. A
boolean value that is true if if one of the subdisks in the plex is de-
fined on a volatile disk. Volatile disks are disks whose contents are
not guaranteed to be preserved across a system reboot. Volatile disks
can be created using the nopriv disk type [see voldisk(8)]. An enumer-
ation for the kernel enabled state for the plex. This can have one of
the values DISABLED, DETACHED or ENABLED. A number representing a se-
quence number for the last error that occurred on the plex. A number
representing the minor number of the plex device. This will be -1 if
the plex is dissociated. A number representing the device number of
the plex device (a character device). This will be NODEV if the plex
is dissociated. A boolean value that is true if the plex is accounted
for in volume error handling. If this is set, then I/O errors on the
plex are ignored if they result from normal volume I/O. The name of
the associated volume. If the plex is not associated, this is an empty
string. A number representing the count of subdisks that are associ-
ated with the plex. A set containing the names of subdisks that are
associated with the plex. A string representing the usage-type-depen-
dent state for the plex. An enumeration representing the subdisk lay-
out policy for the plex. This can be one of the values CONCAT or
STRIPE to represent concatenation or striping, respectively. A number
representing the stripe width for the plex. This is only defined if
the value for the pl_layout field in the plex is STRIPE. Otherwise,
use of this variable causes an implicit assert. A string representing
the name of a subdisk associated with the plex as a log subdisk. This
string is empty if no log subdisk is associated with the plex. A
boolean indicating whether any subdisk in the plex is defined on a re-
moved disk. See voldg(8) for information on removed disks. A boolean
indicating whether any subdisk in the plex is defined on a failed disk.
A failed disk is one where the underlying physical disk could not be
found, or was detached by an I/O failure. A boolean indicating whether
a disk replacement or a temporary failure caused the plex to become
disabled and out-of-date with respect to the volume contents. Such
plexes require recovery either from other plexes in the volume or from
a backup of the volume. A boolean indicating that the plex was de-
tached by the kernel due to an I/O failure. The stale and kdetach
flags are normally both cleared during a system reboot as part of
starting the volume. The record ID of the volume to which the plex is
associated. This will be 0.0 if the plex is not associated. The
record ID of the log subdisk for the plex. This will be 0.0 if the
plex has no log subdisk. The configuration sequence number of the disk
group that was in effect when the plex was last detached or disabled
due to an I/O failure or a disk failure.
Subdisk Record Fields
The namedoftthe diskbmediacrecordfon whichstheesubdiskris defined. The
disk access record underlying the disk media record of the subdisk.
This will be empty if the disk is currently failed or removed. The de-
vice number of the device that the subdisk resides on. This number is
a combination of the major and minor number for the device. This will
be NODEV if the underlying disk is removed or failed. A string con-
taining the path to the device that the subdisk resides on. The name
of the associated plex. If the subdisk is not associated, this is an
empty string. A number representing the offset of the subdisk within
the public region of the disk that the subdisk resides on. A number
representing the offset of the subdisk within the disk partition con-
taining the public region for the disk. This can differ from
sd_dm_offset if the public region of the disk does not begin at the be-
ginning of its partition. A number representing the offset of the sub-
disk within the address space of the plex to which it is associated. A
boolean value that is true if the subdisk is defined on a volatile
disk. The contents of a volatile disk are not guaranteed to be pre-
served across a reboot. Volatile disks can be created using the nopriv
disk type [see voldisk(8)]. A boolean value indicating that this is a
log subdisk for a plex. The record ID of the plex to which the subdisk
is associated. The record ID of the disk media record on which the
subdisk is defined.
EXAMPLES
The following example matches any plex or volume that does not have any
associated subdisks or plexes. Because pl_nsd only applies to plexes,
while v_nplex only applies to volumes, there is no ambiguity concerning
which types of records can be matched by the expression.
pl_nsd = 0 || v_nplex = 0 The following example matches all plexes and
subdisks that have a comment field beginning with the string "Henry ".
For example, this could be a convention describing ownership. (plex ||
sd) && comment ~ /^Henry/ The following example matches all volumes for
which the preferred plex is striped: v_pref_name.pl_layout = STRIPE Be-
cause v_pref_name is only defined for volumes that have v_read_pol set
to PREFER, the preceding expression is equivalent to: vol && v_read_pol
= PREFER && v_pref_name.pl_layout = STRIPE The following expression
matches any volume that contains a plex with a subdisk longer than 100
megabytes: any v_plex.pl_subdisk.sd_len > 100M
If an expression contains a set but does not use the any or in opera-
tor, then an any operator is assumed to surround the expression. Thus,
the preceding example can also be specified as: v_plex.pl_sub-
disk.sd_len > 100M The following example matches any record that was
changed in the most recent set of changes to the disk group: update_tid
= config_tid
Alternatively, to get all records that have been changed since a past
disk group configuration (with a configuration transaction ID of
0.23482), use:
update_tid > 0.23482
RELATED INFORMATION
awk(1), volintro(8), voledit(8), volmake(8), volprint(8).
delim off
vol_pattern(4)