1998-09-16 05:57:36 +00:00
|
|
|
|
.\" Hey, Emacs, edit this file in -*- nroff-fill -*- mode
|
|
|
|
|
.\"
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.Dd 15 January 1999
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Dt vinum 8
|
|
|
|
|
.Os FreeBSD
|
|
|
|
|
.Sh NAME
|
|
|
|
|
.Nm vinum
|
|
|
|
|
.Nd Logical Volume Manager control program
|
|
|
|
|
.Sh SYNOPSIS
|
|
|
|
|
.Nm
|
|
|
|
|
.Op command
|
1998-09-29 10:26:02 +00:00
|
|
|
|
.Op Fl options
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Sh COMMANDS
|
|
|
|
|
.Cd create
|
|
|
|
|
.Ar description-file
|
|
|
|
|
.in +1i
|
|
|
|
|
Create a volume as described in
|
|
|
|
|
.Ar description-file
|
|
|
|
|
.in
|
|
|
|
|
.\" XXX remove this
|
|
|
|
|
.Cd attach Ar plex Ar volume
|
|
|
|
|
.Op Nm rename
|
|
|
|
|
.Cd attach Ar subdisk Ar plex Ar [offset]
|
|
|
|
|
.Op Nm rename
|
|
|
|
|
.in +1i
|
|
|
|
|
Attach a plex to a volume, or a subdisk to a plex.
|
|
|
|
|
.in
|
|
|
|
|
.\" XXX remove this
|
|
|
|
|
.Cd debug
|
|
|
|
|
.in +1i
|
|
|
|
|
Cause the volume manager to enter the kernel debugger.
|
|
|
|
|
.in
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.Cd debug
|
|
|
|
|
.Ar flags
|
|
|
|
|
.in +1i
|
|
|
|
|
Set debugging flags.
|
|
|
|
|
.in
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Cd detach
|
|
|
|
|
.Op Ar plex | subdisk
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.in +1i
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Detach a plex or subdisk from the volume or plex to which it is attached.
|
|
|
|
|
.in
|
|
|
|
|
.Cd info
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.in +1i
|
|
|
|
|
List information about volume manager state.
|
|
|
|
|
.in
|
|
|
|
|
.Cd init
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.in +1i
|
|
|
|
|
.\" XXX
|
|
|
|
|
Initialize a plex by writing zeroes to all its subdisks.
|
|
|
|
|
.in
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.Cd label
|
|
|
|
|
.Ar volume
|
|
|
|
|
.in +1i
|
|
|
|
|
Create a volume label
|
|
|
|
|
.in
|
|
|
|
|
.Cd list
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op volume | plex | subdisk
|
|
|
|
|
.in +1i
|
|
|
|
|
List information about specified objects
|
|
|
|
|
.in
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.Cd l
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op volume | plex | subdisk
|
|
|
|
|
.in +1i
|
1998-12-27 03:47:15 +00:00
|
|
|
|
List information about specified objects (alternative to
|
|
|
|
|
.Cd list
|
|
|
|
|
command)
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.in
|
|
|
|
|
.Cd ld
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op volume
|
|
|
|
|
.in +1i
|
|
|
|
|
List information about drives
|
|
|
|
|
.in
|
|
|
|
|
.Cd ls
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op subdisk
|
|
|
|
|
.in +1i
|
|
|
|
|
List information about subdisks
|
|
|
|
|
.in
|
|
|
|
|
.Cd lp
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op plex
|
|
|
|
|
.in +1i
|
|
|
|
|
List information about plexes
|
|
|
|
|
.in
|
|
|
|
|
.Cd lv
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op volume
|
|
|
|
|
.in +1i
|
|
|
|
|
List information about volumes
|
|
|
|
|
.in
|
1999-03-02 07:02:29 +00:00
|
|
|
|
.Cd printconfig
|
|
|
|
|
.Pa file
|
|
|
|
|
.in +1i
|
|
|
|
|
Write a copy of the current configuration to
|
|
|
|
|
.Pa file .
|
|
|
|
|
.in
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.Cd makedev
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.in +1i
|
1999-01-09 03:00:01 +00:00
|
|
|
|
Remake the device nodes in
|
|
|
|
|
.Ar /dev/vinum .
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.in
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.Cd quit
|
|
|
|
|
.in +1i
|
|
|
|
|
Exit the
|
|
|
|
|
.Nm
|
|
|
|
|
program when running in interactive mode. Normally this would be done by
|
|
|
|
|
entering the
|
|
|
|
|
.Ar EOF
|
|
|
|
|
character.
|
|
|
|
|
.in
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Cd read
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.Ar disk Op disk...
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.in +1i
|
|
|
|
|
Read the
|
|
|
|
|
.Nm
|
1999-01-21 00:45:11 +00:00
|
|
|
|
configuration from the specified disks.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.in
|
|
|
|
|
.Cd rename Op Fl r
|
|
|
|
|
.Ar [ drive | subdisk | plex | volume ]
|
|
|
|
|
.Ar newname
|
|
|
|
|
.in +1i
|
|
|
|
|
Change the name of the specified object.
|
1999-01-09 03:00:01 +00:00
|
|
|
|
.ig
|
|
|
|
|
XXX
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.in
|
|
|
|
|
.Cd replace
|
|
|
|
|
.Ar [ subdisk | plex ]
|
|
|
|
|
.Ar newobject
|
|
|
|
|
.in +1i
|
|
|
|
|
Replace the object with an identical other object. XXX not implemented yet.
|
1999-01-09 03:00:01 +00:00
|
|
|
|
..
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.in
|
|
|
|
|
.Cd resetconfig
|
|
|
|
|
.in +1i
|
|
|
|
|
Reset the complete
|
|
|
|
|
.Nm
|
|
|
|
|
configuration.
|
|
|
|
|
.in
|
|
|
|
|
.Cd resetstats
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op volume | plex | subdisk
|
|
|
|
|
.in +1i
|
|
|
|
|
Reset statistisc counters for the specified objects, or for all objects if none
|
|
|
|
|
are specified.
|
|
|
|
|
.in
|
|
|
|
|
.Cd rm
|
|
|
|
|
.Op Fl f
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Ar volume | plex | subdisk
|
|
|
|
|
.in +1i
|
|
|
|
|
Remove an object
|
|
|
|
|
.in
|
1999-03-02 07:02:29 +00:00
|
|
|
|
.Cd saveconfig
|
|
|
|
|
.in +1i
|
|
|
|
|
Save
|
|
|
|
|
.Nm
|
|
|
|
|
configuration to disk.
|
|
|
|
|
.in
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.ig
|
|
|
|
|
XXX
|
|
|
|
|
.Cd set
|
|
|
|
|
.Op Fl f
|
|
|
|
|
.Ar state
|
|
|
|
|
.Ar volume | plex | subdisk | disk
|
|
|
|
|
.in +1i
|
|
|
|
|
Set the state of the object to \fIstate\fP\|
|
|
|
|
|
.in
|
|
|
|
|
..
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.Cd setdaemon
|
|
|
|
|
.Op value
|
|
|
|
|
.in +1i
|
|
|
|
|
Set d<>mon configuration.
|
|
|
|
|
.in
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Cd start
|
|
|
|
|
.Op volume | plex | subdisk
|
|
|
|
|
.in +1i
|
|
|
|
|
Allow the system to access the objects
|
|
|
|
|
.in
|
|
|
|
|
.Cd stop
|
|
|
|
|
.Op Fl f
|
|
|
|
|
.Op volume | plex | subdisk
|
|
|
|
|
.in +1i
|
1999-03-02 07:02:29 +00:00
|
|
|
|
Terminate access to the objects, or stop
|
|
|
|
|
.Nm
|
|
|
|
|
if no parameters are specified.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.in
|
|
|
|
|
.Sh DESCRIPTION
|
|
|
|
|
.Nm
|
|
|
|
|
is a utility program to communicate with the \fBVinum\fP\| logical volume
|
|
|
|
|
manager. See
|
|
|
|
|
.Xr vinum 4
|
|
|
|
|
for more information about the volume manager.
|
|
|
|
|
.Xr vinum 8
|
|
|
|
|
is designed either for interactive use, when started without a command, or to
|
|
|
|
|
execute a single command if the command is supplied as arguments to
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.Nm vinum .
|
|
|
|
|
In interactive mode,
|
|
|
|
|
.Nm
|
|
|
|
|
maintains a command line history.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Ss OPTIONS
|
1998-09-29 10:26:02 +00:00
|
|
|
|
.Nm
|
|
|
|
|
commands may optionally be followed by an option. Any of the following options
|
|
|
|
|
may be specified with any command, but in some cases they do not make any
|
|
|
|
|
difference: cases, the options are ignored. For example, the
|
|
|
|
|
.Nm stop
|
|
|
|
|
command ignores the
|
|
|
|
|
.Fl v
|
|
|
|
|
and
|
|
|
|
|
.Fl V
|
|
|
|
|
options.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Bl -hang
|
|
|
|
|
.It Cd -v
|
|
|
|
|
The
|
|
|
|
|
.Nm -v
|
1998-09-29 10:26:02 +00:00
|
|
|
|
option can be used with any command to request more detailed information.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Cd -V
|
|
|
|
|
The
|
|
|
|
|
.Nm -V
|
|
|
|
|
option can be used with any command to request more detailed information than
|
|
|
|
|
the
|
|
|
|
|
.Nm -v
|
1998-09-29 10:26:02 +00:00
|
|
|
|
option provides.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Cd -f
|
|
|
|
|
The
|
|
|
|
|
.Nm -f
|
|
|
|
|
option overrides safety checks. Use with extreme care. This option is for
|
|
|
|
|
emergency use only. For example, the command
|
|
|
|
|
.Bd -unfilled -offset indent
|
|
|
|
|
rm -f myvolume
|
|
|
|
|
.Ed
|
|
|
|
|
.Pp
|
|
|
|
|
removes
|
|
|
|
|
.Nm myvolume
|
1998-09-29 10:26:02 +00:00
|
|
|
|
even if it is open. Any subsequent access to the volume will almost certainly
|
|
|
|
|
cause a panic.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Cd -r
|
|
|
|
|
The
|
|
|
|
|
.Nm -r
|
|
|
|
|
(``recursive'') option is used by the list commands to display information not
|
|
|
|
|
only about the specified objects, but also about subordinate objects. For
|
|
|
|
|
example, in conjnction with the
|
|
|
|
|
.Nm lv
|
|
|
|
|
command, the
|
|
|
|
|
.Nm -r
|
|
|
|
|
option will also show information about the plexes and subdisks belonging to the
|
|
|
|
|
volume.
|
|
|
|
|
.It Cd -s
|
|
|
|
|
The
|
|
|
|
|
.Nm -s
|
|
|
|
|
option is used by the list commands to display statistical information.
|
|
|
|
|
.El
|
|
|
|
|
.Pp
|
|
|
|
|
.Ss COMMANDS IN DETAIL
|
|
|
|
|
.Pp
|
|
|
|
|
.Nm
|
|
|
|
|
commands perform the following functions:
|
|
|
|
|
.Bl -hang
|
|
|
|
|
.It Nm attach Ar plex Ar volume
|
|
|
|
|
.Op Nm rename
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.if n .sp -1v
|
|
|
|
|
.if t .sp -.6v
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm attach Ar subdisk Ar plex Ar [offset]
|
|
|
|
|
.Op Nm rename
|
|
|
|
|
.sp
|
|
|
|
|
.Nm
|
|
|
|
|
.Ar attach
|
|
|
|
|
inserts the specified plex or subdisk in a volume or plex. In the case of a
|
|
|
|
|
subdisk, an offset in the plex may be specified. If it is not, the subdisk will
|
|
|
|
|
be attached at the first possible location. After attaching a plex to a
|
|
|
|
|
non-empty volume,
|
|
|
|
|
.Nm
|
|
|
|
|
reintegrates the plex.
|
|
|
|
|
.Pp
|
|
|
|
|
If the keyword
|
|
|
|
|
.Nm rename
|
|
|
|
|
is specified,
|
|
|
|
|
.Nm
|
|
|
|
|
renames the object (and in the case of a plex, any subordinate subdisks) to fit
|
|
|
|
|
in with the default
|
|
|
|
|
.Nm
|
|
|
|
|
naming convention.
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.Pp
|
|
|
|
|
A number of considerations apply to attaching subdisks:
|
|
|
|
|
.Bl -bullet
|
|
|
|
|
.It
|
|
|
|
|
Subdisks can normally only be attached to concatenated plexes.
|
|
|
|
|
.It
|
|
|
|
|
If a striped or RAID-5 plex is missing a subdisk (for example after drive
|
|
|
|
|
failure), it may be replaced by a subdisk of the same size only. No other
|
|
|
|
|
attachment of subdisks is currently allowed.
|
|
|
|
|
.It
|
|
|
|
|
For concatenated plexes, the
|
|
|
|
|
.Ar offset
|
|
|
|
|
parameter specifies the offset in blocks from the beginning of the plex. For
|
|
|
|
|
striped and RAID-5 plexes, it specifies the offset of the first block of the
|
|
|
|
|
subdisk: in other words, the offset is the numerical position of the subdisk
|
|
|
|
|
multiplied by the stripe size. For example, in a plex of block size 256k, the
|
|
|
|
|
first subdisk will have offset 0, the second offset 256k, the third 512k, etc.
|
|
|
|
|
This calculation ignores parity blocks in RAID-5 plexes.
|
|
|
|
|
.El
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm create Ar description-file
|
|
|
|
|
.sp
|
|
|
|
|
.Nm
|
|
|
|
|
.Ar create
|
|
|
|
|
is used to create any object. In view of the relatively complicated
|
|
|
|
|
relationship and the potential dangers involved in creating a
|
|
|
|
|
.Nm
|
|
|
|
|
object, there is no interactive interface to this function. See the section
|
|
|
|
|
CONFIGURATION FILE below for more information.
|
1999-03-02 07:02:29 +00:00
|
|
|
|
.Pp
|
|
|
|
|
Note that the
|
|
|
|
|
.Nm
|
|
|
|
|
.Ar create
|
|
|
|
|
function is additive: if you run it multiple times, you will create multiple
|
|
|
|
|
copies of all unnamed objects.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm debug
|
|
|
|
|
.Pp
|
|
|
|
|
.Nm
|
|
|
|
|
.Ar debug
|
|
|
|
|
is used to enter the remote kernel debugger. It is only activated if
|
|
|
|
|
.Nm
|
1999-01-21 00:45:11 +00:00
|
|
|
|
is built with the
|
|
|
|
|
.Ar VINUMDEBUG
|
|
|
|
|
option. This option will stop the execution of the operating system until the
|
|
|
|
|
kernel debugger is exited. If remote debugging is set and there is no remote
|
1998-09-16 05:57:36 +00:00
|
|
|
|
connection for a kernel debugger, it will be necessary to reset the system and
|
|
|
|
|
reboot in order to leave the debugger.
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.It Nm debug
|
|
|
|
|
.Ar flags
|
|
|
|
|
.Pp
|
|
|
|
|
Set a bit mask of internal debugging flags. These will change without warning
|
|
|
|
|
as the product matures; to be certain, read the header file
|
|
|
|
|
.Pa sys/dev/vinumvar.h .
|
|
|
|
|
The bit mask is composed of the following values:
|
|
|
|
|
.Bl -hang
|
|
|
|
|
.It DEBUG_ADDRESSES (1)
|
|
|
|
|
.br
|
|
|
|
|
Show buffer information during requests
|
|
|
|
|
.It DEBUG_NUMOUTPUT (2)
|
|
|
|
|
.br
|
|
|
|
|
Show the value of
|
|
|
|
|
.Dv vp->v_numoutput.
|
|
|
|
|
.It DEBUG_RESID (4)
|
|
|
|
|
.br
|
|
|
|
|
Go into debugger in
|
|
|
|
|
.Fd complete_rqe.
|
|
|
|
|
.It DEBUG_LASTREQS (8)
|
|
|
|
|
.br
|
|
|
|
|
Keep a circular buffer of last requests.
|
|
|
|
|
.It DEBUG_REVIVECONFLICT (16)
|
|
|
|
|
.br
|
|
|
|
|
Print info about revive conflicts.
|
1999-03-13 07:45:52 +00:00
|
|
|
|
.It DEBUG_EOFINFO (32)
|
|
|
|
|
.br
|
|
|
|
|
Print information about internal state when returning an EOF on a striped plex.
|
|
|
|
|
.It DEBUG_MEMFREE (64)
|
|
|
|
|
.br
|
|
|
|
|
Maintain a circular list of the last memory areas freed by the memory allocator.
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.It DEBUG_REMOTEGDB (256)
|
|
|
|
|
.br
|
|
|
|
|
Go into remote
|
|
|
|
|
.Ic gdb
|
|
|
|
|
when the
|
|
|
|
|
.Nm debug
|
|
|
|
|
command is issued.
|
|
|
|
|
.El
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm detach Op Fl f
|
|
|
|
|
.Ar plex
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.if n .sp -1v
|
|
|
|
|
.if t .sp -.6v
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm detach Op Fl f
|
|
|
|
|
.Ar subdisk
|
|
|
|
|
.sp
|
|
|
|
|
.Nm
|
|
|
|
|
.Ar detach
|
|
|
|
|
removes the specified plex or subdisk from the volume or plex to which it is
|
|
|
|
|
attached. If removing the object would impair the data integrity of the volume,
|
|
|
|
|
the operation will fail unless the
|
|
|
|
|
.Fl f
|
|
|
|
|
option is specified. If the object is named after the object above it (for
|
1998-09-29 10:26:02 +00:00
|
|
|
|
example, subdisk vol1.p7.s0 attached to plex vol1.p7), the name will be changed
|
|
|
|
|
by prepending the text ``ex-'' (for example, ex-vol1.p7.s0). If necessary, the
|
|
|
|
|
name will be truncated in the process.
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.Pp
|
|
|
|
|
.Nm detach
|
|
|
|
|
does not reduce the number of subdisks in a striped or RAID-5 plex. Instead,
|
|
|
|
|
the subdisk is marked absent, and can later be replaced with the
|
|
|
|
|
.Nm attach
|
|
|
|
|
command.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm info
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.br
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Nm
|
|
|
|
|
.Ar info
|
|
|
|
|
displays information about
|
|
|
|
|
.Nm
|
|
|
|
|
memory usage. This is intended primarily for debugging. With the
|
|
|
|
|
.Fl v
|
|
|
|
|
option, it will give detailed information about the memory areas in use.
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.Pp
|
|
|
|
|
With the
|
|
|
|
|
.Fl V
|
|
|
|
|
option,
|
|
|
|
|
.Ar info
|
|
|
|
|
displays information about the last up to 64 I/O requests handled by the
|
|
|
|
|
.Nm
|
|
|
|
|
driver. This information is only collected if debug flag 8 is set. The format
|
|
|
|
|
looks like:
|
|
|
|
|
.Pp
|
|
|
|
|
.Bd -literal
|
|
|
|
|
vinum -> info -V
|
|
|
|
|
Flags: 0x200 1 opens
|
|
|
|
|
Total of 38 blocks malloced, total memory: 16460
|
|
|
|
|
Maximum allocs: 56, malloc table at 0xf0f72dbc
|
|
|
|
|
|
|
|
|
|
Time Event Buf Dev Offset Bytes SD SDoff Doffset Goffset
|
|
|
|
|
|
|
|
|
|
14:40:00.637758 1VS Write 0xf2361f40 0x5b03 0x10 16384
|
|
|
|
|
14:40:00.639280 2LR Write 0xf2361f40 0x5b03 0x10 16384
|
|
|
|
|
14:40:00.639294 3RQ Read 0xf2361f40 0x427 0x104109 8192 19 0 0 0
|
|
|
|
|
14:40:00.639455 3RQ Read 0xf2361f40 0x417 0xd2109 8192 17 0 0 0
|
|
|
|
|
14:40:00.639529 3RQ Read 0xf2361f40 0x40f 0x6e109 8192 16 0 0 0
|
|
|
|
|
14:40:00.652978 4DN Read 0xf2361f40 0x427 0x104109 8192 19 0 0 0
|
|
|
|
|
14:40:00.667040 4DN Read 0xf2361f40 0x40f 0x6e109 8192 16 0 0 0
|
|
|
|
|
14:40:00.668556 4DN Read 0xf2361f40 0x417 0xd2109 8192 17 0 0 0
|
|
|
|
|
14:40:00.669777 6RP Write 0xf2361f40 0x427 0x104109 8192 19 0 0 0
|
|
|
|
|
14:40:00.685547 4DN Write 0xf2361f40 0x427 0x104109 8192 19 0 0 0
|
|
|
|
|
.Ed
|
|
|
|
|
.Pp
|
|
|
|
|
The
|
|
|
|
|
.Ar Buf
|
|
|
|
|
field always contains the address of the user buffer header. This can be used
|
|
|
|
|
to identify the requests associated with a user request, though this is not 100%
|
|
|
|
|
reliable: theoretically two requests in sequence could use the same buffer
|
|
|
|
|
header, though this is not common. The beginning of a request can be identified
|
|
|
|
|
by the event
|
|
|
|
|
.Ar 1VS .
|
|
|
|
|
The example above shows the requests involved in a single user request.
|
|
|
|
|
.Pp
|
|
|
|
|
The
|
|
|
|
|
.Ar Event
|
|
|
|
|
field contains information related to the sequence of events in the request
|
|
|
|
|
chain. The digit
|
|
|
|
|
.Ar 1
|
|
|
|
|
to
|
|
|
|
|
.Ar 6
|
|
|
|
|
indicates the approximate sequence of events, and the two-letter abbreviation is
|
|
|
|
|
a mnemonic for the location
|
|
|
|
|
.Bl -hang
|
|
|
|
|
.It 1VS
|
|
|
|
|
(vinumstrategy) shows information about the user request on entry to
|
|
|
|
|
.Fd vinumstrategy .
|
|
|
|
|
The device number is the
|
|
|
|
|
.Nm
|
|
|
|
|
device, and offset and length are the user parameters. This is always the
|
|
|
|
|
beginning of a request sequence.
|
|
|
|
|
.It 2LR
|
|
|
|
|
(launch_requests) shows the user request just prior to launching the low-level
|
|
|
|
|
.Nm
|
|
|
|
|
requests in the function
|
|
|
|
|
.Fd launch_requests.
|
|
|
|
|
The parameters should be the same as in the
|
|
|
|
|
.Ar 1VS
|
|
|
|
|
information.
|
|
|
|
|
.Pp
|
|
|
|
|
In the following requests,
|
|
|
|
|
.Ar Dev
|
|
|
|
|
is the device number of the associated disk partition,
|
|
|
|
|
.Ar Offset
|
|
|
|
|
is the offset from the beginning of the partition,
|
|
|
|
|
.Ar SD
|
|
|
|
|
is the subdisk index in
|
|
|
|
|
.Dv vinum_conf ,
|
|
|
|
|
.Ar SDoff
|
|
|
|
|
is the offset from the beginning of the subdisk,
|
|
|
|
|
.Ar Doffset
|
|
|
|
|
is the offset of the associated data request, and
|
|
|
|
|
.Ar Goffset
|
|
|
|
|
is the offset of the associated group request, where applicable.
|
|
|
|
|
.It 3RQ
|
|
|
|
|
(request) shows one of possibly several low-level
|
|
|
|
|
.Nm
|
|
|
|
|
requests which are launched to satisfy the high-level request. This information
|
|
|
|
|
is also logged in
|
|
|
|
|
.Fd launch_requests.
|
|
|
|
|
.It 4DN
|
|
|
|
|
(done) is called from
|
|
|
|
|
.Fd complete_rqe,
|
|
|
|
|
showing the completion of a request. This completion should match a request
|
|
|
|
|
launched either at stage
|
|
|
|
|
.Ar 4DN
|
|
|
|
|
from
|
|
|
|
|
.Fd launch_requests,
|
|
|
|
|
or from
|
|
|
|
|
.Fd complete_raid5_write
|
|
|
|
|
at stage
|
|
|
|
|
.Ar 5RD
|
|
|
|
|
or
|
|
|
|
|
.Ar 6RP .
|
|
|
|
|
.It 5RD
|
|
|
|
|
(RAID-5 data) is called from
|
|
|
|
|
.Fd complete_raid5_write
|
|
|
|
|
and represents the data written to a RAID-5 data stripe after calculating
|
|
|
|
|
parity.
|
|
|
|
|
.It 6RP
|
|
|
|
|
(RAID-5 parity) is called from
|
|
|
|
|
.Fd complete_raid5_write
|
|
|
|
|
and represents the data written to a RAID-5 parity stripe after calculating
|
|
|
|
|
parity.
|
|
|
|
|
.El
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.\" XXX
|
|
|
|
|
.It Nm init Ar plex
|
|
|
|
|
.Pp
|
|
|
|
|
.Nm
|
|
|
|
|
.Ar init
|
|
|
|
|
initializes a plex by writing zeroes to all its subdisks. This is the only way
|
|
|
|
|
to ensure consistent data in a plex. You must perform this initialization
|
|
|
|
|
before using a RAID-5 plex. It is also recommended for other new plexes.
|
|
|
|
|
.Pp
|
|
|
|
|
.Nm
|
|
|
|
|
initializes all subdisks of a plex in parallel. Since this operation can take a
|
|
|
|
|
long time, it is performed in the background.
|
|
|
|
|
.Nm
|
|
|
|
|
prints a console message when the initialization is complete.
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.It Nm label
|
|
|
|
|
.Ar volume
|
|
|
|
|
.Pp
|
|
|
|
|
The
|
|
|
|
|
.Nm label
|
|
|
|
|
command writes a
|
|
|
|
|
.Ar ufs
|
|
|
|
|
style volume label on a volume. It is a simple alternative to an appropriate
|
|
|
|
|
call to
|
|
|
|
|
.Ar disklabel .
|
|
|
|
|
This is needed because some
|
|
|
|
|
.Ar ufs
|
|
|
|
|
commands still read the disk to find the label instead of using the correct
|
|
|
|
|
.Ar ioctl
|
|
|
|
|
call to access it.
|
|
|
|
|
.Nm
|
|
|
|
|
maintains a volume label separately from the volume data, so this command is not
|
|
|
|
|
needed for
|
|
|
|
|
.Ar newfs .
|
|
|
|
|
This command is deprecated.
|
|
|
|
|
.Pp
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm list
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op volume | plex | subdisk
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.if n .sp -1v
|
|
|
|
|
.if t .sp -.6v
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm l
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op volume | plex | subdisk
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.if n .sp -1v
|
|
|
|
|
.if t .sp -.6v
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm ld
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op volume
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.if n .sp -1v
|
|
|
|
|
.if t .sp -.6v
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm ls
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op subdisk
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.if n .sp -1v
|
|
|
|
|
.if t .sp -.6v
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm lp
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op plex
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.if n .sp -1v
|
|
|
|
|
.if t .sp -.6v
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm lv
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op Fl s
|
|
|
|
|
.Op Fl v
|
|
|
|
|
.Op Fl V
|
|
|
|
|
.Op volume
|
|
|
|
|
.Pp
|
|
|
|
|
.Ar list
|
|
|
|
|
is used to show information about the specified object. If the argument is
|
|
|
|
|
omitted, information is shown about all objects known to
|
|
|
|
|
.Nm vinum .
|
|
|
|
|
The
|
|
|
|
|
.Ar l
|
|
|
|
|
command is a synonym for
|
|
|
|
|
.Ar list .
|
|
|
|
|
.Pp
|
|
|
|
|
The
|
|
|
|
|
.Fl r
|
|
|
|
|
option relates to volumes and plexes: if specified, it recursively lists
|
|
|
|
|
information for the subdisks and (for a volume) plexes subordinate to the
|
|
|
|
|
objects. The commands
|
|
|
|
|
.Ar lv ,
|
|
|
|
|
.Ar lp ,
|
|
|
|
|
.Ar ls
|
|
|
|
|
and
|
|
|
|
|
.Ar ld
|
|
|
|
|
commands list only volumes, plexes, subdisks and drives respectively. This is
|
|
|
|
|
particularly useful when used without parameters.
|
|
|
|
|
.Pp
|
|
|
|
|
The
|
|
|
|
|
.Fl s
|
|
|
|
|
option causes
|
|
|
|
|
.Nm
|
|
|
|
|
to output device statistics, the
|
|
|
|
|
.Op Fl v
|
|
|
|
|
(verbose) option causes some additional information to be output, and the
|
|
|
|
|
.Op Fl V
|
|
|
|
|
causes considerable additional information to be output.
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.It Nm makedev
|
|
|
|
|
.br
|
1998-09-16 05:57:36 +00:00
|
|
|
|
The
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.Nm makedev
|
|
|
|
|
command removes the directory /dev/vinum and recreates it with device nodes
|
|
|
|
|
which reflect the current configuration. This command is not intended for
|
|
|
|
|
general use, and is provided for emergency use only.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Pp
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.It Nm quit
|
|
|
|
|
Exit the
|
|
|
|
|
.Nm
|
|
|
|
|
program when running in interactive mode. Normally this would be done by
|
|
|
|
|
entering the
|
|
|
|
|
.Ar EOF
|
|
|
|
|
character.
|
1999-03-02 07:02:29 +00:00
|
|
|
|
.It Nm printconfig Pa file
|
|
|
|
|
Write a copy of the current configuration to
|
|
|
|
|
.Pa file
|
|
|
|
|
in a format that can be used to recreate the
|
|
|
|
|
.Nm
|
|
|
|
|
configuration. Unlike the configuration saved on disk, it includes definitions
|
|
|
|
|
of the drives.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm read
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.Ar disk Op disk...
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Pp
|
|
|
|
|
The
|
|
|
|
|
.Nm read
|
1999-01-21 00:45:11 +00:00
|
|
|
|
command scans the specified disks for
|
|
|
|
|
.Nm
|
|
|
|
|
partitions containing previously created configuration information. It reads
|
|
|
|
|
the configuration in order from the most recently updated to least recently
|
1999-02-11 06:14:49 +00:00
|
|
|
|
updated configuration.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Nm
|
1998-12-27 03:47:15 +00:00
|
|
|
|
maintains an up-to-date copy of all configuration information on each disk
|
1999-03-13 07:45:52 +00:00
|
|
|
|
partition. You must specify all of the slices in a configuration as the
|
1998-09-16 05:57:36 +00:00
|
|
|
|
parameter to this command.
|
1999-03-02 07:02:29 +00:00
|
|
|
|
.Pp
|
|
|
|
|
The
|
|
|
|
|
.Nm read
|
|
|
|
|
command is intended to selectively load a
|
|
|
|
|
.Nm
|
|
|
|
|
configuration on a system which has other
|
|
|
|
|
.Nm
|
|
|
|
|
partitions. If you want to start all partitions on the system, it is easier to
|
|
|
|
|
use the
|
|
|
|
|
.Nm start
|
|
|
|
|
command.
|
|
|
|
|
.Pp
|
|
|
|
|
If
|
|
|
|
|
.Nm
|
|
|
|
|
encounters any errors during this command, it will turn off automatic
|
|
|
|
|
configuration update to avoid corrupting the copies on disk. This will also
|
|
|
|
|
happen if the configuration on disk indicates a configuration error (for
|
|
|
|
|
example, subdisks which do not have a valid space specification). You can turn
|
|
|
|
|
the updates on again with the
|
|
|
|
|
.Nm setdaemon
|
|
|
|
|
and
|
|
|
|
|
.Nm saveconfig
|
|
|
|
|
commands. Reset bit 4 of the daemon options mask to re-enable configuration
|
|
|
|
|
saves.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm rename
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Ar [ drive | subdisk | plex | volume ]
|
|
|
|
|
.Ar newname
|
|
|
|
|
.Pp
|
|
|
|
|
Change the name of the specified object. If the
|
|
|
|
|
.Fl r
|
|
|
|
|
option is specified, subordinate objects will be named by the default rules:
|
|
|
|
|
plex names will be formed by appending .p\f(BInumber\fP to the volume name, and
|
|
|
|
|
subdisk names will be formed by appending .s\f(BInumber\fP to the plex name.
|
|
|
|
|
.It Nm replace
|
|
|
|
|
.Ar [ subdisk | plex ]
|
|
|
|
|
.Ar newobject
|
|
|
|
|
.Pp
|
1998-09-29 10:26:02 +00:00
|
|
|
|
Replace the object with an identical other object. This command has not yet
|
|
|
|
|
been implemented.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm resetconfig
|
|
|
|
|
.Pp
|
|
|
|
|
The
|
|
|
|
|
.Nm resetconfig
|
|
|
|
|
command completely obliterates the
|
|
|
|
|
.Nm
|
|
|
|
|
configuration on a system. Use this command only when you want to completely
|
|
|
|
|
delete the configuration.
|
|
|
|
|
.Nm
|
|
|
|
|
will ask for confirmation: you must type in the words NO FUTURE exactly
|
|
|
|
|
as shown:
|
|
|
|
|
.Bd -unfilled -offset indent
|
|
|
|
|
# \f(CBvinum resetconfig\f(CW
|
|
|
|
|
|
|
|
|
|
WARNING! This command will completely wipe out your vinum
|
|
|
|
|
configuration. All data will be lost. If you really want
|
|
|
|
|
to do this, enter the text
|
|
|
|
|
|
|
|
|
|
NO FUTURE
|
|
|
|
|
Enter text -> \f(BINO FUTURE\fP
|
|
|
|
|
Vinum configuration obliterated
|
|
|
|
|
.Ed
|
|
|
|
|
.ft R
|
1999-01-09 03:00:01 +00:00
|
|
|
|
.Pp
|
|
|
|
|
As the message suggests, this is a last-ditch command. Don't use it unless you
|
|
|
|
|
have an existing configuration which you never want to see again.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm resetstats
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Op volume | plex | subdisk
|
|
|
|
|
.Pp
|
|
|
|
|
.Nm
|
|
|
|
|
maintains a number of statistical counters for each object. See the header file
|
|
|
|
|
.Fi vinumvar.h
|
|
|
|
|
for more information.
|
|
|
|
|
.\" XXX put it in here when it's finalized
|
|
|
|
|
Use the
|
|
|
|
|
.Nm resetstats
|
|
|
|
|
command to reset these counters. In conjunction with the
|
|
|
|
|
.Fl r
|
|
|
|
|
option,
|
|
|
|
|
.Nm
|
|
|
|
|
also resets the counters of subordinate objects.
|
|
|
|
|
.It Nm rm
|
|
|
|
|
.Op Fl f
|
|
|
|
|
.Op Fl r
|
|
|
|
|
.Ar volume | plex | subdisk
|
|
|
|
|
.Pp
|
|
|
|
|
.Nm rm
|
|
|
|
|
removes an object from the
|
|
|
|
|
.Nm
|
|
|
|
|
configuration. Once an object has been removed, there is no way to recover it.
|
|
|
|
|
Normally
|
|
|
|
|
.Nm
|
|
|
|
|
performs a large amount of consistency checking before removing an object. The
|
|
|
|
|
.Fl f
|
|
|
|
|
option tells
|
|
|
|
|
.Nm
|
|
|
|
|
to omit this checking and remove the object anyway. Use this option with great
|
|
|
|
|
care: it can result in total loss of data on a volume.
|
|
|
|
|
.Pp
|
|
|
|
|
Normally,
|
|
|
|
|
.Nm
|
|
|
|
|
refuses to remove a volume or plex if it has subordinate plexes or subdisks
|
|
|
|
|
respectively. You can tell
|
|
|
|
|
.Nm
|
|
|
|
|
to remove the object anyway by using the
|
|
|
|
|
.Fl f
|
|
|
|
|
flag, or you can cause
|
|
|
|
|
.Nm
|
|
|
|
|
to remove the subordinate objects as well by using the
|
|
|
|
|
.Fl r
|
|
|
|
|
(recursive) flag. If you remove a volume with the
|
|
|
|
|
.Fl r
|
|
|
|
|
flag, it will remove both the plexes and the subdisks which belong to the
|
|
|
|
|
plexes.
|
1999-03-02 07:02:29 +00:00
|
|
|
|
.It Nm saveconfig
|
|
|
|
|
.Pp
|
|
|
|
|
Save the current configuration to disk. This is primarily a maintenance
|
|
|
|
|
function. For example, if an error occurs on startup, updates will be
|
|
|
|
|
disabled. When you reenable them, the configuration is not automatically saved
|
|
|
|
|
to disk. Use this command to save the configuration.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.ig
|
|
|
|
|
.It Nm set
|
|
|
|
|
.Op Fl f
|
|
|
|
|
.Ar state
|
|
|
|
|
.Ar volume | plex | subdisk | disk
|
|
|
|
|
.Nm set
|
|
|
|
|
sets the state of the specified object to one of the valid states (see OBJECT
|
|
|
|
|
STATES below). Normally
|
|
|
|
|
.Nm
|
|
|
|
|
performs a large amount of consistency checking before making the change. The
|
|
|
|
|
.Fl f
|
|
|
|
|
option tells
|
|
|
|
|
.Nm
|
|
|
|
|
to omit this checking and perform the change anyway. Use this option with great
|
|
|
|
|
care: it can result in total loss of data on a volume.
|
|
|
|
|
.\"XXX
|
|
|
|
|
.Nm This command has not yet been implemented.
|
|
|
|
|
..
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.It Nm setdaemon
|
|
|
|
|
.Op value
|
|
|
|
|
.Pp
|
|
|
|
|
.Nm setdaemon
|
|
|
|
|
sets a variable bitmask for the
|
|
|
|
|
.Nm
|
|
|
|
|
d<EFBFBD>mon. This command is temporary and will be replaced. Currently, the bit mask
|
|
|
|
|
may contain the bits 1 (log every action to syslog) and 4 (don't update
|
|
|
|
|
configuration). Option bit 4 can be useful for error recovery.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm start
|
|
|
|
|
.Op volume | plex | subdisk
|
|
|
|
|
.Pp
|
|
|
|
|
.Nm start
|
1999-01-09 03:00:01 +00:00
|
|
|
|
starts one or more
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Nm
|
1999-02-11 06:14:49 +00:00
|
|
|
|
objects. If no object names are specified,
|
|
|
|
|
.Nm
|
|
|
|
|
scans the disks known to the system for
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Nm
|
1999-02-11 06:14:49 +00:00
|
|
|
|
drives and then reads in the configuration as described under the
|
|
|
|
|
.Nm read
|
1999-03-02 07:02:29 +00:00
|
|
|
|
commands. The
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Nm
|
|
|
|
|
drive contains a header with all information about the data stored on the drive,
|
|
|
|
|
including the names of the other drives which are required in order to represent
|
|
|
|
|
plexes and volumes.
|
1999-02-11 06:14:49 +00:00
|
|
|
|
.Pp
|
1999-03-02 07:02:29 +00:00
|
|
|
|
If
|
|
|
|
|
.Nm
|
|
|
|
|
encounters any errors during this command, it will turn off automatic
|
|
|
|
|
configuration update to avoid corrupting the copies on disk. This will also
|
|
|
|
|
happen if the configuration on disk indicates a configuration error (for
|
|
|
|
|
example, subdisks which do not have a valid space specification). You can turn
|
|
|
|
|
the updates on again with the
|
|
|
|
|
.Nm setdaemon
|
|
|
|
|
and
|
|
|
|
|
.Nm saveconfig
|
|
|
|
|
command. Reset bit 4 of the daemon options mask to re-enable configuration
|
|
|
|
|
saves.
|
|
|
|
|
.Pp
|
1999-02-11 06:14:49 +00:00
|
|
|
|
If object names are specified,
|
|
|
|
|
.Nm
|
|
|
|
|
starts them.
|
|
|
|
|
.Pp
|
|
|
|
|
To start a plex in a multi-plex volume, the data must be copied from another
|
|
|
|
|
plex in the volume. Since this frequently takes a long time, it is done in the
|
|
|
|
|
background.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm stop
|
|
|
|
|
.Op Fl f
|
|
|
|
|
.Op volume | plex | subdisk
|
|
|
|
|
.Pp
|
1999-03-02 07:02:29 +00:00
|
|
|
|
If no parameters are specified,
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Nm stop
|
1999-03-02 07:02:29 +00:00
|
|
|
|
removes the
|
|
|
|
|
.Nm
|
|
|
|
|
kld and stops
|
|
|
|
|
.Xr vinum 8 .
|
|
|
|
|
This can only be done if no objects are active. In particular, the
|
|
|
|
|
.Fl f
|
|
|
|
|
flag does not override this requirement. This command can only work if
|
|
|
|
|
.Nm
|
|
|
|
|
has been loaded as a kld, since it is not possible to unload a statically
|
|
|
|
|
configured driver.
|
|
|
|
|
.Nm
|
|
|
|
|
.Nm stop
|
|
|
|
|
will fail if
|
|
|
|
|
.Nm
|
|
|
|
|
is statically configured.
|
|
|
|
|
.Pp
|
|
|
|
|
If object names are specified,
|
|
|
|
|
.Nm stop
|
|
|
|
|
disables access to the objects. If the objects have subordinate objects, they
|
|
|
|
|
subordinate objects must either already be inactive (stopped or in error), or
|
|
|
|
|
the
|
|
|
|
|
.Fl r
|
|
|
|
|
and
|
|
|
|
|
.Fl f
|
|
|
|
|
flags must be specified. This command does not remove the objects from the
|
|
|
|
|
configuration. They can be accessed again after a
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Nm start
|
|
|
|
|
command.
|
|
|
|
|
.Pp
|
|
|
|
|
By default,
|
|
|
|
|
.Nm
|
1999-03-02 07:02:29 +00:00
|
|
|
|
does not stop active objects. For example, you cannot stop a plex which is
|
|
|
|
|
attached to an active volume, and you cannot stop a volume which is open. The
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Fl f
|
|
|
|
|
option tells
|
|
|
|
|
.Nm
|
|
|
|
|
to omit this checking and remove the object anyway. Use this option with great
|
|
|
|
|
care and understanding: used incorrectly, it can result in serious data
|
|
|
|
|
corruption.
|
|
|
|
|
.El
|
|
|
|
|
.Ss CONFIGURATION FILE
|
|
|
|
|
.Nm
|
|
|
|
|
requires that all parameters to the
|
|
|
|
|
.Nm create
|
|
|
|
|
commands must be in a configuration file. Entries in the configuration file
|
|
|
|
|
define volumes, plexes and subdisks, and may be in free format, except that each
|
|
|
|
|
entry must be on a single line.
|
|
|
|
|
.Pp
|
|
|
|
|
Some configuration file parameters specify a size (lengths, stripe sizes).
|
|
|
|
|
These lengths can be specified as bytes, as sectors of 512 bytes (by appending
|
|
|
|
|
the letter \f(CWb\fR), as kilobytes (by appending the letter \f(CWk\fR), as
|
|
|
|
|
megabytes (by appending the letter \f(CWm\fR) or as gigabytes (by appending the
|
|
|
|
|
letter \f(CWg\fR). These quantities represent the values 2**10, 2**20 and 2**30
|
|
|
|
|
respectively. For example, the value \f(CW16777216\fR bytes can also be written
|
|
|
|
|
as \f(CW16m\fR, \f(CW16384k\fR or \f(CW32768b\fR.
|
|
|
|
|
.Pp
|
|
|
|
|
The configuration file can contain the following entries:
|
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.Bl -hang -width 4n
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.It Nm volume
|
|
|
|
|
.Ar name
|
|
|
|
|
.Op options
|
|
|
|
|
.Pp
|
|
|
|
|
Define a volume with name
|
|
|
|
|
.Ar name .
|
|
|
|
|
.Pp
|
|
|
|
|
Options are:
|
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.Bl -hang -width 18n
|
|
|
|
|
.It Nm plex Ar plexname
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Add the specified plex to the volume. If
|
|
|
|
|
.Ar plexname
|
|
|
|
|
is specified as
|
|
|
|
|
.Ar * ,
|
|
|
|
|
.Nm
|
|
|
|
|
will look for the definition of the plex as the next possible entry in the
|
|
|
|
|
configuration file after the definition of the volume.
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm readpol Ar policy
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Define a
|
|
|
|
|
.Ar read policy
|
|
|
|
|
for the volume.
|
|
|
|
|
.Ar policy
|
|
|
|
|
may be either
|
|
|
|
|
.Nm round
|
|
|
|
|
or
|
|
|
|
|
.Nm prefer Ar plexname .
|
|
|
|
|
.Nm
|
|
|
|
|
satisfies a read request from only one of the plexes. A
|
|
|
|
|
.Ar round
|
|
|
|
|
read policy specifies that each read should be performed from a different plex
|
|
|
|
|
in \fIround-robin\fR\| fashion. A
|
|
|
|
|
.Ar prefer
|
|
|
|
|
read policy reads from the specified plex every time.
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm setupstate
|
1998-09-16 05:57:36 +00:00
|
|
|
|
When creating a multi-plex volume, assume that the contents of all the plexes
|
|
|
|
|
are consistent. This is normally not the case, and correctly you should use the
|
|
|
|
|
.Nm init
|
|
|
|
|
command to first bring them to a consistent state. In the case of striped and
|
|
|
|
|
concatenated plexes, however, it does not normally cause problems to leave them
|
|
|
|
|
inconsistent: when using a volume for a file system or a swap partition, the
|
|
|
|
|
previous contents of the disks are not of interest, so they may be ignored.
|
1998-12-27 03:47:15 +00:00
|
|
|
|
If you want to take this risk, use this keyword. It will only apply to the
|
|
|
|
|
plexes defined immediately after the volume in the configuration file. If you
|
|
|
|
|
add plexes to a volume at a later time, you must integrate them.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Pp
|
|
|
|
|
Note that you \fImust\fP\| use the
|
|
|
|
|
.Nm init
|
|
|
|
|
command with RAID-5 plexes: otherwise extreme data corruption will result if one
|
|
|
|
|
subdisk fails.
|
|
|
|
|
.fi
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.El
|
|
|
|
|
.It Nm plex Op options
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
Define a plex. Unlike a volume, a plex does not need a name. The options may
|
|
|
|
|
be:
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.Bl -hang -width 18n
|
|
|
|
|
.It Nm name Ar plexname
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Specify the name of the plex. Note that you must use the keyword
|
|
|
|
|
.Ar name
|
|
|
|
|
when naming a plex or subdisk.
|
|
|
|
|
.sp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm org Ar organization Op stripesize
|
|
|
|
|
.Pp
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Specify the organization of the plex.
|
|
|
|
|
.Ar organization
|
|
|
|
|
can be one of
|
|
|
|
|
.Ar concat ,
|
|
|
|
|
.Ar striped
|
|
|
|
|
or
|
|
|
|
|
.Ar raid5 .
|
|
|
|
|
For
|
|
|
|
|
.Ar striped
|
|
|
|
|
and
|
|
|
|
|
.Ar raid5
|
|
|
|
|
plexes, the parameter
|
|
|
|
|
.Ar stripesize
|
|
|
|
|
must be specified, while for
|
|
|
|
|
.Ar concat
|
|
|
|
|
it must be omitted. For type
|
|
|
|
|
.Ar striped ,
|
|
|
|
|
it specifies the width of each stripe. For type
|
|
|
|
|
.Ar raid5 ,
|
|
|
|
|
it specifies the size of a group. A group is a portion of a plex which
|
|
|
|
|
stores the parity bits all in the same subdisk. It must be a factor of the plex size (in
|
|
|
|
|
other words, the result of dividing the plex size by the stripe size must be an
|
|
|
|
|
integer), and it must be a multiple of a disk sector (512 bytes).
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.sp
|
|
|
|
|
For optimum performance, stripes should be at least 128 kB in size: anything
|
|
|
|
|
smaller will result in a significant increase in I/O activity due to mapping of
|
1999-03-13 07:45:52 +00:00
|
|
|
|
individual requests over multiple disks. The performance improvement due to the
|
|
|
|
|
increased number of concurrent transfers caused by this mapping will not make up
|
|
|
|
|
for the performance drop due to the increase in latency. A good guideline for
|
1998-12-27 03:47:15 +00:00
|
|
|
|
stripe size is between 256 kB and 512 kB.
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Pp
|
|
|
|
|
A striped plex must have at least two subdisks (otherwise it is a concatenated
|
|
|
|
|
plex), and each must be the same size. A RAID-5 plex must have at least three
|
|
|
|
|
subdisks, and each must be the same size. In practice, a RAID-5 plex should
|
|
|
|
|
have at least 5 subdisks.
|
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm volume Ar volname
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Add the plex to the specified volume. If no
|
|
|
|
|
.Nm volume
|
|
|
|
|
keyword is specified, the plex will be added to the last volume mentioned in the
|
|
|
|
|
configuration file.
|
|
|
|
|
.sp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm sd Ar sdname Ar offset
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Add the specified subdisk to the plex at offset
|
|
|
|
|
.Ar offset .
|
|
|
|
|
.br
|
|
|
|
|
.fi
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.El
|
|
|
|
|
.It Nm subdisk Op options
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
Define a subdisk. Options may be:
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.Bl -hang -width 18n
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.nf
|
|
|
|
|
.sp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm name Ar name
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Specify the name of a subdisk. It is not necessary to specify a name for a
|
|
|
|
|
subdisk\(emsee OBJECT NAMING above. Note that you must specify the keyword
|
|
|
|
|
.Ar name
|
|
|
|
|
if you wish to name a subdisk.
|
|
|
|
|
.sp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm plexoffset Ar offset
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Specify the starting offset of the subdisk in the plex. If not specified,
|
|
|
|
|
.Nm
|
|
|
|
|
allocates the space immediately after the previous subdisk, if any, or otherwise
|
|
|
|
|
at the beginning of the plex.
|
|
|
|
|
.sp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm driveoffset Ar offset
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Specify the starting offset of the subdisk in the drive. If not specified,
|
|
|
|
|
.Nm
|
|
|
|
|
allocates the first contiguous
|
|
|
|
|
.Ar length
|
|
|
|
|
bytes of free space on the drive.
|
|
|
|
|
.sp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm length Ar length
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Specify the length of the subdisk. This keyword must be specified. There is no
|
|
|
|
|
default.
|
|
|
|
|
.Nm length
|
|
|
|
|
may be shortened to
|
|
|
|
|
.Nm len .
|
|
|
|
|
.sp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm plex Ar plex
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Specify the plex to which the subdisk belongs. By default, the subdisk belongs
|
|
|
|
|
to the last plex specified.
|
|
|
|
|
.sp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm drive Ar drive
|
1998-09-16 05:57:36 +00:00
|
|
|
|
Specify the drive on which the subdisk resides. By default, the subdisk resides
|
|
|
|
|
on the last drive specified.
|
|
|
|
|
.br
|
|
|
|
|
.fi
|
|
|
|
|
.El
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.It Nm drive Ar name Op options
|
1998-09-29 10:26:02 +00:00
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
Define a drive. The option must be:
|
1998-09-29 10:26:02 +00:00
|
|
|
|
.Pp
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.Bl -hang -width 18n
|
|
|
|
|
.It Nm device Ar devicename
|
1998-09-29 10:26:02 +00:00
|
|
|
|
Specify the device on which the drive resides.
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.El
|
1998-09-29 10:26:02 +00:00
|
|
|
|
.El
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Sh EXAMPLE CONFIGURATION FILE
|
1999-01-09 03:00:01 +00:00
|
|
|
|
.Bd -literal
|
1998-09-16 05:57:36 +00:00
|
|
|
|
# Sample vinum configuration file
|
|
|
|
|
#
|
|
|
|
|
# Our drives
|
1998-09-29 10:26:02 +00:00
|
|
|
|
drive drive1 device /dev/da1h
|
|
|
|
|
drive drive2 device /dev/da2h
|
|
|
|
|
drive drive3 device /dev/da3h
|
|
|
|
|
drive drive4 device /dev/da4h
|
|
|
|
|
drive drive5 device /dev/da5h
|
|
|
|
|
drive drive6 device /dev/da6h
|
1998-09-16 05:57:36 +00:00
|
|
|
|
# A volume with one striped plex
|
|
|
|
|
volume tinyvol
|
1999-02-11 06:14:49 +00:00
|
|
|
|
plex org striped 512b
|
1998-09-16 05:57:36 +00:00
|
|
|
|
sd length 64m drive drive2
|
|
|
|
|
sd length 64m drive drive4
|
|
|
|
|
volume stripe
|
1999-02-11 06:14:49 +00:00
|
|
|
|
plex org striped 512b
|
1998-09-16 05:57:36 +00:00
|
|
|
|
sd length 512m drive drive2
|
|
|
|
|
sd length 512m drive drive4
|
|
|
|
|
# Two plexes
|
|
|
|
|
volume concat
|
|
|
|
|
plex org concat
|
|
|
|
|
sd length 100m drive drive2
|
|
|
|
|
sd length 50m drive drive4
|
|
|
|
|
plex org concat
|
1998-12-27 03:47:15 +00:00
|
|
|
|
sd length 150m drive drive4
|
1998-09-16 05:57:36 +00:00
|
|
|
|
# A volume with one striped plex and one concatenated plex
|
|
|
|
|
volume strcon
|
1999-02-11 06:14:49 +00:00
|
|
|
|
plex org striped 512b
|
1998-09-16 05:57:36 +00:00
|
|
|
|
sd length 100m drive drive2
|
|
|
|
|
sd length 100m drive drive4
|
|
|
|
|
plex org concat
|
1998-12-27 03:47:15 +00:00
|
|
|
|
sd length 150m drive drive2
|
1998-09-16 05:57:36 +00:00
|
|
|
|
sd length 50m drive drive4
|
|
|
|
|
# a volume with a RAID-5 and a striped plex
|
|
|
|
|
# note that the RAID-5 volume is longer by
|
|
|
|
|
# the length of one subdisk
|
|
|
|
|
volume vol5
|
|
|
|
|
plex org striped 64k
|
|
|
|
|
sd length 1000m drive drive2
|
|
|
|
|
sd length 1000m drive drive4
|
|
|
|
|
plex org raid5 32k
|
|
|
|
|
sd length 500m drive drive1
|
|
|
|
|
sd length 500m drive drive2
|
|
|
|
|
sd length 500m drive drive3
|
|
|
|
|
sd length 500m drive drive4
|
|
|
|
|
sd length 500m drive drive5
|
1999-01-09 03:00:01 +00:00
|
|
|
|
.Ed
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Ss DRIVE LAYOUT CONSIDERATIONS
|
|
|
|
|
.Nm
|
|
|
|
|
drives are currently BSD disk partitions. They must be of type
|
|
|
|
|
.Ar unused
|
|
|
|
|
in order to avoid overwriting file systems. In later versions of
|
|
|
|
|
.Nm
|
|
|
|
|
this requirement will change to type
|
|
|
|
|
.Ar vinum .
|
1998-12-27 03:47:15 +00:00
|
|
|
|
Use
|
|
|
|
|
.Nm disklabel
|
|
|
|
|
.Ar -e
|
|
|
|
|
to edit a partition type definition. The following display shows a typical
|
|
|
|
|
partition layout as shown by
|
|
|
|
|
.Nm disklabel:
|
1999-01-09 03:00:01 +00:00
|
|
|
|
.Bd -literal
|
1998-12-27 03:47:15 +00:00
|
|
|
|
8 partitions:
|
|
|
|
|
# size offset fstype [fsize bsize bps/cpg]
|
|
|
|
|
a: 81920 344064 4.2BSD 0 0 0 # (Cyl. 240*- 297*)
|
|
|
|
|
b: 262144 81920 swap # (Cyl. 57*- 240*)
|
|
|
|
|
c: 4226725 0 unused 0 0 # (Cyl. 0 - 2955*)
|
|
|
|
|
e: 81920 0 4.2BSD 0 0 0 # (Cyl. 0 - 57*)
|
|
|
|
|
f: 1900000 425984 4.2BSD 0 0 0 # (Cyl. 297*- 1626*)
|
|
|
|
|
g: 1900741 2325984 unused 0 0 0 # (Cyl. 1626*- 2955*)
|
1999-01-09 03:00:01 +00:00
|
|
|
|
.Ed
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.sp
|
|
|
|
|
In this example, partition
|
|
|
|
|
.Nm g
|
|
|
|
|
may be used as a
|
|
|
|
|
.Nm
|
|
|
|
|
partition. Partitions
|
|
|
|
|
.Nm a ,
|
|
|
|
|
.Nm e
|
|
|
|
|
and
|
|
|
|
|
.Nm f
|
|
|
|
|
may be used as
|
|
|
|
|
.Nm UFS
|
|
|
|
|
file systems or
|
|
|
|
|
.Nm ccd
|
|
|
|
|
partitions. Partition
|
|
|
|
|
.Nm b
|
|
|
|
|
is a swap partition, and partition
|
|
|
|
|
.Nm c
|
|
|
|
|
represents the whole disk and should not be used for any other purpose.
|
|
|
|
|
.Pp
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Nm
|
|
|
|
|
uses the first 265 sectors on each partition for configuration information, so
|
|
|
|
|
the maximum size of a subdisk is 265 sectors smaller than the drive.
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.Sh GOTCHAS
|
1999-01-09 03:00:01 +00:00
|
|
|
|
The following points are not bugs, and they have good reasons for existing, but
|
|
|
|
|
they have shown to cause confusion. Each is discussed in the appropriate
|
|
|
|
|
section above.
|
|
|
|
|
.Bl -enum
|
|
|
|
|
.It
|
1998-12-27 03:47:15 +00:00
|
|
|
|
.Nm
|
|
|
|
|
will not create a device on UFS partitions. Instead, it will return an error
|
|
|
|
|
message ``wrong partition type''. The partition type must currently be
|
1999-01-09 03:00:01 +00:00
|
|
|
|
``unused''.
|
|
|
|
|
.It
|
|
|
|
|
When you create a volume with multiple plexes,
|
|
|
|
|
.Nm
|
|
|
|
|
does not automatically initialize the plexes. This means that the contents are
|
|
|
|
|
not known, but they are certainly not consistent. As a result, by default
|
|
|
|
|
.Nm
|
|
|
|
|
sets the state of all newly-created plexes except the first to
|
|
|
|
|
.Ar stale .
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.sp
|
1999-01-09 03:00:01 +00:00
|
|
|
|
In practice, people aren't too interested in what was in the plex when it was
|
|
|
|
|
created, and other volume managers cheat by setting them
|
|
|
|
|
.Ar up
|
|
|
|
|
anyway.
|
|
|
|
|
.Nm
|
|
|
|
|
provides two ways to ensure that newly created plexes are
|
|
|
|
|
.Ar up :
|
|
|
|
|
.Bl -bullet
|
|
|
|
|
.It
|
|
|
|
|
Create the plexes and then initialize them with
|
|
|
|
|
.Nm vinum init .
|
|
|
|
|
.It
|
|
|
|
|
Create the volume (not the plex) with the keyword
|
|
|
|
|
.Ar setupstate ,
|
|
|
|
|
which tells
|
|
|
|
|
.Nm
|
|
|
|
|
to ignore any possible inconsistency and set the plexes to be
|
|
|
|
|
.Ar up .
|
|
|
|
|
.El
|
|
|
|
|
.It
|
|
|
|
|
Some of the commands currently supported by
|
|
|
|
|
.Nm
|
|
|
|
|
are not really needed. For reasons which I don't understand, however, I find
|
|
|
|
|
that users frequently try the
|
|
|
|
|
.Nm label
|
|
|
|
|
and
|
|
|
|
|
.Nm resetconfig
|
|
|
|
|
commands, though especially
|
|
|
|
|
.Nm resetconfig
|
|
|
|
|
outputs all sort of dire warnings. Don't use these commands unless you have a
|
|
|
|
|
good reason to do so.
|
1999-01-21 00:45:11 +00:00
|
|
|
|
.It
|
|
|
|
|
Some state transitions are not very intuitive. In fact, it's not clear whether
|
|
|
|
|
this is a bug or a feature. If you find that you can't start an object in some
|
|
|
|
|
strange state, such as a
|
|
|
|
|
.Ar reborn
|
|
|
|
|
subdisk, try first to get it into
|
|
|
|
|
.Ar stopped
|
|
|
|
|
state, with the
|
|
|
|
|
.Nm stop
|
|
|
|
|
or
|
|
|
|
|
.Nm stop Ar -f
|
|
|
|
|
commands. If that works, you should then be able to start it. If you find
|
|
|
|
|
that this is the only way to get out of a position where easier methods fail,
|
|
|
|
|
please report the situation.
|
|
|
|
|
.It
|
|
|
|
|
If you build the kernel module with the
|
|
|
|
|
.Ar -DVINUMDEBUG
|
|
|
|
|
option, you must also build
|
|
|
|
|
.Nm vinum(8)
|
|
|
|
|
with the
|
|
|
|
|
.Ar -DVINUMDEBUG
|
|
|
|
|
option, since the size of some data objects used by both components depends on
|
|
|
|
|
this option. If you don't do so, commands will fail with the message
|
|
|
|
|
.Ar Invalid argument ,
|
|
|
|
|
and a console message will be logged such as
|
|
|
|
|
.Pp
|
|
|
|
|
.Bd -literal
|
|
|
|
|
vinumioctl: invalid ioctl from process 247 (vinum): c0e44642
|
|
|
|
|
.Ed
|
|
|
|
|
.Pp
|
|
|
|
|
This error may also occur if you use old versions of kld or userland program.
|
1999-01-09 03:00:01 +00:00
|
|
|
|
.El
|
1999-01-27 03:12:23 +00:00
|
|
|
|
.\"XXX.Sh BUGS
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Sh FILES
|
|
|
|
|
.Ar /dev/vinum
|
|
|
|
|
- directory with device nodes for
|
|
|
|
|
.Nm
|
|
|
|
|
objects.
|
|
|
|
|
.br
|
|
|
|
|
.Ar /dev/vinum/control
|
|
|
|
|
- control device for
|
|
|
|
|
.Nm vinum
|
|
|
|
|
.br
|
|
|
|
|
.Ar /dev/vinum/plex
|
|
|
|
|
- directory containing device nodes for
|
|
|
|
|
.Nm
|
|
|
|
|
plexes.
|
|
|
|
|
.br
|
|
|
|
|
.Ar /dev/vinum/sd
|
|
|
|
|
- directory containing device nodes for
|
|
|
|
|
.Nm
|
|
|
|
|
subdisks.
|
|
|
|
|
.Sh SEE ALSO
|
1999-01-09 03:00:01 +00:00
|
|
|
|
.Xr vinum 4 ,
|
|
|
|
|
.Xr disklabel 8 ,
|
|
|
|
|
.Nm http://www.lemis.com/vinum.html ,
|
|
|
|
|
.Nm http://www.lemis.com/vinum-debugging.html .
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Sh AUTHOR
|
1998-09-29 10:26:02 +00:00
|
|
|
|
Greg Lehey
|
|
|
|
|
.Pa <grog@lemis.com> .
|
1998-09-16 05:57:36 +00:00
|
|
|
|
.Sh HISTORY
|
|
|
|
|
The
|
|
|
|
|
.Nm
|
1998-09-29 10:26:02 +00:00
|
|
|
|
command first appeared in FreeBSD 3.0.
|