From owner-man-jp-reviewer@jp.freebsd.org  Mon Apr 26 00:53:27 1999
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id AAA47152;
	Mon, 26 Apr 1999 00:53:27 +0900 (JST)
	(envelope-from owner-man-jp-reviewer@jp.FreeBSD.org)
Received: from mail.yk.rim.or.jp (root@mail.yk.rim.or.jp [202.247.130.37])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id AAA47147
	for <man-jp-reviewer@jp.freebsd.org>; Mon, 26 Apr 1999 00:53:26 +0900 (JST)
	(envelope-from k-horik@yk.rim.or.jp)
Received: from localhost (ppp868.yk.rim.or.jp [202.247.185.119])
	by mail.yk.rim.or.jp (8.8.8/3.6W-RIMNET-98-06-09) with ESMTP id AAA25512
	for <man-jp-reviewer@jp.freebsd.org>; Mon, 26 Apr 1999 00:53:12 +0900 (JST)
To: man-jp-reviewer@jp.freebsd.org
X-Mailer: Mew version 1.93 on Emacs 19.34 / Mule 2.3 (SUETSUMUHANA)
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
	boundary="--Next_Part(Sun_Apr_25_21:28:07_1999_518)--"
Content-Transfer-Encoding: 7bit
Message-Id: <19990426005221A.k-horik@yk.rim.or.jp>
Date: Mon, 26 Apr 1999 00:52:21 +0900
From: Kazuo Horikawa <k-horik@yk.rim.or.jp>
X-Dispatcher: imput version 980905(IM100)
Lines: 2729
Reply-To: man-jp-reviewer@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+990405
X-Sequence: man-jp-reviewer 1320
Subject: [man-jp-reviewer 1320] vinum.8 for 3.1-19990417-STABLE
Errors-To: owner-man-jp-reviewer@jp.freebsd.org
Sender: owner-man-jp-reviewer@jp.freebsd.org
X-Originator: k-horik@yk.rim.or.jp

----Next_Part(Sun_Apr_25_21:28:07_1999_518)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

 $BKY@n$G$9!#(B3.1-19990417-STABLE $B$N(B vinum.8 $B$N:9J,$G$9!#(B

.Sh VINUM $B@_DjK!(B (HOW TO SET UP VINUM)
.Sh $B$=$NB>$N$3$H$,$i(B (Other considerations)

$B$J$s$F$N$,A}$($F$^$9$N$G!"3NG'$*4j$$$7$^$9!#(B


----Next_Part(Sun_Apr_25_21:28:07_1999_518)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Content-Description: vinum.8.diff Japanese
Content-Disposition: attachment; filename=vinum.8.diff

--- vinum.8	Fri Feb 12 01:54:21 1999
+++ vinum.8	Sun Apr 25 20:43:03 1999
@@ -1,10 +1,45 @@
 .\"  Hey, Emacs, edit this file in -*- nroff-fill -*- mode
+.\"-
+.\" Copyright (c) 1997, 1998
+.\"	Nan Yang Computer Services Limited.  All rights reserved.
+.\"
+.\"  This software is distributed under the so-called ``Berkeley
+.\"  License'':
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"	This product includes software developed by Nan Yang Computer
+.\"      Services Limited.
+.\" 4. Neither the name of the Company nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"  
+.\" This software is provided ``as is'', and any express or implied
+.\" warranties, including, but not limited to, the implied warranties of
+.\" merchantability and fitness for a particular purpose are disclaimed.
+.\" In no event shall the company or contributors be liable for any
+.\" direct, indirect, incidental, special, exemplary, or consequential
+.\" damages (including, but not limited to, procurement of substitute
+.\" goods or services; loss of use, data, or profits; or business
+.\" interruption) however caused and on any theory of liability, whether
+.\" in contract, strict liability, or tort (including negligence or
+.\" otherwise) arising in any way out of the use of this software, even if
+.\" advised of the possibility of such damage.
+.\"
+.\" $Id: vinum.8,v 1.5.2.3 1999/04/06 08:59:36 grog Exp $
 .\"
 .\" jpman %Id: vinum.8,v 1.3 1999/01/05 15:15:53 horikawa Stab %
 .\" WORD: attach	$B7k9g(B ($B$9$k(B)
-.Dd 15 January 1999
+.Dd 28 March 1999
 .Dt vinum 8
-.Os FreeBSD
 .Sh $BL>>N(B
 .Nm vinum
 .Nd $BO@M}%\%j%e!<%`%^%M!<%8%c$N@)8f%W%m%0%i%`(B
@@ -14,13 +49,14 @@
 .Op Fl options
 .Sh $B%3%^%s%I(B
 .Cd create
+.Fl f
 .Ar description-file
 .in +1i
 .Ar description-file
 $B$N5-=R$K=>$C$F%\%j%e!<%`$r:n@.$7$^$9!#(B
 .in
 .\" XXX remove this
-.Cd attach Ar plex Ar volume 
+.Cd attach Ar plex Ar volume
 .Op Nm rename
 .Cd attach Ar subdisk Ar plex Ar [offset]
 .Op Nm rename
@@ -51,7 +87,7 @@
 .Op Fl v
 .in +1i
 .\" XXX
-$BG[2<$NA4%5%V%G%#%9%/$K(B 0 $B$r=q$-9~$s$G$=$N%W%l%C%/%9$r=i4|2=$7$^$9!#(B
+$B2<0L$NA4%5%V%G%#%9%/$K(B 0 $B$r=q$-9~$s$G$=$N%W%l%C%/%9$r=i4|2=$7$^$9!#(B
 .in
 .Cd label
 .Ar volume
@@ -114,6 +150,13 @@
 .in +1i
 $B%\%j%e!<%`$N>pJs$rI=<($7$^$9!#(B
 .in
+.Cd printconfig
+.Pa file
+.in +1i
+$B8=:_$N@_Dj$N%3%T!<$r(B
+.Pa file
+$B$X=q$-9~$_$^$9!#(B
+.in
 .Cd makedev
 .in +1i
 .Ar /dev/vinum
@@ -162,13 +205,18 @@
 $B;XDj$7$?%*%V%8%'%/%H$NE}7W>pJs$r%j%;%C%H$7$^$9!#;XDj$,$J$$>l9g$O$9$Y$F$N(B
 $B%*%V%8%'%/%H$,BP>]$G$9!#(B
 .in
-.Cd rm 
+.Cd rm
 .Op Fl f
 .Op Fl r
 .Ar volume | plex | subdisk
 .in +1i
 $B%*%V%8%'%/%H$r:o=|$7$^$9!#(B
 .in
+.Cd saveconfig
+.in +1i
+.Nm
+$B$N@_Dj$r%G%#%9%/$XJ]B8$7$^$9!#(B
+.in
 .ig
 XXX
 .Cd set
@@ -194,6 +242,9 @@
 .Op volume | plex | subdisk
 .in +1i
 $B%*%V%8%'%/%H$X$N%"%/%;%9$r=*N;$5$;$^$9!#(B
+$B%Q%i%a!<%?$r;XDj$7$J$$$H!"(B
+.Nm
+$B$rDd;_$5$;$^$9!#(B
 .in
 .Sh $B2r@b(B
 .Nm
@@ -248,9 +299,11 @@
 $B%"%/%;%9$9$k$H!"$[$\3N<B$K%Q%K%C%/$r5/$3$7$^$9!#(B
 .It Cd -r
 .Nm -r
-(``recursive: $B:F5"E*(B'') $B%*%W%7%g%s$OI=<(7O$N%3%^%s%I$G;H$$!"(B
+.if t (``recursive: $B:F5"E*(B'')
+.if n ("recursive: $B:F5"E*(B")
+$B%*%W%7%g%s$OI=<(7O$N%3%^%s%I$G;H$$!"(B
 $B;X<($7$?%*%V%8%'%/%H(B
-$B$@$1$G$J$/!"G[2<$N%*%V%8%'%/%H$N>pJs$bI=<($7$^$9!#(B
+$B$@$1$G$J$/!"2<0L$N%*%V%8%'%/%H$N>pJs$bI=<($7$^$9!#(B
 $BNc$($P!"(B
 .Nm lv
 $B%3%^%s%I$H$H$b$K;H$o$l$k>l9g!"(B
@@ -287,7 +340,7 @@
 .Nm rename
 $B%-!<%o!<%I$,;XDj$5$l$k$H!"(B
 .Nm
-$B$O%*%V%8%'%/%H$N(B ($B%W%l%C%/%9$N>l9g$K$OG[2<$N%5%V%G%#%9%/$N(B) $BL>A0$rJQ99$7$F(B
+$B$O%*%V%8%'%/%H$N(B ($B%W%l%C%/%9$N>l9g$K$O2<0L$N%5%V%G%#%9%/$N(B) $BL>A0$rJQ99$7$F(B
 $B%G%U%)%k%H$N(B
 .Nm 
 $BL?L>5,B'$K9g$o$;$^$9!#(B
@@ -314,7 +367,7 @@
 3 $BHVL\$O(B 512k $B$K!"$J$I$H$J$j$^$9!#(B
 $B$3$N7W;;$G$O!"(BRAID-5 $B%W%l%C%/%9$N%Q%j%F%#%V%m%C%/$OL5;k$5$l$^$9!#(B
 .El
-.It Nm create Ar description-file
+.It Nm create Fl f Ar description-file
 .sp
 .Nm
 .Ar create
@@ -322,6 +375,30 @@
 .Nm
 $B%*%V%8%'%/%H$N:n@.$K$O@x:_E*$K4m81$,$"$k$3$H$r9MN8$7$F!"$3$N5!G=$K$OBPOCE*$J(B
 $B%$%s%?%U%'!<%9$O$"$j$^$;$s!#>\:Y$O8e=R$N@_Dj%U%!%$%k$N@a$r;2>H$7$F2<$5$$!#(B
+.Pp
+.Nm
+$B$N(B
+.Ar create
+$B5!G=$O2CK!E*$G$"$k$3$H$KCm0U$7$F$/$@$5$$(B:
+$BJ#?t2s<B9T$9$k$H!"L>A0IU$1$7$F$$$J$$A4%*%V%8%'%/%H$N%3%T!<$r!"(B
+$BJ#?t@8@.$9$k$3$H$K$J$j$^$9!#(B
+.Pp
+$BDL>o(B
+.Nm create
+$B$O4{B8$N(B
+.Nm
+$B%I%i%$%V$NL>A0$rJQ99$7$^$;$s!#$3$l$O!"8m$C$F>C5n$7$F$7$^$&$N$rHr$1$k$?$a$G$9!#(B
+$BITMW$J(B
+.Nm
+$B%I%i%$%V$rGK4~$9$k@5$7$$J}K!$O!"(B
+.Nm resetconfig
+$B%3%^%s%I$G@_Dj$r%j%;%C%H$9$k$3$H$G$9!#(B
+$B$7$+$7!"5/F0$G$-$J$$(B
+.Nm
+$B%I%i%$%V>e$K?75,%G!<%?$r@8@.$9$kI,MW$,$"$k>l9g$,$"$j$^$9!#(B
+$B$3$N>l9g!"(B
+.Nm create Fl f
+$B$r;HMQ$7$F$/$@$5$$!#(B
 .It Nm debug
 .Pp
 .Nm
@@ -364,6 +441,12 @@
 .It DEBUG_REVIVECONFLICT (16)
 .br
 $B:F@8$K$*$1$k>WFM$K4X$9$k>pJs$rI=<($7$^$9!#(B
+.It DEBUG_EOFINFO (32)
+.br
+$B%9%H%i%$%W%W%l%C%/%9$G(B EOF $B$rJV$9$H$-!"FbIt>uBV$N>pJs$rI=<($7$^$9!#(B
+.It DEBUG_MEMFREE (64)
+.br
+$B:G8e$K%a%b%j%"%m%1!<%?$,2rJ|$7$?%a%b%jNN0h$K4X$9$k=[4D%j%9%H$r4IM}$7$^$9!#(B
 .It DEBUG_REMOTEGDB (256)
 .br
 .Nm debug
@@ -371,11 +454,11 @@
 .Ic gdb
 $B$K0\9T$7$^$9!#(B
 .El
-.It Nm detach Op Fl f 
+.It Nm detach Op Fl f
 .Ar plex
 .if n .sp -1v
 .if t .sp -.6v
-.It Nm detach Op Fl f 
+.It Nm detach Op Fl f
 .Ar subdisk
 .sp
 .Nm
@@ -388,7 +471,10 @@
 $B%*%W%7%g%s$r;XDj$7$J$$8B$j<B9T$5$l$^$;$s!#(B
 $B%*%V%8%'%/%H$,>e0L$N%*%V%8%'%/%H$K=>$C$?L>A0$K$J$C$F$$$k>l9g(B
 ($BNc$($P!"%W%l%C%/%9(B vol1.p7 $B$K7k9g$5$l$F$$$k%5%V%G%#%9%/(B vol1.p7.s0 $B$N>l9g(B)$B!"(B
-$B$=$NL>A0$OF,$K(B ``ex-'' $B$,$D$$$?$b$N$KJQ99$5$l$^$9(B
+$B$=$NL>A0$OF,$K(B
+.if t ``ex-'' 
+.if n "ex-" 
+$B$,$D$$$?$b$N$KJQ99$5$l$^$9(B
 ($BNc$($P(B ex-vol1.p7.s0 $B$KJQ99$5$l$^$9(B)$B!#(B
 $B$=$N8e$N=hM}$GI,MW$G$"$l$P!"$=$NL>A0$+$iF,$NItJ,$,30$5$l$^$9!#(B
 .Pp
@@ -478,7 +564,7 @@
 $B$3$3$+$i8e$N%j%/%(%9%H$G$O!"MxMQ2DG=$G$"$k>l9g!"(B
 .Ar Dev
 $B$O4XO"IU$1$i$l$?%G%#%9%/%Q!<%F%#%7%g%s$N%G%P%$%9HV9f$G$"$j!"(B
-.Ar Offset 
+.Ar Offset
 $B$O%Q!<%F%#%7%g%s$N@hF,$+$i$N%*%U%;%C%H$G$"$j!"(B
 .Ar SD
 $B$O(B
@@ -534,7 +620,7 @@
 RAID-5 $B%W%l%C%/%9$N;HMQA0$K$O!"$3$N=i4|2=$,I,MW$G$9!#(B
 $BB>$N?75,%W%l%C%/%9$KBP$7$F$b!"$3$N=i4|2=$r?d>)$7$^$9!#(B
 .Pp
-.Nm 
+.Nm
 $B$O%W%l%C%/%9Cf$N$9$Y$F$N%5%V%G%#%9%/$rJB9T$7$F=i4|2=$7$^$9!#(B
 $B$3$NA`:n$K$OD9$$;~4V$,(B
 $B$+$+$k$?$a!"%P%C%/%0%i%&%s%I$G<B9T$5$l$^$9!#(B
@@ -615,7 +701,7 @@
 .Pp
 .Fl r
 $B%*%W%7%g%s$O%\%j%e!<%`$H%W%l%C%/%9$K4XO"$7$^$9!#(B
-$B;XDj$5$l$k$H!"$=$N%*%V%8%'%/%HG[2<$N%5%V%G%#%9%/$H(B ($B%\%j%e!<%`$KBP$7$F$O(B)
+$B;XDj$5$l$k$H!"$=$N%*%V%8%'%/%H2<0L$N%5%V%G%#%9%/$H(B ($B%\%j%e!<%`$KBP$7$F$O(B)
 $B%W%l%C%/%9$N>pJs$r:F5"E*$KI=<($7$^$9!#(B
 .Ar lv ,
 .Ar lp ,
@@ -647,6 +733,13 @@
 $B%W%m%0%i%`$r=*N;$7$^$9!#DL>o$O!"J8;z(B
 .Ar EOF
 $B$rF~NO$9$k$3$H$G<B8=$G$-$^$9!#(B
+.It Nm printconfig Pa file
+$B8=:_$N@_Dj$N%3%T!<$r!"(B
+.Nm
+$B@_Dj$r:F@8@.2DG=$J=q<0$G!"(B
+.Pa file
+$B$K=q$-9~$_$^$9!#(B
+$B%G%#%9%/>e$KJ]B8$5$l$?@_Dj$H$O0c$$!"%I%i%$%V$NDj5A$r4^$_$^$9!#(B
 .It Nm read
 .Ar disk Op disk...
 .Pp
@@ -659,13 +752,31 @@
 .Nm
 $B$O:G?7$N$9$Y$F$N@_Dj>pJs$r3F%G%#%9%/%Q!<%F%#%7%g%s$KJ];}$7$F$$$^$9!#(B
 $B$3$N%3%^%s%I$N(B
-$B%Q%i%a!<%?$H$7$F!"9=@.$NCf$NA4%Q!<%F%#%7%g%s$r;XDj$9$kI,MW$,$"$j$^$9!#(B
-.Nm
+$B%Q%i%a!<%?$H$7$F!"@_Dj$NCf$NA4%9%i%$%9$r;XDj$9$kI,MW$,$"$j$^$9!#(B
+.Pp
 .Nm read
-$B$OHs(B Vinum $B%Q!<%F%#%7%g%s$NL>A0$r<u$1IU$1$^$9$N$G!"(B
+$B%3%^%s%I$O!"B>$N(B
+.Nm
+$B%Q!<%F%#%7%g%s$r;}$D%7%9%F%`>e$G!"(B
 .Nm
-$B%Q!<%F%#%7%g%s$,B8:_$9$k$+$b$7$l$J$$A4%Q!<%F%#%7%g%s$r!"(B
-$BK\%3%^%s%I$K;XDj$9$k$3$H$,$G$-$^$9(B
+$B@_Dj$rA*BrE*$K%m!<%I$9$k$3$H$r0U?^$7$F$$$^$9!#(B
+$B%7%9%F%`>e$NA4%Q!<%F%#%7%g%s$r5/F0$7$?$$>l9g!"(B
+.Nm start
+$B%3%^%s%I$r;HMQ$9$kJ}$,4JC1$G$9!#(B
+.Pp
+$BK\%3%^%s%I<B9T;~$K(B
+.Nm
+$B$,%(%i!<$K$J$k$H!"(B
+$B%G%#%9%/>e$N%3%T!<$,2u$l$J$$$h$&$K$9$k$?$a!"<+F0E*$J@_Dj99?7$rL58z$K$7$^$9!#(B
+$B$3$l$O!"%G%#%9%/>e$N@_Dj$,!"@_Dj%(%i!<$r<($9(B
+($BNc$($P!"M-8z$J6u4V;XDj$r;}$?$J$$%5%V%G%#%9%/(B) $B>l9g$K$bF1MM$G$9!#(B
+$B:FEY99?7$r%*%s$K$9$k$K$O!"(B
+.Nm setdaemon
+$B$H(B
+.Nm saveconfig
+$B$N%3%^%s%I$r;HMQ$7$F$/$@$5$$!#(B
+$B%G!<%b%s%*%W%7%g%s%^%9%/$N%S%C%H(B 4 $B$r%j%;%C%H$7$F!"(B
+$B@_DjJ]B8$r:FEYM-8z$K$7$F$/$@$5$$!#(B
 .It Nm rename
 .Op Fl r
 .Ar [ drive | subdisk | plex | volume ]
@@ -673,7 +784,7 @@
 .Pp
 $B;XDj$7$?%*%V%8%'%/%H$NL>A0$rJQ99$7$^$9!#(B
 .Fl r
-$B%*%W%7%g%s$,;XDj$5$l$k$H!"G[2<$N%*%V%8%'%/%H$,%G%U%)%k%H$N5,B'$K=>$C$FL?L>$5$l(B
+$B%*%W%7%g%s$,;XDj$5$l$k$H!"2<0L$N%*%V%8%'%/%H$,%G%U%)%k%H$N5,B'$K=>$C$FL?L>$5$l(B
 $B$^$9!#%W%l%C%/%9$NL>A0$O%\%j%e!<%`L>$K(B .p\f(BInumber\fP $B$rIU2C$7$F:n$i$l!"(B
 $B%5%V%G%#%9%/$NL>A0$O%W%l%C%/%9L>$K(B .s\f(BInumber\fP $B$rIU2C$7$F:n$i$l$^$9!#(B
 .It Nm replace
@@ -733,8 +844,8 @@
 .Fl r
 $B%*%W%7%g%s$b6&$K;XDj$9$k$H!"(B
 .Nm
-$B$OG[2<$N%*%V%8%'%/%H$N%+%&%s%?$b%j%;%C%H$7$^$9!#(B
-.It Nm rm 
+$B$O2<0L$N%*%V%8%'%/%H$N%+%&%s%?$b%j%;%C%H$7$^$9!#(B
+.It Nm rm
 .Op Fl f
 .Op Fl r
 .Ar volume | plex | subdisk
@@ -755,18 +866,25 @@
 .Pp
 $BDL>o!"(B
 .Nm
-$B$OG[2<$K%W%l%C%/%9$r;}$D%\%j%e!<%`$d!"G[2<$K%5%V%G%#%9%/$r;}$D%W%l%C%/%9$r(B
+$B$O2<0L$K%W%l%C%/%9$r;}$D%\%j%e!<%`$d!"2<0L$K%5%V%G%#%9%/$r;}$D%W%l%C%/%9$r(B
 $B>C5n$9$k$3$H$r5qH]$7$^$9!#(B
 .Fl f
 $B%U%i%0$r;XDj$9$k$H!"(B
 .Nm
 $B$OL5>r7o$K%*%V%8%'%/%H$r>C5n$7$^$9!#$^$?$O(B
 .Fl r
-(recursive: $B:F5"E*(B) $B%U%i%0$r;H$&$3$H$G!"F1MM$KG[2<$N%*%V%8%'%/%H$r(B
+(recursive: $B:F5"E*(B) $B%U%i%0$r;H$&$3$H$G!"F1MM$K2<0L$N%*%V%8%'%/%H$r(B
 $B>C5n$9$k$3$H$,$G$-$^$9!#(B
 .Fl r
 $B%U%i%0$rIU$1$F%\%j%e!<%`$r>C5n$9$k$H!"%W%l%C%/%9$H$=$l$KB0$9$k%5%V%G%#%9%/$b(B
 $B>C5n$7$^$9!#(B
+.It Nm saveconfig
+.Pp
+$B8=:_$N@_Dj$r%G%#%9%/$KJ]B8$7$^$9!#(B
+$BK\%3%^%s%I$NBh0l5A$O@0HwMQ$G$9!#(B
+$BNc$($P!"5/F0;~$K%(%i!<$,H/@8$7$?>l9g!"99?7$OL58z2=$5$l$^$9!#(B
+$B:FEYM-8z2=$7$F$b!"@_Dj$O<+F0E*$K$O%G%#%9%/$XJ]B8$5$l$^$;$s!#(B
+$B$3$N%3%^%s%I$r;HMQ$7$F@_Dj$rJ]B8$7$F$/$@$5$$!#(B
 .ig
 .It Nm set
 .Op Fl f
@@ -803,7 +921,11 @@
 .Nm start
 $B$O(B 1 $B$D$^$?$O$=$l0J>e$N(B
 .Nm
-$B%*%V%8%'%/%H$r5/F0$7$^$9!#%*%V%8%'%/%HL>$r;XDj$7$J$$$H!"%7%9%F%`$,(B
+$B%*%V%8%'%/%H$r5/F0$7$^$9(B (
+.Ar up
+$B>uBV$K0\9T$5$;$^$9(B)$B!#(B
+.Pp
+$B%*%V%8%'%/%HL>$r;XDj$7$J$$$H!"%7%9%F%`$,(B
 .Nm
 $B%I%i%$%V$G$"$k$HCN$C$F$$$k%G%#%9%/$r!"(B
 .Nm
@@ -815,9 +937,89 @@
 $BF~$C$F$*$j!"$=$N>pJs$H$7$F$O%W%l%C%/%9$H%\%j%e!<%`$rI=8=$9$k$?$a$KI,MW$J(B
 $BB>$N%I%i%$%V$NL>A0$r4^$s$G$$$^$9!#(B
 .Pp
+$BK\%3%^%s%I<B9T;~$K(B
+.Nm
+$B$,%(%i!<$K$J$k$H!"(B
+$B%G%#%9%/>e$N%3%T!<$,2u$l$J$$$h$&$K$9$k$?$a!"<+F0E*$J@_Dj99?7$rL58z$K$7$^$9!#(B
+$B$3$l$O!"%G%#%9%/>e$N@_Dj$,!"@_Dj%(%i!<$r<($9(B
+($BNc$($P!"M-8z$J6u4V;XDj$r;}$?$J$$%5%V%G%#%9%/(B) $B>l9g$K$bF1MM$G$9!#(B
+$B:FEY99?7$r%*%s$K$9$k$K$O!"(B
+.Nm setdaemon
+$B$H(B
+.Nm saveconfig
+$B$N%3%^%s%I$r;HMQ$7$F$/$@$5$$!#(B
+$B%G!<%b%s%*%W%7%g%s%^%9%/$N%S%C%H(B 4 $B$r%j%;%C%H$7$F!"(B
+$B@_DjJ]B8$r:FEYM-8z$K$7$F$/$@$5$$!#(B
+.Pp
 $B%*%V%8%'%/%HL>$,;XDj$5$l$k$H!"(B
 .Nm
-$B$O$=$l$i$r3+;O$7$^$9!#(B
+$B$O$=$l$i$r5/F0$7$^$9!#(B
+$BDL>o!"$3$NA`:n$O%5%V%G%#%9%/$KBP$7$F$N$_9T$$$^$9!#(B
+$BF0:n$O%*%V%8%'%/%H$N8=:_$N>uBV$K0MB8$7$^$9(B:
+.Bl -bullet
+.It
+$B%*%V%8%'%/%H$,4{$K(B
+.Ar up
+$B>uBV$N>l9g!"(B
+.Nm
+$B$O$J$K$b$7$^$;$s!#(B
+.It
+$B%*%V%8%'%/%H$,%5%V%G%#%9%/$G$"$j!"(B
+.Ar down
+$B$^$?$O(B
+.Ar reborn
+$B$N>uBV$N>l9g!"(B
+.Nm
+$B$O(B
+.Ar up
+$B>uBV$KJQ99$7$^$9!#(B
+.It
+$B%*%V%8%'%/%H$,%5%V%G%#%9%/$G$"$j!"(B
+.Ar empty
+$B>uBV$N>l9g!"JQ99$O%5%V%G%#%9%/$K0MB8$7$^$9!#(B
+$B%5%V%G%#%9%/$,%W%l%C%/%9$N0lIt$G$"$j(B
+$B$3$N%W%l%C%/%9$,B>$N%W%l%C%/%9$r4^$`%\%j%e!<%`$N0lIt$G$"$k>l9g!"(B
+.Nm
+$B$O%5%V%G%#%9%/$r(B
+.Ar reviving
+$B>uBV$K$7!"%G!<%?$r%\%j%e!<%`$+$i%3%T!<$7$h$&$H$7$^$9!#(B
+$BA`:n40N;;~$K!"%5%V%G%#%9%/$O(B
+.Ar up
+$B>uBV$K@_Dj$5$l$^$9!#(B
+$B%5%V%G%#%9%/$,%W%l%C%/%9$N0lIt$G$"$j(B
+$B$3$N%W%l%C%/%9$,B>$N%W%l%C%/%9$r4^$^$J$$%\%j%e!<%`$N0lIt$G$"$k>l9g!"(B
+$B$^$?$O%5%V%G%#%9%/$,%W%l%C%/%9$N0lIt$G$O$J$$>l9g!"(B
+.Nm
+$B$OB(;~$K%5%V%G%#%9%/$r(B
+.Ar up
+$B>uBV$K$7$^$9!#(B
+.It
+$B%*%V%8%'%/%H$,%5%V%G%#%9%/$G$"$j!"(B
+.Ar reviving
+$B>uBV$G$"$k>l9g!"(B
+.Nm
+$B$O(B
+.Ar revive
+$BA`:n$r%*%U%i%$%s$K$F7QB3$7$^$9!#(B
+$BA`:n40N;;~$K!"%5%V%G%#%9%/$O(B
+.Ar up
+$B>uBV$K@_Dj$5$l$^$9!#(B
+.El
+.Pp
+$B%5%V%G%#%9%/$,(B
+.Ar up
+$B>uBV$K$J$k$H!"(B
+.Nm
+$B$O<+F0E*$K!"(B
+$B%5%V%G%#%9%/$,B0$92DG=@-$N$"$k%W%l%C%/%9$H%\%j%e!<%`$N>uBV$r%A%'%C%/$7!"(B
+$B$3$l$i$N>uBV$rE,@Z$K99?7$7$^$9!#(B
+.Pp
+$B%*%V%8%'%/%H$,%\%j%e!<%`$^$?$O%W%l%C%/%9$N>l9g!"(B
+.Nm start
+$B$O8=:_$N$H$3$m8z2L$,$"$j$^$;$s(B:
+$B2<0L$N%5%V%G%#%9%/$N(B ($B%\%j%e!<%`$N>l9g$K$O$3$l$K2C$($F%W%l%C%/%9$N(B) $B>uBV$r(B
+$B%A%'%C%/$7!"$3$l$K=>$C$F%*%V%8%'%/%H$N>uBV$r@_Dj$7$^$9!#(B
+$B>-Mh$N%P!<%8%g%s$G$O!"K\A`:n$O%5%V%G%#%9%/$K1F6A$rM?$($k$h$&$K$J$j$^$9!#(B
 .Pp
 $B%^%k%A%W%l%C%/%9%\%j%e!<%`$NCf$N(B 1 $B$D$N%W%l%C%/%9$r5/F0$9$k$K$O!"(B
 $B%\%j%e!<%`Cf$NB>$N%W%l%C%/%9$+$i%G!<%?$r%3%T!<$9$kI,MW$,$"$j$^$9!#(B
@@ -826,16 +1028,44 @@
 .Op Fl f
 .Op volume | plex | subdisk
 .Pp
+$B%Q%i%a!<%?$r;XDj$7$J$$$H!"(B
 .Nm stop
-$B$O!";XDj$7$?%*%V%8%'%/%H$HG[2<$N%*%V%8%'%/%H$KBP$9$k%"%/%;%9$rM^;_$7$^$9!#(B
-$B%*%V%8%'%/%H$r@_Dj$+$i:o=|$9$k$3$H$O$"$j$^$;$s!#(B
-.Nm start 
+$B$O(B
+.Nm
+kld $B$r:o=|$7!"(B
+.Xr vinum 8
+$B$rDd;_$7$^$9!#(B
+$B3hF0>uBV$N%*%V%8%'%/%H$,B8:_$7$J$$>l9g$N$_!"9T$&$3$H$,2DG=$G$9!#(B
+$BFC$K!"(B
+.Fl f
+$B%U%i%0$O$3$NMW5a$KM%@h$7$^$;$s!#(B
+$B$3$N%3%^%s%I$,F0:n$9$k$N$O!"(B
+.Nm
+$B$,(B kld $B$H$7$F%m!<%I$5$l$F$$$k>l9g$N$_$G$9!#(B
+$B@EE*$K9=@.$5$l$?%I%i%$%P$r%"%s%m!<%I$9$k$3$H$O$G$-$J$$$+$i$G$9!#(B
+.Nm
+$B$,@EE*$K9=@.$5$l$F$$$k>l9g!"(B
+.Nm
+.Nm stop
+$B$O<:GT$7$^$9!#(B
+.Pp
+$B%*%V%8%'%/%HL>$,;XDj$5$l$k$H!"(B
+.Nm stop
+$B$O$=$N%*%V%8%'%/%H$X$N%"%/%;%9$rL58z2=$7$^$9!#(B
+$B%*%V%8%'%/%H$K2<0L%*%V%8%'%/%H$,$"$k>l9g!"(B
+$B$=$l$i$N%5%V%*%V%8%'%/%H$O4{$KHs3hF0>uBV(B (stop $B$^$?(B error) $B$H$J$C$F$$$k$+!"(B
+.Fl r
+$B$H(B
+.Fl f
+$B$N%U%i%0$,;XDj$5$l$F$$$k$3$H$,I,MW$G$9!#(B
+$B$3$N%3%^%s%I$O!"%*%V%8%'%/%H$r@_Dj$+$i<h$j=|$-$^$;$s!#(B
+.Nm start
 $B%3%^%s%I$N8e$G:FEY%"%/%;%9$,$G$-$k$h$&$K$J$j$^$9!#(B
 .Pp
 $B%G%U%)%k%H$G$O(B
 .Nm
-$B$OF0:nCf$N%*%V%8%'%/%H$O:o=|$7$^$;$s!#Nc$($P!"F0:nCf$N%\%j%e!<%`$K7k9g(B
-$B$5$l$F$$$k%W%l%C%/%9$O:o=|$G$-$J$$$7!"%*!<%W%sCf$N%\%j%e!<%`$O:o=|$G$-$^$;$s!#(B
+$B$OF0:nCf$N%*%V%8%'%/%H$ODd;_$7$^$;$s!#Nc$($P!"F0:nCf$N%\%j%e!<%`$K7k9g(B
+$B$5$l$F$$$k%W%l%C%/%9$ODd;_$G$-$J$$$7!"%*!<%W%sCf$N%\%j%e!<%`$ODd;_$G$-$^$;$s!#(B
 .Fl f
 $B%*%W%7%g%s$O(B
 .Nm
@@ -863,7 +1093,7 @@
 .Pp
 .Bl -hang -width 4n
 .It Nm volume
-.Ar name 
+.Ar name
 .Op options
 .Pp
 .Ar name
@@ -899,6 +1129,7 @@
 .Ar prefer
 $BFI$_9~$_J}?K$G$O!";XDj$7$?%W%l%C%/%9$+$iKh2sFI$_9~$_$r9T$$$^$9!#(B
 .It Nm setupstate
+.Pp
 $B%^%k%A%W%l%C%/%9%\%j%e!<%`$r:n@.$9$k:]$K!"$9$Y$F$N%W%l%C%/%9$NFbMF$K0l4S@-$,(B
 $B$"$k$H2>Dj$7$^$9!#DL>o$3$&$J$k$3$H$O$J$$$?$a!"@5<0$K$O(B
 .Nm init
@@ -921,7 +1152,7 @@
 .El
 .It Nm plex Op options
 .Pp
-$B%W%l%C%/%9$rDj5A$7$^$9!#%\%j%e!<%`$H$O0[$J$j!"L>A0$OITMW$G$9!#(B
+$B%W%l%C%/%9$rDj5A$7$^$9!#%\%j%e!<%`$H$O0c$$!"L>A0$OITMW$G$9!#(B
 $B%*%W%7%g%s$K$O<!$N$b$N$r;XDj2DG=$G$9(B:
 .Pp
 .Bl -hang -width 18n
@@ -943,7 +1174,7 @@
 $B$N$$$:$l$+$G$9!#(B
 .Ar striped
 $B$H(B
-.Ar raid5 
+.Ar raid5
 $B$N%W%l%C%/%9$KBP$7$F$O(B
 .Ar stripesize
 $B0z?t$r;XDj$9$kI,MW$,$"$j$^$9$,!"(B
@@ -964,8 +1195,9 @@
 $B$3$l$h$j>.$5$/$9$k$H!"(B
 $B8D!9$N%j%/%(%9%H$,J#?t$N%G%#%9%/$KBP$7$F3d$jEv$F$i$l$k$3$H$K$h$j!"(B
 I/O $B$N%"%/%F%#%S%F%#$,Hs>o$KA}2C$7$^$9!#(B
-$B$3$N3d$jEv$F$K5/0x$9$kJB9T@-$NA}2C$O!"%l%$%F%s%7$rA}2C$5$;$^$;$s!#(B
-$B%9%H%i%$%W$NBg$-$5$NL\0B$O!"(B256kB $B$+$i(B 512 kB $B$N4V$G$9!#(B
+$BK\%^%C%T%s%0$K$h$kJB9TE>Aw?tA}2C$K5/0x$9$k@-G=8~>e$O!"(B
+$B%l%$%F%s%7A}2C$K5/0x$9$k@-G=Nt2=$r0z$-5/$7$^$;$s!#(B
+$B%9%H%i%$%W$NBg$-$5$NL\0B$O!"(B256 kB $B$+$i(B 512 kB $B$N4V$G$9!#(B
 .Pp
 $B%9%H%i%$%W2=%W%l%C%/%9$O:GDc(B 2 $B$D$N%5%V%G%#%9%/$r;}$DI,MW$,$"$j$^$9$7(B
 ($B$=$&$G$J$$$H%3%s%+%A%M!<%H2=%W%l%C%/%9$K$J$j$^$9(B)$B!"(B
@@ -1017,6 +1249,11 @@
 .It Nm length Ar length
 $B%5%V%G%#%9%/$NBg$-$5$r;XDj$7$^$9!#$3$N%-!<%o!<%I$OI,?\$G$9!#(B
 $B%G%U%)%k%HCM$O$"$j$^$;$s!#(B
+$BCM(B 0 $B$r;XDj$9$k$H!"(B
+.if t ``$B%I%i%$%V>e$G:GBg8BMxMQ2DG=$JO"B36u$-NN0h$r;HMQ(B''
+.if n "$B%I%i%$%V>e$G:GBg8BMxMQ2DG=$JO"B36u$-NN0h$r;HMQ(B"
+$B$H$$$&0UL#$K$J$j$^$9!#(B
+$B%I%i%$%V$,6u$N>l9g!"%5%V%G%#%9%/$H$7$F%I%i%$%VA4BN$r;HMQ$9$k$3$H$r0UL#$7$^$9!#(B
 .Nm length
 $B$O(B
 .Nm len
@@ -1094,12 +1331,18 @@
 .Nm
 $B%I%i%$%V$O(B BSD $B%G%#%9%/%Q!<%F%#%7%g%s$G$9!#$=$l$O(B
 $B%U%!%$%k%7%9%F%`$N>e=q$-$rHr$1$k$?$a$K(B
-.Ar unused 
+.Ar vinum
 $B%?%$%W$G$"$kI,MW$,$"$j$^$9!#(B
+$B8_49@-$N$?$a$K!"8=:_$N(B
 .Nm
-$B$N8e$N%P!<%8%g%s$G$O$3$l$O(B
-.Ar vinum
-$B%?%$%W$KJQ99$5$l$kM=Dj$G$9!#(B
+$B$O%Q!<%F%#%7%g%s%?%$%W(B
+.Ar unused
+$B$r<u$1IU$1$^$9$,!"<!$N%j%j!<%9$G$O$3$N<oN`$N%Q!<%F%#%7%g%s$O5v$7$^$;$s!#(B
+$B%?%$%W(B
+.Ar unused
+$B$G$"$k%Q!<%F%#%7%g%s$+$i@_Dj$rFI$_=P$9$H!"(B
+.Nm
+$B$O7Y9p%a%C%;!<%8$rI=<($7$^$9!#(B
 .Nm disklabel
 .Ar -e
 $B$r;HMQ$7$F!"%Q!<%F%#%7%g%s%?%$%WDj5A$rJT=8$7$F$/$@$5$$!#(B
@@ -1114,7 +1357,7 @@
   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*)
+  g:  1900741  2325984     vinum        0     0     0   # (Cyl. 1626*- 2955*)
 .Ed
 .sp
 $B$3$NNc$G$O!"%Q!<%F%#%7%g%s(B
@@ -1138,6 +1381,582 @@
 .Nm
 $B$O3F%Q!<%F%#%7%g%s$N@hF,$+$i(B 265 $B%;%/%?$r@_Dj>pJs$K;HMQ$9$k$?$a!"(B
 $B%5%V%G%#%9%/$N:GBg$NBg$-$5$O%I%i%$%V$h$j$b(B 265 $B%;%/%?>.$5$/$J$j$^$9!#(B
+.Sh VINUM $B@_DjK!(B
+$BK\@a$G$O!"(B
+.Nm
+$B%7%9%F%`$N<BAuJ}K!$K4X$9$k!"8=<BE*$J%"%I%P%$%9$r9T$$$^$9!#(B
+.Ss $B%G!<%?$r2?=h$KCV$/$+(B
+$B$^$:7hDj$,I,MW$JA*Br$O!"%G!<%?$r2?=h$KCV$/$+$G$9!#(B
+.Nm
+$B@lMQ$N%G%#%9%/%Q!<%F%#%7%g%s$,I,MW$G$9!#(B
+$BA0=R$7$?!"%I%i%$%V%l%$%"%&%H>e$N9MN8E@$K$"$k;HMQNc$r;2>H$7$F$/$@$5$$!#(B
+.Xr disklabel 8
+$B$,%Q!<%F%#%7%g%s%?%$%W(B
+.Nm
+$B$rM}2r$7$J$$%P!<%8%g%s$G$"$k>l9g$r=|$-!"%Q!<%F%#%7%g%s%?%$%W(B
+.Nm
+$B$rA*Br$7$F$/$@$5$$!#(B
+.Xr disklabel 8
+$B$,M}2r$7$J$$>l9g$K$O!"$3$l$r99?7$9$k$^$G!"%Q!<%F%#%7%g%s%?%$%W(B
+.Nm unused
+$B$r;HMQ$9$kI,MW$,$"$j$^$9!#(B
+$B??$N%Q!<%F%#%7%g%sL>(B ($BNc$($P(B
+.Pa /dev/da0s1g )
+$B$G$O$J$/!"8_49%Q!<%F%#%7%g%sL>(B ($BNc$($P(B
+.Pa /dev/da0g )
+$B$r;HMQ$7$F$/$@$5$$!#(B
+$B8=:_$N$H$3$m!"(B
+.Nm start
+$B%3%^%s%I$K$O8_49%Q!<%F%#%7%g%s$N$_$r(B
+.Nm
+$B$O;HMQ$7$^$9$N$G!"LdBj$rHr$1$k$3$H$,2DG=$H$J$C$F$$$^$9!#(B
+.Ss $B%\%j%e!<%`$N%G%6%$%s(B
+.Nm
+$B%\%j%e!<%`$N@_DjJ}K!$O!"$"$J$?$N0U?^$K0MB8$7$^$9!#(B
+$B<!$N$h$&$KB?$/$N2DG=@-$,$"$j$^$9(B:
+.Bl -enum
+.It
+$BB?$/$N>.$5$J%G%#%9%/$r7k9g$7$F!"(B
+$BE,@Z$JBg$-$5$N%U%!%$%k%7%9%F%`$r:n@.$7$?$$$H9M$($k$+$b$7$l$^$;$s!#(B
+$BNc$($P!">.$5$J%G%#%9%/$r(B 5 $B8D;}$C$F$$$F!"(B
+$BA46u4V$rC10l%\%j%e!<%`$H$7$F;HMQ$7$?$$>l9g!"<!$N$h$&$J@_Dj%U%!%$%k$r=q$-$^$9(B:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+drive d4 device /dev/da5e
+drive d5 device /dev/da6e
+volume bigger
+ plex org concat
+   sd length 0 drive d1
+   sd length 0 drive d2
+   sd length 0 drive d3
+   sd length 0 drive d4
+   sd length 0 drive d5
+.Ed
+.Pp
+$B$3$N>l9g!"%5%V%G%#%9%/$ND9$5$r(B 0 $B$H;XDj$7$^$9!#(B
+$B$3$l$O!"(B
+.if t ``$B%I%i%$%V>e$K$"$k6u$-6u4V$N$&$A!":GBgNN0h$r;HMQ$9$k(B''
+.if n "$B%I%i%$%V>e$K$"$k6u$-6u4V$N$&$A!":GBgNN0h$r;HMQ$9$k(B"
+$B$3$H$r0UL#$7$^$9!#(B
+$B;XDj$9$k%5%V%G%#%9%/$,!"%I%i%$%V>e$NM#0l$N%5%V%G%#%9%/$G$"$k>l9g!"(B
+$B$3$N%5%V%G%#%9%/$O;HMQ2DG=$J6u4VA4BN$r;HMQ$7$^$9!#(B
+.It
+$B%G%#%9%/8N>c$KBP$9$kDI2C$N2sI|NO(B ($B%l%8%j%(%s%9(B; resilience) $B$r(B
+.Nm
+$B$KM?$($?$$>l9g$r9M$($^$9!#(B
+$BA*Br;h$H$7$F$O!"(B
+.if t ``$B%_%i!<%j%s%0(B''
+.if n "$B%_%i!<%j%s%0(B"
+$B$H$b8F$P$l$k(B RAID-1 $B$+!"(B
+.if t ``$B%Q%j%F%#(B''
+.if n "$B%Q%j%F%#(B"
+$B$H$b8F$P$l$k(B RAID-5 $B$,$"$j$^$9!#(B
+.Pp
+$B%_%i!<%j%s%0$N@_Dj$N$?$a$K$O!"(B
+$BC10l%\%j%e!<%`$NCf$KJ#?t$N%W%l%C%/%9$r:n@.$9$kI,MW$,$"$j$^$9!#(B
+$BNc$($P!"(B 2 GB $B$N%_%i!<2=%\%j%e!<%`$r:n@.$9$k$K$O!"(B
+$B<!$N$h$&$J@_Dj%U%!%$%k$r:n@.$7$^$9(B:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+volume mirror
+ plex org concat
+   sd length 2g drive d1
+ plex org concat
+   sd length 2g drive d2
+.Ed
+.Pp
+$B%_%i!<2=%I%i%$%V$r:n@.$9$k$H$-$K$O!"(B
+$B3F%W%l%C%/%9$+$i$N%G!<%?$,!"(B
+$B0c$&J*M}%G%#%9%/>e$K$"$k$3$H$rJ]>Z$9$k$3$H$,=EMW$G$9!#(B
+$B$3$l$K$h$j!"C10l%I%i%$%V8N>c$K$*$$$F$b!"(B
+.Nm
+$B$O%\%j%e!<%`$N40A4$J%"%I%l%96u4V$K%"%/%;%92DG=$H$J$j$^$9!#(B
+$B3F%W%l%C%/%9$,!"(B
+$B40A4$J%\%j%e!<%`$HF1$8$@$1$N%G!<%?$rI,MW$H$9$k$3$H$KCm0U$7$F$/$@$5$$(B:
+$B$3$NNc$G$O!"%\%j%e!<%`$O(B 2 GB $B$NBg$-$5$G$9$,!"3F%W%l%C%/%9(B ($B$H3F%5%V%G%#%9%/(B)
+$B$O(B 2 GB $B$rI,MW$H$7$^$9$N$G!"A4BN$N%G%#%9%/%9%H%l!<%8MW5a$O(B 4 GB $B$H$J$j$^$9!#(B
+.Pp
+RAID-5 $B$N@_Dj$r$9$k$K$O!"%?%$%W(B
+.Ar raid5
+$B$NC10l%W%l%C%/%9$r:n@.$7$^$9!#(B
+$BNc$($P!"2sI|NO$r;}$D(B 2 GB $B$KAjEv$9$k%\%j%e!<%`$r:n@.$9$k$K$O!"(B
+$B<!$N$h$&$J@_Dj%U%!%$%k$r;HMQ$7$^$9(B:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+drive d4 device /dev/da5e
+drive d5 device /dev/da6e
+volume raid
+ plex org raid5 512k
+   sd length 512m drive d1
+   sd length 512m drive d2
+   sd length 512m drive d3
+   sd length 512m drive d4
+   sd length 512m drive d5
+.Ed
+.Pp
+RAID-5 $B%W%l%C%/%9$O!":GDc(B 3 $B8D$N%5%V%G%#%9%/$rI,MW$H$7$^$9!#(B
+$B$3$l$i$N$&$A(B 1 $B8D$K$O!"%Q%j%F%#>pJs$r3JG<$9$k$N$G!"(B
+$B%G!<%?%9%H%l!<%8$H$7$F$O;HMQ$7$^$;$s!#(B
+$B$h$jB?$/$N%G%#%9%/$r;HMQ$9$k$H!"(B
+$B$h$jB?$/$N3d9g$N%G%#%9%/%9%H%l!<%8$r!"(B
+$B%G!<%?%9%H%l!<%8$H$7$F;HMQ2DG=$H$J$j$^$9!#(B
+$B$3$NNc$G$O!"Am%9%H%l!<%8;HMQNL$O(B 2.5 GB $B$G$9!#(B
+$B$3$l$KBP$7!"%_%i!<@_Dj$G$NAm%9%H%l!<%8;HMQNL$O(B 4 GB $B$G$9!#(B
+$B:G>.$N(B 3 $B8D$N%G%#%9%/$@$1$r;HMQ$9$k>l9g!"(B
+$B>pJs3JG<$N$?$a$K<!$N$h$&$K(B 3 GB $B$rI,MW$H$7$^$9(B:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+volume raid
+ plex org raid5 512k
+   sd length 1g drive d1
+   sd length 1g drive d2
+   sd length 1g drive d3
+.Ed
+.Pp
+$B%_%i!<2=%I%i%$%V$r:n@.$9$k$H$-$K$O!"(B
+$B3F%5%V%G%#%9%/$+$i$N%G!<%?$,!"(B
+$B0c$&J*M}%G%#%9%/>e$K$"$k$3$H$rJ]>Z$9$k$3$H$,=EMW$G$9!#(B
+$B$3$l$K$h$j!"C10l%I%i%$%V8N>c$K$*$$$F$b!"(B
+.Nm
+$B$O%\%j%e!<%`$N40A4$J%"%I%l%96u4V$K%"%/%;%92DG=$H$J$j$^$9!#(B
+.It
+$B$^$?!"(B
+.Nm
+$B$N@_Dj$K$h$j!"(B
+$B%U%!%$%k%7%9%F%`$X$N%"%/%;%9$NJB9T@-$rA}$7$?$$$H9M$($k$+$b$7$l$^$;$s!#(B
+$BB?$/$N>l9g!"C10l$N%U%!%$%k%7%9%F%`$X$N%"%/%;%9$O!"(B
+$B%G%#%9%/B.EY$K$h$j@)8B$5$l$^$9!#(B
+$B%\%j%e!<%`$rJ#?t$N%G%#%9%/$KJ,;6$9$k$3$H$K$h$j!"(B
+$BJ#?t%"%/%;%94D6-$G$N%9%k!<%W%C%H$rA}$9$3$H$,2DG=$G$9!#(B
+$B$3$N5;=Q$O!"C10l%"%/%;%94D6-$G$O!"(B
+$B$[$H$s$I8z2L$,$J$$$+$^$C$?$/8z2L$,$"$j$^$;$s!#(B
+.Nm
+$B$O(B
+.if t ``$B%9%H%i%$%T%s%0(B''
+.if n "$B%9%H%i%$%T%s%0(B"
+$B$^$?$O(B RAID-0 $B$H$b8F$P$l$k5;=Q$r;HMQ$7!"%"%/%;%9$NJB9T@-$rA}$7$^$9!#(B
+RAID-0 $B$H$$$&L>>N$O8m2r$r@8$8$5$;$k$b$N$G$9(B:
+$B$J$<$J$i!"%9%H%i%$%T%s%0$O>iD9@-$b99$J$k?.Mj@-$bDs6!$7$J$$$+$i$G$9!#(B
+$B<B:]!"?.Mj@-$ODc2<$7$^$9!#(B
+$B$J$<$J$i!"C10l%G%#%9%/$N8N>c$O%\%j%e!<%`$r;HMQIT2D$H$7!"(B
+$BB?$/$N%G%#%9%/$r;H$&$[$I$3$l$i$N$&$A(B 1 $B8D$,8N>c$9$k3NN($OA}2C$9$k$+$i$G$9!#(B
+.Pp
+$B%9%H%i%$%T%s%0$N<BAu$N$?$a$K$O!"(B
+.Ar striped
+($B%9%H%i%$%W2=(B) $B%W%l%C%/%9$r;HMQ$7$^$9(B:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+drive d4 device /dev/da5e
+volume raid
+ plex org striped 512k
+   sd length 512m drive d1
+   sd length 512m drive d2
+   sd length 512m drive d3
+   sd length 512m drive d4
+.Ed
+.Pp
+$B%9%H%i%$%W2=%W%l%C%/%9$N:GDc%5%V%G%#%9%/?t$O(B 2 $B8D$G$9!#(B
+$BB?$/$N%G%#%9%/$r;HMQ$9$k$[$I!"@-G=$,8~>e$7$^$9!#(B
+.It
+$BN>J}$N:GNIE@$rF@$k$3$H$K$h$j!"2sI|NO$H@-G=$NN>J}$rF@$k$3$H$r9M$($^$9!#(B
+$B$3$l$O!"(BRAID-10 (RAID-1 $B$H(B RAID-0 $B$NAH$_9g$o$;(B) $B$H8F$P$l$k$3$H$,$"$j$^$9!#(B
+$B$3$NL>>N$b$^$?8m2r$r@8$8$5$;$k$b$N$G$9!#(B
+.Nm
+$B$G$O!"<!$N$h$&$J@_Dj%U%!%$%k$r;HMQ2DG=$G$9(B:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+drive d4 device /dev/da5e
+volume raid
+ plex org striped 512k
+   sd length 512m drive d1
+   sd length 512m drive d2
+   sd length 512m drive d3
+   sd length 512m drive d4
+ plex org striped 512k
+   sd length 512m drive d4
+   sd length 512m drive d3
+   sd length 512m drive d2
+   sd length 512m drive d1
+.Ed
+.Pp
+$B$3$3$G$O!"%W%l%C%/%9$O%9%H%i%$%W2=$5$l!"@-G=$r8~>e$7$F$$$^$9!#(B
+$B$=$7$F!"$3$N$h$&$J%W%l%C%/%9$,(B 2 $B8D$"$j!"2sI|NO$r8~>e$7$F$$$^$9!#(B
+$B$3$NNc$G!"(B2 $BHVL\$N%W%l%C%/%9$N%5%V%G%#%9%/$N=gHV$,!"(B
+1 $BHVL\$N%W%l%C%/%9$N5U$K$J$C$F$$$k$3$H$KCm0U$7$F$/$@$5$$!#(B
+$B$3$l$O@-G=$N$?$a$G$"$j!"8e$G5DO@$7$^$9!#(B
+.El
+.Ss $B%\%j%e!<%`$N:n@.(B
+$B$R$H$?$S@_Dj%U%!%$%k$r:n@.$7$?8e$O!"(B
+.Nm
+$B$r5/F0$7!"%\%j%e!<%`$r:n@.$7$^$9!#(B
+$B$3$NNc$G$O!"@_Dj%U%!%$%k$O(B
+.Pa configfile
+$B$G$9(B:
+.Bd -literal
+  # vinum create -v configfile
+     1: drive d1 device /dev/da2e
+     2: drive d2 device /dev/da3e
+     3: volume mirror
+     4:  plex org concat
+     5:    sd length 2g drive d1
+     6:  plex org concat
+     7:    sd length 2g drive d2
+  Configuration summary
+  
+  Drives:         2 (4 configured)
+  Volumes:        1 (4 configured)
+  Plexes:         2 (8 configured)
+  Subdisks:       2 (16 configured)
+  
+  Drive d1:       Device /dev/da2e
+                  Created on vinum.lemis.com at Tue Mar 23 12:30:31 1999
+                  Config last updated Tue Mar 23 14:30:32 1999
+                  Size:      60105216000 bytes (57320 MB)
+                  Used:       2147619328 bytes (2048 MB)
+                  Available: 57957596672 bytes (55272 MB)
+                  State: up
+                  Last error: none
+  Drive d2:       Device /dev/da3e
+                  Created on vinum.lemis.com at Tue Mar 23 12:30:32 1999
+                  Config last updated Tue Mar 23 14:30:33 1999 
+                  Size:      60105216000 bytes (57320 MB)
+                  Used:       2147619328 bytes (2048 MB)
+                  Available: 57957596672 bytes (55272 MB)
+                  State: up
+                  Last error: none
+  
+  Volume mirror:  Size: 2147483648 bytes (2048 MB)
+                  State: up
+                  Flags: 
+                  2 plexes
+                  Read policy: round robin
+  
+  Plex mirror.p0: Size:   2147483648 bytes (2048 MB)
+                  Subdisks:        1
+                  State: up
+                  Organization: concat
+                  Part of volume mirror
+  Plex mirror.p1: Size:   2147483648 bytes (2048 MB)
+                  Subdisks:        1
+                  State: up
+                  Organization: concat
+                  Part of volume mirror
+  
+  Subdisk mirror.p0.s0:
+                  Size:       2147483648 bytes (2048 MB)
+                  State: up
+                  Plex mirror.p0 at offset 0
+  
+  Subdisk mirror.p1.s0:
+                  Size:       2147483648 bytes (2048 MB)
+                  State: up
+                  Plex mirror.p1 at offset 0
+.Ed
+.Pp
+.Fl v
+$B%U%i%0$O!"@_Dj$K=>$C$F%U%!%$%k$r%j%9%H$9$k$h$&!"(B
+.Nm
+$B$K;X<($7$^$9!#$=$N8e!"(B
+.Nm list Fl v
+$B%3%^%s%I$HF1$8=q<0$G!"8=:_$N@_Dj$r%j%9%H$7$^$9!#(B
+.Ss $B$h$jB?$/$N%\%j%e!<%`$r:n@.$9$k(B
+$B$R$H$?$S(B
+.Nm 
+$B%\%j%e!<%`$r:n@.$7$?8e$O!"(B
+.Nm
+$B$O$3$l$i$N>pJs$rFbIt$N@_Dj%U%!%$%k$K$F4IM}$7$^$9!#(B
+$B:FEY:n@.$9$kI,MW$O$"$j$^$;$s!#(B
+$BFC$K!"(B
+.Nm create
+$B%3%^%s%I$r:F<B9T$9$k$H!"DI2C$N%*%V%8%'%/%H$r:n$k$3$H$K$J$j$^$9(B:
+.Bd -literal
+.if t .ps -2
+  # vinum create sampleconfig 
+  Configuration summary
+  
+  Drives:         2 (4 configured)
+  Volumes:        1 (4 configured)
+  Plexes:         4 (8 configured)
+  Subdisks:       4 (16 configured)
+  
+  D d1                    State: up       Device /dev/da2e        Avail: 53224/57320 MB (92%)
+  D d2                    State: up       Device /dev/da3e        Avail: 53224/57320 MB (92%)
+  
+  V mirror                State: up       Plexes:       4 Size:       2048 MB
+  
+  P mirror.p0           C State: up       Subdisks:     1 Size:       2048 MB
+  P mirror.p1           C State: up       Subdisks:     1 Size:       2048 MB
+  P mirror.p2           C State: up       Subdisks:     1 Size:       2048 MB
+  P mirror.p3           C State: up       Subdisks:     1 Size:       2048 MB
+  
+  S mirror.p0.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p1.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p2.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p3.s0          State: up       PO:        0  B Size:       2048 MB
+.if t .ps
+.Ed
+.Pp
+$B$3$NNc$G$O(B ($B:#2s$O(B
+.Fl f
+$B%U%i%0$rIU$1$F$$$^$9(B)$B!"(B
+.Nm create
+$B$N:F<B9T$K$h$j(B 4 $B8D$N?75,%W%l%C%/%9$r:n@.$7!"(B
+$B$=$l$>$l$,?75,%5%V%G%#%9%/$r;}$A$^$9!#(B
+$BB>$N%\%j%e!<%`$rDI2C$7$?$$>l9g!"$3$l$i$N$?$a$N?75,@_Dj%U%!%$%k$r:n@.$7$^$9!#(B
+.Nm
+$B$,4{$KCN$C$F$$$k%I%i%$%V$r;2>H$9$kI,MW$O$"$j$^$;$s!#(B
+$BNc$($P!"%\%j%e!<%`(B
+.Pa raid
+$B$r(B 4 $B8D$N%G%#%9%/(B
+.Pa /dev/da1e ,
+.Pa /dev/da2e ,
+.Pa /dev/da3e ,
+.Pa /dev/da4e
+$B>e$K:n@.$9$k$K$O!"B>$N(B 2 $B8D$K$D$$$F$N$_5-=R$9$k$@$1$GNI$$$G$9(B:
+.Bd -literal
+  drive d3 device /dev/da1e
+  drive d4 device /dev/da4e
+  volume raid
+    plex org raid5 512k
+      sd size 2g drive d1
+      sd size 2g drive d2
+      sd size 2g drive d3
+      sd size 2g drive d4
+.Ed
+.Pp
+$B$3$N@_Dj%U%!%$%k$G$O!"<!$N$h$&$K$J$j$^$9(B:
+.Bd -literal
+  # vinum create newconfig
+  Configuration summary
+  
+  Drives:         4 (4 configured)
+  Volumes:        2 (4 configured)
+  Plexes:         5 (8 configured)
+  Subdisks:       8 (16 configured)
+  
+  D d1                    State: up       Device /dev/da2e        Avail: 51176/57320 MB (89%)
+  D d2                    State: up       Device /dev/da3e        Avail: 53220/57320 MB (89%)
+  D d3                    State: up       Device /dev/da1e        Avail: 53224/57320 MB (92%)
+  D d4                    State: up       Device /dev/da4e        Avail: 53224/57320 MB (92%)
+  
+  V mirror                State: down     Plexes:       4 Size:       2048 MB
+  V raid                  State: down     Plexes:       1 Size:       6144 MB
+  
+  P mirror.p0           C State: init     Subdisks:     1 Size:       2048 MB
+  P mirror.p1           C State: init     Subdisks:     1 Size:       2048 MB
+  P mirror.p2           C State: init     Subdisks:     1 Size:       2048 MB
+  P mirror.p3           C State: init     Subdisks:     1 Size:       2048 MB
+  P raid.p0            R5 State: init     Subdisks:     4 Size:       6144 MB
+  
+  S mirror.p0.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p1.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p2.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p3.s0          State: up       PO:        0  B Size:       2048 MB
+  S raid.p0.s0            State: empty    PO:        0  B Size:       2048 MB
+  S raid.p0.s1            State: empty    PO:      512 kB Size:       2048 MB
+  S raid.p0.s2            State: empty    PO:     1024 kB Size:       2048 MB
+  S raid.p0.s3            State: empty    PO:     1536 kB Size:       2048 MB
+.Ed
+.Pp
+RAID-5 $B%W%l%C%/%9$NBg$-$5$KCm0U$7$F$/$@$5$$(B:
+6 GB $B$7$+$"$j$^$;$s$,!"(B
+$B$3$l$r9=@.$9$k$?$a$K%G%#%9%/6u4V$r(B 8 GB $B;HMQ$7$F$$$^$9!#(B
+$B$3$l$O!"%5%V%G%#%9%/(B 1 $B8DJ,AjEv$r%Q%j%F%#%G!<%?3JG<$K;HMQ$7$F$$$k$+$i$G$9!#(B
+.Ss Vinum $B$N:F5/F0(B
+$B%7%9%F%`$N%j%V!<%H;~$K!"(B
+.Nm start 
+$B%3%^%s%I$G(B
+.Nm
+$B$r5/F0$7$^$9(B:
+.Bd -literal
+  # vinum start
+.Ed
+.Pp
+$B$3$l$K$h$j!"%7%9%F%`Cf$NA4(B
+.Nm
+$B%I%i%$%V$,5/F0$7$^$9!#(B
+$B$J$s$i$+$NM}M3$G0lIt$N%I%i%$%V$N$_$r5/F0$7$?$$>l9g!"(B
+.Nm read
+$B%3%^%s%I$r;HMQ$7$F$/$@$5$$!#(B
+.Ss $B@-G=4XO"(B
+$B:G9b@-G=$N(B RAID $B%"%l%$@_Dj$K4X$9$k!"B?$/$N8m$C$?9M$($,B8:_$7$F$$$^$9!#(B
+$BFC$K!"$[$H$s$I$N%7%9%F%`$G;HMQ$7$F$$$k%9%H%i%$%W$NBg$-$5$O!">.$52a$.$^$9!#(B
+$B0J9_$N5DO@$O!"(B
+.Nm vinum
+$B$@$1$G$J$/!"A4(B RAID $B%7%9%F%`$K$"$F$O$^$j$^$9!#(B
+.Pp
+FreeBSD $B$N%V%m%C%/(B I/O $B%7%9%F%`$O!"(B.5 kB $B$+$i(B 60 kB $B$^$G$NMW5a$rH/9T$7$^$9(B;
+.\" mix = workload mix ?
+$BE57?E*$J%_%C%/%9$G$O!"$[$\(B 8 kB $B$G$9!#(B
+$B$I$s$J%9%H%i%$%T%s%0%7%9%F%`$K$*$$$F$b!"(B
+$B$"$kMW5a$,(B 2 $B8D$NJ*M}MW5a$KJ,3d$5$l$k$3$H$rHr$1$k$3$H$O$G$-$^$;$s$7!"(B
+$B$h$j0-$/$9$k$J$i$P$h$jB?$/$KJ,3d$5$l$F$7$^$$$^$9!#(B
+$B$3$l$K$h$j!"?SBg$J@-G=Nt2=$H$J$j$^$9(B:
+$B%G%#%9%/$"$?$j$NE>Aw;~4V$N:o8:$O!"(B
+$B$h$jBg$-$J%*!<%@$GA}2C$9$k%l%$%F%s%7$K$h$C$FAj;&$5$l$F$7$^$$$^$9!#(B
+.Pp
+$B:G6a$N%G%#%9%/$NBg$-$5$H(B FreeBSD $B$N%V%m%C%/(B I/O $B%7%9%F%`$G$O!"(B
+$B%9%H%i%$%W$NBg$-$5$r(B 256 kB $B$+$i(B 512 kB $B$K$9$k$H!"(B
+$BE,EY$K>/?t$JMW5a$KJ,3d$5$l$k$3$H$r4|BT$G$-$^$9(B;
+$B@5$7$$(B RAID $B$N<BAu$G$O!"(B
+$BBg$-$J%G%#%9%/$G$N%9%H%i%$%W$NBg$-$5$r(B 2 $B$^$?$O(B 4 MB $B$KA}$5$J$$(B
+$BL@3N$JM}M3$O$"$j$^$;$s!#(B
+.Pp
+$BJ#?t%"%/%;%9%7%9%F%`$G$NE>Aw$N%$%s%Q%/%H$r9M$($k$?$a$N$b$C$H$bMF0W$JJ}K!$O!"(B
+$B@x:_E*$J%\%H%k%M%C%/!"$9$J$o$A%G%#%9%/%5%V%7%9%F%`$N4QE@$+$i8+$k$3$H$G$9(B:
+$B$D$^$j!"E>Aw$KMW$9$k%G%#%9%/;~4V$NAm7W$O$$$/$i$+!)$G$9!#(B
+$B$[$H$s$I$9$Y$F$,%-%c%C%7%e$5$l$F$$$k$N$G!"(B
+$BMW5a$H40N;$H$N;~4VE*$J4X78$O$=$l$[$I=EMW$G$O$"$j$^$;$s(B:
+$B=EMW$J%Q%i%a!<%?$O!"MW5a$,%G%#%9%/$r3hF0>uBV$K$9$kAm;~4V$G$"$j!"(B
+$B$3$N4V%G%#%9%/$OB>$NE>Aw$,$G$-$J$/$J$j$^$9!#(B
+$B$3$N7k2L!"E>Aw$,F1;~$KH/@8$7$F$b0c$&;~$KH/@8$7$F$b!"(B
+$B<B:]$K$OLdBj$H$O$J$j$^$;$s!#(B
+$B<B:]E*$K$O!"2f!9$,8+$F$$$k;~4V$O!"%l%$%F%s%7$NAmOB(B ($B0LCV7hDj;~4V$H2sE>CY1d!"(B
+$B8@$$BX$($k$H%G!<%?$,%G%#%9%/%X%C%I2<$KMh$k$^$G$N;~4V(B) $B$HAmE>Aw;~4V$G$9!#(B
+$BF1$8B.EY$N%G%#%9%/$X$NE>Aw$K$*$$$F$O!"(B
+$BE>Aw;~4V$OE>Aw$NBg$-$5$N9g7W$N$_$K0MB8$7$^$9!#(B
+.Pp
+24 kB $B$NE57?E*$J%K%e!<%9$N5-;v$d%&%'%V%Z!<%8$r9M$($k$H!"(B
+$B$3$l$O(B 1 $B2s$N(B I/O $B$GFI$_9~$a$^$9!#(B
+$B%G%#%9%/$,E>Aw%l!<%H(B 6 MB/s $B$GJ?6Q0LCV7hDj;~4V(B 8 ms $B$G$"$j!"(B
+$B%U%!%$%k%7%9%F%`$r(B 4 kB $B%V%m%C%/$G$"$k$H$7$^$9!#(B
+24 kB $B$G$9$+$i!"CGJR2=$r9MN8$9$kI,MW$O$J$/!"(B
+$B%U%!%$%k$O(B 4 kB $B6-3&$+$i3+;O$7$^$9!#(B
+$BI,MW$JE>Aw2s?t$O%V%m%C%/3+;O0LCV$K0MB8$7$^$9(B:
+$B<0$O(B (S + F - 1) / S $B$H$J$j!"(B
+S $B$O%U%!%$%k%7%9%F%`%V%m%C%/?t$G$N%9%H%i%$%W$NBg$-$5!"(B
+F $B$O%U%!%$%k%7%9%F%`%V%m%C%/?t$G$N%U%!%$%k$NBg$-$5$G$9!#(B
+.Pp
+.Bl -enum
+.It
+$B%9%H%i%$%W$NBg$-$5$O(B 4 kB$B!#E>Aw2s?t$O(B 6 $B2s!#(B
+$B%5%V%7%9%F%`$NIi2Y(B: $B%l%$%F%s%7(B 48 ms$B!"E>Aw(B 2 ms$B!"9g7W(B 50 ms$B!#(B
+.It   
+$B%9%H%i%$%W$NBg$-$5$O(B 8 kB$B!#E>Aw2s?t$O(B 3.5 $B2s!#(B
+$B%5%V%7%9%F%`$NIi2Y(B: $B%l%$%F%s%7(B 28 ms$B!"E>Aw(B 2 ms$B!"9g7W(B 30 ms$B!#(B
+.It   
+$B%9%H%i%$%W$NBg$-$5$O(B 16 kB$B!#E>Aw2s?t$O(B 2.25 $B2s!#(B
+$B%5%V%7%9%F%`$NIi2Y(B: $B%l%$%F%s%7(B 18 ms$B!"E>Aw(B 2 ms$B!"9g7W(B 20 ms$B!#(B
+.It   
+$B%9%H%i%$%W$NBg$-$5$O(B 256 kB$B!#J?6QE>Aw2s?t$O(B 1.08 $B2s!#(B
+$B%5%V%7%9%F%`$NIi2Y(B: $B%l%$%F%s%7(B 8.6 ms$B!"E>Aw(B 2 ms$B!"9g7W(B 10.6 ms$B!#(B
+.It   
+$B%9%H%i%$%W$NBg$-$5$O(B 4 MB$B!#J?6QE>Aw2s?t$O(B 1.0009 $B2s!#(B
+$B%5%V%7%9%F%`$NIi2Y(B: $B%l%$%F%s%7(B 8.01 ms$B!"E>Aw(B 2 ms$B!"9g7W(B 10.01 ms$B!#(B
+.El   
+.Pp
+$B%O!<%I%&%'%"(B RAID $B%7%9%F%`$K$h$C$F$O!"(B
+$BBg$-$J%9%H%i%$%W$G$OLdBj$,$"$k$b$N$,$"$k$h$&$G$9(B:
+$B$3$N$h$&$J%7%9%F%`$G$O40A4$J%9%H%i%$%W$r>o$K%G%#%9%/$H$N4V$GE>Aw$9$k$h$&$G!"(B
+$BBg$-$J%9%H%i%$%W$O@-G=$K5U8z2L$H$J$j$^$9!#(B
+.Nm
+$B$G$O$3$NLdBj$NHo32$r<u$1$^$;$s(B:
+$B$9$Y$F$N%G%#%9%/E>Aw$r:GE,2=$7!"ITMW$J%G!<%?$rE>Aw$7$J$$$+$i$G$9!#(B
+.Pp
+$BNI$/CN$i$l$?%Y%s%A%^!<%/%W%m%0%i%`$G??$NJ#?t%"%/%;%9>uBV(B
+(100 $B$r1[$($kF1;~%f!<%6(B) $B$r%F%9%H$9$k$b$N$O$J$$$N$G!"(B
+$B$3$N<gD%$N@5$7$5$r>ZL@$9$k$3$H$O:$Fq$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
+.Pp
+$B$3$l$i$N$3$H$r9M$($k$H!"<!$N;v9`$,(B
+.Nm
+$B%\%j%e!<%`$N@-G=$K1F6A$7$^$9(B:
+.Bl -bullet
+.It
+$B%9%H%i%$%T%s%0$O!"J#?t%"%/%;%9$N$_$N@-G=$r8~>e$7$^$9!#(B
+$B3FMW5a$,0c$&%G%#%9%/>e$K$"$k3NN($,A}2C$9$k$+$i$G$9!#(B
+.It
+$BJ#?t%I%i%$%V$K$^$?$,$k%3%s%+%A%M!<%H2=(B UFS $B%U%!%$%k%7%9%F%`$b$^$?!"(B
+$BJ#?t%U%!%$%k%"%/%;%9$N@-G=$r8~>e$7$^$9!#(B
+UFS $B$O!"%U%!%$%k%7%9%F%`$r%7%j%s%@%0%k!<%W$KJ,3d$7!"(B
+$B%U%!%$%k$rC10l$N%7%j%s%@%0%k!<%W$KCV$3$&$H$9$k$+$i$G$9!#(B
+$B0lHLE*$K!"%9%H%i%$%T%s%0$[$I$O8z2L$,$"$j$^$;$s!#(B
+.It
+$B%_%i!<%j%s%0$O!"FI$_9~$_J#?t%"%/%;%9$N@-G=$r8~>e2DG=$G$9!#(B
+$B%G%U%)%k%H$G$O(B
+.Nm
+$B$O!"O"B3$9$kJ#?t$NFI$_9~$_$r!"(B
+$BO"B3$9$kJ#?t$N%W%l%C%/%9$KBP$7$FH/9T$9$k$+$i$G$9!#(B
+.It
+$B%_%i!<%j%s%0$O!"J#?t%"%/%;%9$+C10l%"%/%;%9$+$K4X$o$i$:!"(B
+$B$9$Y$F$N=q$-9~$_$N@-G=$rNt2=$5$;$^$9!#(B
+$BN>J}$N%W%l%C%/%9$KBP$7!"%G!<%?$r=q$-9~$`I,MW$,$"$k$+$i$G$9!#(B
+$B$3$l$O!"A0=R$N%_%i!<%j%s%0@_Dj$K$*$1$k%5%V%G%#%9%/$N%l%$%"%&%H$r@bL@$7$^$9(B:
+$B3F%W%l%C%/%9Cf$NBP1~$9$k%5%V%G%#%9%/$,JL$NJ*M}%G%#%9%/$K$"$k>l9g!"(B
+$B=q$-9~$_%3%^%s%I$OJBNs$KH/9T2DG=$G$9!#(B
+$B$7$+$7!"F1$8J*M}%G%#%9%/$K$"$k>l9g!"C`<!E*$K<B9T$5$l$F$7$^$$$^$9!#(B
+.It
+RAID-5 $B$NFI$_9~$_$O!"(B
+$B%9%H%i%$%W2=$NFI$_9~$_$HK\<AE*$KF1$89MN8$9$Y$-E@$,$"$j$^$9!#(B
+$B$?$@$7!"%9%H%i%$%W2=%W%l%C%/%9$,%_%i!<2=%\%j%e!<%`$N0lIt$G$"$k>l9g$r=|$-$^$9!#(B
+$B$3$N>l9g!"%_%i!<2=%\%j%e!<%`$NJ}$,@-G=$,NI$/$J$j$^$9!#(B
+.It
+RAID-5 $B$N=q$-9~$_$O!"%9%H%i%$%W2=$N=q$-9~$_$NLs(B 25% $B$NB.EY$G$9(B:
+$B=q$-9~$_$r9T$&$K$O!"(B
+.Nm
+$B$O$^$:%G!<%?%V%m%C%/$HBP1~$9$k%Q%j%F%#%V%m%C%/$rFI$_9~$_!"(B
+$B$$$/$P$/$+$N7W;;$r9T$$!"(B
+$B%Q%j%F%#%V%m%C%/$H%G!<%?%V%m%C%/$r=q$-La$9I,MW$,$"$j$^$9$N$G!"(B
+$B%9%H%i%$%W2=%W%l%C%/%9$KBP$9$k=q$-9~$_$N(B 4 $BG\$NE>Aw2s?t$H$J$j$^$9!#(B
+$B0lJ}!"$3$l$O%_%i!<%j%s%0$N%3%9%H$K$h$jAj;&$5$l$^$9$N$G!"(B
+$BC10l(B RAID-5 $B%W%l%C%/%9$N%\%j%e!<%`$X$N=q$-9~$_$O!"(B
+2 $B8D$N%9%H%i%$%W2=%W%l%C%/%9$+$i$J$k@5$7$/@_Dj$5$l$?%\%j%e!<%`$X$N(B
+$B=q$-9~$_B.EY$NH>J,$H$J$j$^$9!#(B
+.It
+.Nm
+$B$N@_Dj$,JQ$o$k$H(B
+($BNc$($P!"%*%V%8%'%/%H$NDI2C$d:o=|!"$^$?$O%*%V%8%'%/%H$N>uBVJQ99(B)$B!"(B
+.Nm
+$B$O(B 128 kB $B$^$G$N99?7$5$l$?@_Dj$r3F%I%i%$%V$K=q$-9~$_$^$9!#(B
+$B%I%i%$%V?t$,A}2C$9$k$H!"$3$N;~4V$,D9$/$J$j$^$9!#(B
+.El
+.Ss Vinum $B%\%j%e!<%`>e$K%U%!%$%k%7%9%F%`$r:n@.$9$k(B
+.Nm
+$B%\%j%e!<%`>e$K%U%!%$%k%7%9%F%`$r:n@.$9$kA0$K(B
+.Nm disklabel
+$B$r<B9T$9$kI,MW$O$"$j$^$;$s!#(B
+raw $B%G%P%$%9$KBP$7$F(B
+.Nm newfs
+$B$@$1$r<B9T$7$F$/$@$5$$!#(B
+.Fl v
+$B%*%W%7%g%s$r;HMQ$7$F!"(B
+$B%G%P%$%9$,%Q!<%F%#%7%g%s$KJ,3d$5$l$J$$$h$&$K$7$F$/$@$5$$!#(B
+$BNc$($P!"%\%j%e!<%`(B
+.Pa mirror
+$B>e$K%U%!%$%k%7%9%F%`$r:n@.$9$k$K$O!"<!$N%3%^%s%I$rF~NO$7$^$9(B:
+.Bd -literal -offset 4n
+# newfs -v /dev/vinum/rmirror
+.Ed
+.Pp
+.Pa rmirror
+$B$H$$$&L>A0$,(B raw $B%G%P%$%9$r;2>H$7$F$$$k$3$H$KCm0U$7$F$/$@$5$$!#(B
+.Sh $B$=$NB>$N$3$H$,$i(B
+.Nm
+$B$N@_Dj$K4X78$9$k?t8D$N$=$NB>$N$3$H$,$i$,$"$j$^$9(B:
+.Bl -bullet
+.It
+$BJ#?t$N%I%i%$%V$rC10l%G%#%9%/>e$K:n@.$7$F$b!"Mx1W$O$"$j$^$;$s!#(B
+$B3F%I%i%$%V$O(B 131.5 kB $B$N%G!<%?$r%i%Y%k$H@_Dj>pJs$K;HMQ$7!"(B
+$B@_DjJQ99;~$K@-G=$,Nt2=$7$^$9!#(B
+$BE,@Z$JBg$-$5$N%5%V%G%#%9%/$r;HMQ$7$F$/$@$5$$!#(B
+.It
+$B%3%s%+%A%M!<%H2=(B
+.Nm
+$B%W%l%C%/%9$NBg$-$5$rA}$9$3$H$O$G$-$^$9$,!"(B
+$B8=:_$N$H$3$m%9%H%i%$%W2=%W%l%C%/%9$H(B RAID-5 $B%W%l%C%/%9$G$OA}$;$^$;$s!#(B
+$B8=:_$N$H$3$m4{B8$N(B UFS $B%U%!%$%k%7%9%F%`$NBg$-$5$rA}$9$3$H$b$G$-$^$;$s!#(B
+$B%W%l%C%/%9$*$h$S%U%!%$%k%7%9%F%`$r3HD%2DG=$H$9$k7W2h$O$"$j$^$9!#(B
+.El
 .Sh $BJ,$+$j$K$/$$;EMM(B (GOTCHAS)
 $B<!$N;vJA$O%P%0$G$O$"$j$^$;$s$7!"B8:_$9$kM}M3$,$"$k$N$G$9$,!"(B
 $B:.Mp$r0z$-5/$3$9$b$N$G$9!#(B
@@ -1150,7 +1969,7 @@
 $B%Q!<%F%#%7%g%s%?%$%W$O!"8=:_$N$H$3$m!"(B``unused'' $B$G$"$kI,MW$,$"$j$^$9!#(B
 .It
 $BJ#?t$N%W%l%C%/%9$+$i$J$k%\%j%e!<%`:n@.;~$K!"(B
-.Nm 
+.Nm
 $B$O%W%l%C%/%9$r<+F0E*$K$O=i4|2=$7$^$;$s!#(B
 $B$3$l$O!"FbMF$K$D$$$F$OJ,$+$i$J$/$F$b!"(B
 $B$3$l$i$N4V$K$O3N$+$K0l4S@-$,$J$$$H$$$&$3$H$r0UL#$7$F$$$^$9!#(B
@@ -1172,8 +1991,8 @@
 .Bl -bullet
 .It
 $B%W%l%C%/%9$r:n@.$7!"$=$l$i$r(B
-.Nm vinum init
-$B$G=i4|2=$7$^$9!#(B
+.Nm vinum start
+$B$GF14|$7$^$9!#(B
 .It
 $B%-!<%o!<%I(B
 .Ar setupstate
@@ -1200,14 +2019,14 @@
 $B>uBVA+0\$K$OHs>o$KJ,$jFq$$$b$N$,$"$j$^$9!#(B
 $B;v<B!"$3$l$,%P%0$G$"$k$N$+;EMM$G$"$k$N$+$OL@$+$G$O$"$j$^$;$s!#(B
 .Ar reborn
-$B%5%V%G%#%9%/$J$I$N!"4qL/$J>uBV$K$J$C$?%*%V%8%'%/%H$r3+;O$G$-$J$$>l9g$K$O!"(B
+$B%5%V%G%#%9%/$J$I$N!"4qL/$J>uBV$K$J$C$?%*%V%8%'%/%H$r5/F0$G$-$J$$>l9g$K$O!"(B
 .Nm stop
 $B$^$?$O(B
 .Nm stop Ar -f
 $B$N%3%^%s%I$r;HMQ$7$F!"$^$:(B
 .Ar stopped
 $B>uBV$KA+0\$5$;$F$/$@$5$$!#(B
-$B$3$l$,>e<j$/$$$1$P!"%*%V%8%'%/%H$r3+;O$G$-$k$O$:$G$9!#(B
+$B$3$l$,>e<j$/$$$1$P!"%*%V%8%'%/%H$r5/F0$G$-$k$O$:$G$9!#(B
 $B4JC1$JJ}K!$G$O>e<j$/$$$+$J$/$F!"$3$l$,M#0l$N2sI|<jCJ$G$"$k>l9g!"(B
 $B$=$N>u67$rJs9p$7$F$/$@$5$$!#(B
 .It
@@ -1231,6 +2050,52 @@
 .Pp
 $B8E$$%P!<%8%g%s$N(B kld $B$d%f!<%6%i%s%I%W%m%0%i%`$r;H$&$H!"(B
 $B$3$N%(%i!<$,H/@8$9$k$3$H$,$"$j$^$9!#(B
+.It
+.Nm
+$B%I%i%$%V$O(B UNIX $B%G%#%9%/%Q!<%F%#%7%g%s$G$"$j!"%Q!<%F%#%7%g%s%?%$%W(B
+.Ar vinum
+$B$r;HMQ$7$^$9!#(B
+$B$3$l$O!"%Q!<%F%#%7%g%s%?%$%W$,(B
+.Ar 4.2BSD
+$B$H$J$k(B
+.Nm ccd
+$B$H$O0c$$$^$9!#(B
+$B$3$N(B ccd $B$NF0:n$O!"<+J,$NB-85$r$9$/$&$3$H$K$J$j$^$9(B:
+.Nm ccd 
+$B$G$O!"MF0W$K%U%!%$%k%7%9%F%`$r>e=q$-$G$-$F$7$^$$$^$9!#(B
+.Nm
+$B$G$O$=$N$h$&$J$3$H$O5v$7$^$;$s!#(B
+.Pp
+$BF1MM$NM}M3$G!"(B
+.Nm vinum Ar start
+$B%3%^%s%I$O!"%Q!<%F%#%7%g%s(B
+.Ar c
+$B>e$N%I%i%$%V$r<u$1IU$1$^$;$s!#(B
+$B%Q!<%F%#%7%g%s(B
+.Ar c
+$B$O!"%G%#%9%/A4BN$rI=8=$9$k$?$a$K%7%9%F%`$,;HMQ$7!"%?%$%W(B
+.Ar unused
+$B$G$"$kI,MW$,$"$j$^$9!#(B
+$B$3$3$K$OL@3N$JL7=b$,$"$k$N$G!"(B
+.Ar c
+$B%Q!<%F%#%7%g%s$r;HMQ$7$J$$$3$H$K$h$j(B
+.Nm
+$B$OLdBj$r2r7h$7$F$$$^$9!#(B
+.It
+.Nm vinum Ar read
+$B%3%^%s%I$NJ8K!$O!"EG$-5$$r:E$9$b$N$G$9!#(B
+$B$3$l$,M#0l$N(B
+.Nm vinum
+$B5/F0$N$?$a$N%3%^%s%I$G$7$?$,!":#$N9%$^$7$$J}K!$O(B
+.Nm vinum Ar start
+$B$G$9!#(B
+.Nm vinum Ar read
+$B$O@0Hw$N$_$K;HMQ$9$Y$-$G$9!#(B
+$BJ8K!$,JQ99$5$l$?$N$G!"0z$-?t$,(B
+.Pa /dev/da0
+$B$N$h$&$J%G%#%9%/%9%i%$%9$G$"$j(B
+.Pa /dev/da0e
+$B$N$h$&$J%Q!<%F%#%7%g%s$G$O$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B
 .El
 .\"XXX.Sh BUGS
 .Sh $B4XO"%U%!%$%k(B
@@ -1256,10 +2121,11 @@
 .Sh $B4XO"9`L\(B
 .Xr vinum 4 ,
 .Xr disklabel 8 ,
-.Nm http://www.lemis.com/vinum.html ,
-.Nm http://www.lemis.com/vinum-debugging.html .
+.Xr newfs 8 ,
+.Pa http://www.lemis.com/vinum.html ,
+.Pa http://www.lemis.com/vinum-debugging.html .
 .Sh $B:n<T(B
-Greg Lehey 
+Greg Lehey
 .Pa <grog@lemis.com>
 .Sh $BNr;K(B
 .Nm

----Next_Part(Sun_Apr_25_21:28:07_1999_518)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Description: vinum.8.diff English
Content-Disposition: attachment; filename=vinum.8.eng.diff

diff -urNP man8/vinum.8 man8/vinum.8
--- man8/vinum.8	Fri Mar 12 14:25:25 1999
+++ man8/vinum.8	Sat Apr 17 19:07:42 1999
@@ -1,8 +1,43 @@
 .\"  Hey, Emacs, edit this file in -*- nroff-fill -*- mode
+.\"-
+.\" Copyright (c) 1997, 1998
+.\"	Nan Yang Computer Services Limited.  All rights reserved.
 .\"
-.Dd 15 January 1999
+.\"  This software is distributed under the so-called ``Berkeley
+.\"  License'':
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"	This product includes software developed by Nan Yang Computer
+.\"      Services Limited.
+.\" 4. Neither the name of the Company nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"  
+.\" This software is provided ``as is'', and any express or implied
+.\" warranties, including, but not limited to, the implied warranties of
+.\" merchantability and fitness for a particular purpose are disclaimed.
+.\" In no event shall the company or contributors be liable for any
+.\" direct, indirect, incidental, special, exemplary, or consequential
+.\" damages (including, but not limited to, procurement of substitute
+.\" goods or services; loss of use, data, or profits; or business
+.\" interruption) however caused and on any theory of liability, whether
+.\" in contract, strict liability, or tort (including negligence or
+.\" otherwise) arising in any way out of the use of this software, even if
+.\" advised of the possibility of such damage.
+.\"
+.\" $Id: vinum.8,v 1.5.2.3 1999/04/06 08:59:36 grog Exp $
+.\"
+.Dd 28 March 1999
 .Dt vinum 8
-.Os FreeBSD
 .Sh NAME
 .Nm vinum
 .Nd Logical Volume Manager control program
@@ -12,13 +47,14 @@
 .Op Fl options
 .Sh COMMANDS
 .Cd create
+.Fl f
 .Ar description-file
 .in +1i
-Create a volume as described in 
+Create a volume as described in
 .Ar description-file
 .in
 .\" XXX remove this
-.Cd attach Ar plex Ar volume 
+.Cd attach Ar plex Ar volume
 .Op Nm rename
 .Cd attach Ar subdisk Ar plex Ar [offset]
 .Op Nm rename
@@ -112,9 +148,15 @@
 .in +1i
 List information about volumes
 .in
+.Cd printconfig
+.Pa file
+.in +1i
+Write a copy of the current configuration to
+.Pa file .
+.in
 .Cd makedev
 .in +1i
-Remake the device nodes in 
+Remake the device nodes in
 .Ar /dev/vinum .
 .in
 .Cd quit
@@ -161,13 +203,19 @@
 Reset statistisc counters for the specified objects, or for all objects if none
 are specified.
 .in
-.Cd rm 
+.Cd rm
 .Op Fl f
 .Op Fl r
 .Ar volume | plex | subdisk
 .in +1i
 Remove an object
 .in
+.Cd saveconfig
+.in +1i
+Save
+.Nm
+configuration to disk.
+.in
 .ig
 XXX
 .Cd set
@@ -192,7 +240,9 @@
 .Op Fl f
 .Op volume | plex | subdisk
 .in +1i
-Terminate access the objects
+Terminate access to the objects, or stop
+.Nm
+if no parameters are specified.
 .in
 .Sh DESCRIPTION
 .Nm
@@ -204,7 +254,7 @@
 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
 .Nm vinum .
-In interactive mode, 
+In interactive mode,
 .Nm
 maintains a command line history.
 .Ss OPTIONS
@@ -213,7 +263,7 @@
 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 
+command ignores the
 .Fl v
 and
 .Fl V
@@ -222,7 +272,7 @@
 .It Cd -v
 The
 .Nm -v
-option can be used with any command to request more detailed information.  
+option can be used with any command to request more detailed information.
 .It Cd -V
 The
 .Nm -V
@@ -246,7 +296,9 @@
 .It Cd -r
 The
 .Nm -r
-(``recursive'') option is used by the list commands to display information not
+.if t (``recursive'')
+.if n ("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
@@ -287,7 +339,7 @@
 .Nm
 renames the object (and in the case of a plex, any subordinate subdisks) to fit
 in with the default
-.Nm 
+.Nm
 naming convention.
 .Pp
 A number of considerations apply to attaching subdisks:
@@ -308,7 +360,7 @@
 first subdisk will have offset 0, the second offset 256k, the third 512k, etc.
 This calculation ignores parity blocks in RAID-5 plexes.
 .El
-.It Nm create Ar description-file
+.It Nm create Fl f Ar description-file
 .sp
 .Nm
 .Ar create
@@ -317,14 +369,35 @@
 .Nm
 object, there is no interactive interface to this function.  See the section
 CONFIGURATION FILE below for more information.
+.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.
+.Pp
+Normally the
+.Nm create
+command will not change the names of existing
+.Nm
+drives, in order to avoid accidentally erasing them.  The correct way to dispose
+of no longer wanted
+.Nm
+drives is to reset the configuration with the
+.Nm resetconfig
+command.  In some cases, however, it may be necessary to create new data on
+.Nm
+drives which can no longer be started.  In this case, use the
+.Nm create Fl f
+command.
 .It Nm debug
 .Pp
 .Nm
 .Ar debug
 is used to enter the remote kernel debugger.  It is only activated if
 .Nm
-is built with the 
-.Ar VINUMDEBUG 
+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
 connection for a kernel debugger, it will be necessary to reset the system and
@@ -342,11 +415,11 @@
 Show buffer information during requests
 .It DEBUG_NUMOUTPUT (2)
 .br
-Show the value of 
+Show the value of
 .Dv vp->v_numoutput.
 .It DEBUG_RESID (4)
 .br
-Go into debugger in 
+Go into debugger in
 .Fd complete_rqe.
 .It DEBUG_LASTREQS (8)
 .br
@@ -354,6 +427,12 @@
 .It DEBUG_REVIVECONFLICT (16)
 .br
 Print info about revive conflicts.
+.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.
 .It DEBUG_REMOTEGDB (256)
 .br
 Go into remote
@@ -362,11 +441,11 @@
 .Nm debug
 command is issued.
 .El
-.It Nm detach Op Fl f 
+.It Nm detach Op Fl f
 .Ar plex
 .if n .sp -1v
 .if t .sp -.6v
-.It Nm detach Op Fl f 
+.It Nm detach Op Fl f
 .Ar subdisk
 .sp
 .Nm
@@ -377,8 +456,11 @@
 .Fl f
 option is specified.  If the object is named after the object above it (for
 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.
+by prepending the text 
+.if t ``ex-'' 
+.if n "ex-" 
+(for example, ex-vol1.p7.s0).  If necessary, the name will be truncated in the
+process.
 .Pp
 .Nm detach
 does not reduce the number of subdisks in a striped or RAID-5 plex.  Instead,
@@ -391,7 +473,7 @@
 .Ar info
 displays information about
 .Nm
-memory usage.  This is intended primarily for debugging.  With the 
+memory usage.  This is intended primarily for debugging.  With the
 .Fl v
 option, it will give detailed information about the memory areas in use.
 .Pp
@@ -424,7 +506,7 @@
 14:40:00.685547 4DN Write 0xf2361f40    0x427   0x104109        8192    19      0       0       0
 .Ed
 .Pp
-The 
+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%
@@ -439,7 +521,7 @@
 field contains information related to the sequence of events in the request
 chain.  The digit
 .Ar 1
-to 
+to
 .Ar 6
 indicates the approximate sequence of events, and the two-letter abbreviation is
 a mnemonic for the location
@@ -463,10 +545,10 @@
 In the following requests,
 .Ar Dev
 is the device number of the associated disk partition,
-.Ar Offset 
+.Ar Offset
 is the offset from the beginning of the partition,
 .Ar SD
-is the subdisk index in 
+is the subdisk index in
 .Dv vinum_conf ,
 .Ar SDoff
 is the offset from the beginning of the subdisk,
@@ -478,29 +560,29 @@
 (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 
+is also logged in
 .Fd launch_requests.
 .It 4DN
-(done) is called from 
+(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 
+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 
+(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 
+(RAID-5 parity) is called from
 .Fd complete_raid5_write
 and represents the data written to a RAID-5 parity stripe after calculating
 parity.
@@ -514,9 +596,9 @@
 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 
+.Nm
 initializes all subdisks of a plex in parallel.  Since this operation can take a
-long time, it is performed in the background.  
+long time, it is performed in the background.
 .Nm
 prints a console message when the initialization is complete.
 .It Nm label
@@ -528,7 +610,7 @@
 .Ar ufs
 style volume label on a volume.  It is a simple alternative to an appropriate
 call to
-.Ar disklabel . 
+.Ar disklabel .
 This is needed because some
 .Ar ufs
 commands still read the disk to find the label instead of using the correct
@@ -599,8 +681,8 @@
 objects.  The commands
 .Ar lv ,
 .Ar lp ,
-.Ar ls 
-and 
+.Ar ls
+and
 .Ar ld
 commands list only volumes, plexes, subdisks and drives respectively.  This is
 particularly useful when used without parameters.
@@ -629,26 +711,51 @@
 entering the
 .Ar EOF
 character.
+.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.
 .It Nm read
 .Ar disk Op disk...
 .Pp
 The
 .Nm read
 command scans the specified disks for
-.Nm 
+.Nm
 partitions containing previously created configuration information.  It reads
 the configuration in order from the most recently updated to least recently
 updated configuration.
 .Nm
 maintains an up-to-date copy of all configuration information on each disk
-partition.  You must specify all of the partitions in a configuration as the
+partition.  You must specify all of the slices in a configuration as the
 parameter to this command.
-.Nm
+.Pp
+The
 .Nm read
-will accept the names of non-Vinum partitions, so you can specify all partitions
-upon which a
+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
-partition might be resident to this command.
+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.
 .It Nm rename
 .Op Fl r
 .Ar [ drive | subdisk | plex | volume ]
@@ -700,14 +807,14 @@
 .Fi vinumvar.h
 for more information.
 .\" XXX put it in here when it's finalized
-Use the 
+Use the
 .Nm resetstats
 command to reset these counters.  In conjunction with the
 .Fl r
-option, 
+option,
 .Nm
 also resets the counters of subordinate objects.
-.It Nm rm 
+.It Nm rm
 .Op Fl f
 .Op Fl r
 .Ar volume | plex | subdisk
@@ -740,6 +847,12 @@
 .Fl r
 flag, it will remove both the plexes and the subdisks which belong to the
 plexes.
+.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.
 .ig
 .It Nm set
 .Op Fl f
@@ -771,23 +884,100 @@
 .Op volume | plex | subdisk
 .Pp
 .Nm start
-starts one or more
+starts (brings into to the
+.Ar up
+state) one or more
+.Nm
+objects.
+.Pp
+If no object names are specified,
 .Nm
-objects.  If no object names are specified,
-.Nm 
 scans the disks known to the system for
 .Nm
 drives and then reads in the configuration as described under the
 .Nm read
-command.  The
+commands.  The
 .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.
 .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
+command.  Reset bit 4 of the daemon options mask to re-enable configuration
+saves.
+.Pp
 If object names are specified,
 .Nm
-starts them.
+starts them.  Normally this operation is only of use with subdisks.  The action
+depends on the current state of the object:
+.Bl -bullet
+.It
+If the
+object is already in the
+.Ar up
+state,
+.Nm
+does nothing.
+.It
+If the object is a subdisk in the
+.Ar down
+or
+.Ar reborn
+states,
+.Nm
+changes it to the
+.Ar up
+state.
+.It
+If the object is a subdisk in the
+.Ar empty
+state, the change depends on the subdisk.  If it is part of a plex which is part
+of a volume which contains other plexes,
+.Nm
+places the subdisk in the
+.Ar reviving
+state and attempts to copy the data from the volume.  When the operation
+completes, the subdisk is set into the
+.Ar up
+state.  If it is part of a plex which is part of a volume which contains no
+other plexes, or if it is not part of a plex,
+.Nm
+brings it into the
+.Ar up
+state immediately.
+.It
+If the object is a subdisk in the
+.Ar reviving
+state,
+.Nm
+continues the
+.Ar revive
+operation offline.  When the operation completes, the subdisk is set into the
+.Ar up
+state.
+.El
+.Pp
+When a subdisk comes into the
+.Ar up
+state,
+.Nm
+automatically checks the state of any plex and volume to which it may belong and
+changes their state where appropriate.
+.Pp
+If the object is a volume or a plex,
+.Nm start
+currently has no effect: it checks the state of the subordinate subdisks (and
+plexes in the case of a volume) and sets the state of the object accordingly.
+In a later version, this operation will cause the subdisks
 .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
@@ -796,17 +986,41 @@
 .Op Fl f
 .Op volume | plex | subdisk
 .Pp
+If no parameters are specified,
 .Nm stop
-disables access to the specified objects and any subordinate objects.  It does
-not remove the objects from the configuration.  They can be accessed again after
-a
-.Nm start 
+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
+.Nm start
 command.
 .Pp
-By default, 
+By default,
 .Nm
-does not remove active objects.  For example, you cannot remove a plex which is
-attached to an active volume, and you cannot remove a volume which is open.  The
+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
 .Fl f
 option tells
 .Nm
@@ -834,7 +1048,7 @@
 .Pp
 .Bl -hang -width 4n
 .It Nm volume
-.Ar name 
+.Ar name
 .Op options
 .Pp
 Define a volume with name
@@ -846,7 +1060,7 @@
 .It Nm plex Ar plexname
 Add the specified plex to the volume.  If
 .Ar plexname
-is specified as 
+is specified as
 .Ar * ,
 .Nm
 will look for the definition of the plex as the next possible entry in the
@@ -856,7 +1070,7 @@
 .Ar read policy
 for the volume.
 .Ar policy
-may be either 
+may be either
 .Nm round
 or
 .Nm prefer Ar plexname .
@@ -868,6 +1082,7 @@
 .Ar prefer
 read policy reads from the specified plex every time.
 .It Nm setupstate
+.Pp
 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
@@ -900,7 +1115,7 @@
 .Pp
 Specify the organization of the plex.
 .Ar organization
-can be one of 
+can be one of
 .Ar concat ,
 .Ar striped
 or
@@ -908,7 +1123,7 @@
 For
 .Ar striped
 and
-.Ar raid5 
+.Ar raid5
 plexes, the parameter
 .Ar stripesize
 must be specified, while for
@@ -924,8 +1139,9 @@
 .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
-individual requests over multiple disks.  The increase in concurrency due to
-this mapping will not make up for the increase in latency.  A good guideline for
+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
 stripe size is between 256 kB and 512 kB.
 .Pp
 A striped plex must have at least two subdisks (otherwise it is a concatenated
@@ -973,9 +1189,13 @@
 .sp
 .It Nm length Ar length
 Specify the length of the subdisk.  This keyword must be specified.  There is no
-default.
+default, but the value 0 may be specified to mean 
+.if t ``use the largest available contiguous free area on the drive''. 
+.if n "use the largest available contiguous free area on the drive". 
+If the drive is empty, this means that the entire drive will be used for the
+subdisk.
 .Nm length
-may be shortened to 
+may be shortened to
 .Nm len .
 .sp
 .It Nm plex Ar plex
@@ -1049,11 +1269,15 @@
 .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
+.Ar vinum
+in order to avoid overwriting file systems.  For compatibility reasons,
 .Nm
-this requirement will change to type
-.Ar vinum .
+currently accepts partitions of type
+.Ar unused ,
+but the next release will not allow this kind of partition.
+.Nm
+prints a warning message when reading a configuration from a partition of type
+.Ar unused .
 Use
 .Nm disklabel
 .Ar -e
@@ -1068,23 +1292,23 @@
   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*)
+  g:  1900741  2325984     vinum        0     0     0   # (Cyl. 1626*- 2955*)
 .Ed
 .sp
-In this example, partition 
+In this example, partition
 .Nm g
 may be used as a
 .Nm
-partition.  Partitions 
+partition.  Partitions
 .Nm a ,
-.Nm e 
+.Nm e
 and
 .Nm f
 may be used as
 .Nm UFS
 file systems or
 .Nm ccd
-partitions.  Partition 
+partitions.  Partition
 .Nm b
 is a swap partition, and partition
 .Nm c
@@ -1093,6 +1317,534 @@
 .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.
+.Sh HOW TO SET UP VINUM
+This section gives practical advice about how to implement a
+.Nm
+system.
+.Ss Where to put the data
+The first choice you need to make is where to put the data.  You need dedicated
+disk partitions for
+.Nm vinum .
+See the example under DRIVE LAYOUT CONSIDERATIONS above.  Choose partition type
+.Nm
+unless your version of
+.Xr disklabel 8
+does not understand this partition type, in which case you will need to use
+partition type
+.Nm unused
+until you update your version of
+.Xr disklabel 8 .
+Use the compatibility partition (for example,
+.Pa /dev/da0g )
+rather than the true partition name (such as
+.Pa /dev/da0s1g ).
+.Nm
+currently uses the compatibility partition only for the
+.Nm start
+command, so this way you can avoid problems.
+.Ss Designing volumes
+The way you set up
+.Nm
+volumes depends on your intentions.  There are a number of possibilities:
+.Bl -enum
+.It
+You may want to join up a number of small disks to make a reasonable sized file
+system.  For example, if you had five small drives and wanted to use all the
+space for a single volume, you might write a configuration file like:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+drive d4 device /dev/da5e
+drive d5 device /dev/da6e
+volume bigger
+ plex org concat
+   sd length 0 drive d1
+   sd length 0 drive d2
+   sd length 0 drive d3
+   sd length 0 drive d4
+   sd length 0 drive d5
+.Ed
+.Pp
+In this case, you specify the length of the subdisks as 0, which means 
+.if t ``use the largest area of free space that you can find on the drive''.
+.if n "use the largest area of free space that you can find on the drive".
+If the subdisk is the only subdisk on the drive, it will use all available
+space.
+.It
+You want to set up
+.Nm
+to obtain additional resilience against disk failures.  You have the choice of
+RAID-1, also called 
+.if t ``mirroring'', or RAID-5, also called ``parity''.
+.if n "mirroring", or RAID-5, also called "parity".
+.Pp
+To set up mirroring, create multiple plexes in a volume.  For example, to create
+a mirrored volume of 2 GB, you might create the following configuration file:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+volume mirror
+ plex org concat
+   sd length 2g drive d1
+ plex org concat
+   sd length 2g drive d2
+.Ed
+.Pp
+When creating mirrored drives, it is important to ensure that the data from each
+plex is on a different physical disk so that
+.Nm
+can access the complete address space of the volume even if a drive fails.
+Note that each plex requires as much data as the complete volume: in this
+example, the volume has a size of 2 GB, but each plex (and each subdisk)
+requires 2 GB, so the total disk storage requirement is 4 GB.
+.Pp
+To set up RAID-5, create a single plex of type
+.Ar raid5 .  
+For example, to create an equivalent resilient volume of 2 GB, you might use the
+following configuration file:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+drive d4 device /dev/da5e
+drive d5 device /dev/da6e
+volume raid
+ plex org raid5 512k
+   sd length 512m drive d1
+   sd length 512m drive d2
+   sd length 512m drive d3
+   sd length 512m drive d4
+   sd length 512m drive d5
+.Ed
+.Pp
+RAID-5 plexes require at least three subdisks, one of which is used for storing
+parity information and is lost for data storage.  The more disks you use, the
+greater the proportion of the disk storage can be used for data storage.  In
+this example, the total storage usage is 2.5 GB, compared to 4 GB for a mirrored
+configuration.  If you were to use the minimum of only three disks, you would
+require 3 GB to store the information, for example:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+volume raid
+ plex org raid5 512k
+   sd length 1g drive d1
+   sd length 1g drive d2
+   sd length 1g drive d3
+.Ed
+.Pp
+As with creating mirrored drives, it is important to ensure that the data from
+each subdisk is on a different physical disk so that
+.Nm
+can access the complete address space of the volume even if a drive fails.
+.It
+You want to set up
+.Nm
+to allow more concurrent access to a file system.  In many cases, access to a
+file system is limited by the speed of the disk.  By spreading the volume across
+multiple disks, you can increase the throughput in multi-access environments.
+This technique shows little or no performance improvement in single-access
+environments.
+.Nm
+uses a technique called 
+.if t ``striping'', 
+.if n "striping", 
+or sometimes RAID-0, to increase this concurrency of access.  The name RAID-0 is
+misleading: striping does not provide any redundancy or additional reliability.
+In fact, it decreases the reliability, since the failure of a single disk will
+render the volume useless, and the more disks you have, the more likely it is
+that one of them will fail.
+.Pp
+To implement striping, use a
+.Ar striped
+plex:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+drive d4 device /dev/da5e
+volume raid
+ plex org striped 512k
+   sd length 512m drive d1
+   sd length 512m drive d2
+   sd length 512m drive d3
+   sd length 512m drive d4
+.Ed
+.Pp
+A striped plex must have at least two subdisks, but the increase in performance
+is greater if you have a larger number of disks.
+.It
+You may want to have the best of both worlds and have both resilience and
+performance.  This is sometimes called RAID-10 (a combination of RAID-1 and
+RAID-0), though again this name is misleading.  With
+.Nm
+you can do this with the following configuration file:
+.Bd -literal -offset 4n
+drive d1 device /dev/da2e
+drive d2 device /dev/da3e
+drive d3 device /dev/da4e
+drive d4 device /dev/da5e
+volume raid
+ plex org striped 512k
+   sd length 512m drive d1
+   sd length 512m drive d2
+   sd length 512m drive d3
+   sd length 512m drive d4
+ plex org striped 512k
+   sd length 512m drive d4
+   sd length 512m drive d3
+   sd length 512m drive d2
+   sd length 512m drive d1
+.Ed
+.Pp
+Here the plexes are striped, increasing performance, and there are two of them,
+increasing reliablity.  Note that this example shows the subdisks of the second
+plex in reverse order from the first plex.  This is for performance reasons and
+will be discussed below.
+.El
+.Ss Creating the volumes
+Once you have created your configuration files, start
+.Nm
+and create the volumes.  In this example, the configuration is in the file
+.Pa configfile :
+.Bd -literal
+  # vinum create -v configfile
+     1: drive d1 device /dev/da2e
+     2: drive d2 device /dev/da3e
+     3: volume mirror
+     4:  plex org concat
+     5:    sd length 2g drive d1
+     6:  plex org concat
+     7:    sd length 2g drive d2
+  Configuration summary
+  
+  Drives:         2 (4 configured)
+  Volumes:        1 (4 configured)
+  Plexes:         2 (8 configured)
+  Subdisks:       2 (16 configured)
+  
+  Drive d1:       Device /dev/da2e
+                  Created on vinum.lemis.com at Tue Mar 23 12:30:31 1999
+                  Config last updated Tue Mar 23 14:30:32 1999
+                  Size:      60105216000 bytes (57320 MB)
+                  Used:       2147619328 bytes (2048 MB)
+                  Available: 57957596672 bytes (55272 MB)
+                  State: up
+                  Last error: none
+  Drive d2:       Device /dev/da3e
+                  Created on vinum.lemis.com at Tue Mar 23 12:30:32 1999
+                  Config last updated Tue Mar 23 14:30:33 1999 
+                  Size:      60105216000 bytes (57320 MB)
+                  Used:       2147619328 bytes (2048 MB)
+                  Available: 57957596672 bytes (55272 MB)
+                  State: up
+                  Last error: none
+  
+  Volume mirror:  Size: 2147483648 bytes (2048 MB)
+                  State: up
+                  Flags: 
+                  2 plexes
+                  Read policy: round robin
+  
+  Plex mirror.p0: Size:   2147483648 bytes (2048 MB)
+                  Subdisks:        1
+                  State: up
+                  Organization: concat
+                  Part of volume mirror
+  Plex mirror.p1: Size:   2147483648 bytes (2048 MB)
+                  Subdisks:        1
+                  State: up
+                  Organization: concat
+                  Part of volume mirror
+  
+  Subdisk mirror.p0.s0:
+                  Size:       2147483648 bytes (2048 MB)
+                  State: up
+                  Plex mirror.p0 at offset 0
+  
+  Subdisk mirror.p1.s0:
+                  Size:       2147483648 bytes (2048 MB)
+                  State: up
+                  Plex mirror.p1 at offset 0
+.Ed
+.Pp
+The
+.Fl v
+flag tells
+.Nm
+to list the file as it configures.  Subsequently it lists the current
+configuration in the same format as the
+.Nm list Fl v
+command.
+.Ss Creating more volumes
+Once you have created the
+.Nm 
+volumes, 
+.Nm
+keeps track of them in its internal configuration files.  You do not need to
+create them again.  In particular, if you run the
+.Nm create
+command again, you will create additional objects:
+.Bd -literal
+.if t .ps -2
+  # vinum create sampleconfig 
+  Configuration summary
+  
+  Drives:         2 (4 configured)
+  Volumes:        1 (4 configured)
+  Plexes:         4 (8 configured)
+  Subdisks:       4 (16 configured)
+  
+  D d1                    State: up       Device /dev/da2e        Avail: 53224/57320 MB (92%)
+  D d2                    State: up       Device /dev/da3e        Avail: 53224/57320 MB (92%)
+  
+  V mirror                State: up       Plexes:       4 Size:       2048 MB
+  
+  P mirror.p0           C State: up       Subdisks:     1 Size:       2048 MB
+  P mirror.p1           C State: up       Subdisks:     1 Size:       2048 MB
+  P mirror.p2           C State: up       Subdisks:     1 Size:       2048 MB
+  P mirror.p3           C State: up       Subdisks:     1 Size:       2048 MB
+  
+  S mirror.p0.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p1.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p2.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p3.s0          State: up       PO:        0  B Size:       2048 MB
+.if t .ps
+.Ed
+.Pp
+As this example (this time with the
+.Fl f
+flag) shows, re-running the
+.Nm create
+has created four new plexes, each with a new subdisk.  If you want to add other
+volumes, create new configuration files for them.  They do not need to reference
+the drives that
+.Nm
+already knows about.  For example, to create a volume
+.Pa raid
+on the four drives
+.Pa /dev/da1e ,
+.Pa /dev/da2e ,
+.Pa /dev/da3e 
+and
+.Pa /dev/da4e ,
+you only need to mention the other two:
+.Bd -literal
+  drive d3 device /dev/da1e
+  drive d4 device /dev/da4e
+  volume raid
+    plex org raid5 512k
+      sd size 2g drive d1
+      sd size 2g drive d2
+      sd size 2g drive d3
+      sd size 2g drive d4
+.Ed
+.Pp
+With this configuration file, we get:
+.Bd -literal
+  # vinum create newconfig
+  Configuration summary
+  
+  Drives:         4 (4 configured)
+  Volumes:        2 (4 configured)
+  Plexes:         5 (8 configured)
+  Subdisks:       8 (16 configured)
+  
+  D d1                    State: up       Device /dev/da2e        Avail: 51176/57320 MB (89%)
+  D d2                    State: up       Device /dev/da3e        Avail: 53220/57320 MB (89%)
+  D d3                    State: up       Device /dev/da1e        Avail: 53224/57320 MB (92%)
+  D d4                    State: up       Device /dev/da4e        Avail: 53224/57320 MB (92%)
+  
+  V mirror                State: down     Plexes:       4 Size:       2048 MB
+  V raid                  State: down     Plexes:       1 Size:       6144 MB
+  
+  P mirror.p0           C State: init     Subdisks:     1 Size:       2048 MB
+  P mirror.p1           C State: init     Subdisks:     1 Size:       2048 MB
+  P mirror.p2           C State: init     Subdisks:     1 Size:       2048 MB
+  P mirror.p3           C State: init     Subdisks:     1 Size:       2048 MB
+  P raid.p0            R5 State: init     Subdisks:     4 Size:       6144 MB
+  
+  S mirror.p0.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p1.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p2.s0          State: up       PO:        0  B Size:       2048 MB
+  S mirror.p3.s0          State: up       PO:        0  B Size:       2048 MB
+  S raid.p0.s0            State: empty    PO:        0  B Size:       2048 MB
+  S raid.p0.s1            State: empty    PO:      512 kB Size:       2048 MB
+  S raid.p0.s2            State: empty    PO:     1024 kB Size:       2048 MB
+  S raid.p0.s3            State: empty    PO:     1536 kB Size:       2048 MB
+.Ed
+.Pp
+Note the size of the RAID-5 plex: it is only 6 GB, although together its
+components use 8 GB of disk space.  This is because the equivalent of one
+subdisk is used for storing parity data.
+.Ss Restarting Vinum
+On rebooting the system, start
+.Nm
+with the 
+.Nm start 
+command:
+.Bd -literal
+  # vinum start
+.Ed
+.Pp
+This will start all the
+.Nm
+drives in the system.  If for some reason you wish to start only some of them,
+use the
+.Nm read
+command.
+.Ss Performance considerations
+A number of misconceptions exist about how to set up a RAID array for best
+performance.  In particular, most systems use far too small a stripe size.  The
+following discussion applies to all RAID systems, not just to
+.Nm vinum .
+.Pp
+The FreeBSD block I/O system issues requests of between .5kB and 60 kB; a
+typical mix is somewhere round 8 kB.  You can't stop any striping system from
+breaking a request into two physical requests, and if you do it wrong it can be
+broken into several.  This will result in a significant drop in performance: the
+decrease in transfer time per disk is offset by the order of magnitude greater
+increase in latency.
+.Pp
+With modern disk sizes and the FreeBSD block I/O system, you can expect to have
+a reasonably small number of fragmented requests with a stripe size between 256
+kB and 512 kB; with correct RAID implementations there is no obvious reason not
+to increase the size to 2 or 4 MB on a large disk.
+.Pp
+The easiest way to consider the impact of any transfer in a multi-access system
+is to look at it from the point of view of the potential bottleneck, the disk
+subsystem: how much total disk time does the transfer use?  Since just about
+everything is cached, the time relationship between the request and its
+completion is not so important: the important parameter is the total time that
+the request keeps the disks active, the time when the disks are not available to
+perform other transfers.  As a result, it doesn't really matter if the transfers
+are happening at the same time or different times.  In practical terms, the time
+we're looking at is the sum of the total latency (positioning time and
+rotational latency, or the time it takes for the data to arrive under the disk
+heads) and the total transfer time.  For a given transfer to disks of the same
+speed, the transfer time depends only on the total size of the transfer.
+.Pp
+Consider a typical news article or web page of 24 kB, which will probably be
+read in a single I/O.  Take disks with a transfer rate of 6 MB/s and an average
+positioning time of 8 ms, and a file system with 4 kB blocks.  Since it's 24 kB,
+we don't have to worry about fragments, so the file will start on a 4 kB
+boundary.  The number of transfers required depends on where the block starts:
+it's (S + F - 1) / S, where S is the stripe size in file system blocks, and F is
+the file size in file system blocks.
+.Pp
+.Bl -enum
+.It
+Stripe size of 4 kB.  You'll have 6 transfers.  Total subsystem load: 48 ms
+latency, 2 ms transfer, 50 ms total.
+.It   
+Stripe size of 8 kB.  On average, you'll have 3.5 transfers.  Total subsystem
+load: 28 ms latency, 2 ms transfer, 30 ms total.
+.It   
+Stripe size of 16 kB.  On average, you'll have 2.25 transfers.  Total subsystem
+load: 18 ms latency, 2 ms transfer, 20 ms total.
+.It   
+Stripe size of 256 kB.  On average, you'll have 1.08 transfers.  Total subsystem
+load: 8.6 ms latency, 2 ms transfer, 10.6 ms total.
+.It   
+Stripe size of 4 MB.  On average, you'll have 1.0009 transfers.  Total subsystem
+load: 8.01 ms latency, 2 ms transfer, 10.01 ms total.
+.El   
+.Pp
+It appears that some hardware RAID systems have problems with large stripes:
+they appear to always transfer a complete stripe to or from disk, so that a
+large stripe size will have an adverse effect on performance.
+.Nm
+does not suffer from this problem: it optimizes all disk transfers and does not
+transfer unneeded data.
+.Pp
+Note that no well-known benchmark program tests true multi-access conditions
+(more than 100 concurrent users), so it is difficult to demonstrate the validity
+of these statements.
+.Pp
+Given these considerations, the following factors affect the performance of a
+.Nm
+volume:
+.Bl -bullet
+.It
+Striping improves performance for multiple access only, since it increases the
+chance of individual requests being on different drives.
+.It
+Concatenating UFS file systems across multiple drives can also improve
+performance for multiple file access, since UFS divides a file system into
+cylinder groups and attempts to keep files in a single cylinder group.  In
+general, it is not as effective as striping.
+.It
+Mirroring can improve multi-access performance for reads, since by default
+.Nm
+issues consecutive reads to consecutive plexes.
+.It
+Mirroring decreases performance for all writes, whether multi-access or single
+access, since the data must be written to both plexes.  This explains the
+subdisk layout in the example of a mirroring configuration above: if the
+corresponding subdisk in each plex is on a different physical disk, the write
+commands can be issued in parallel, whereas if they are on the same physical
+disk, they will be performed sequentially.
+.It
+RAID-5 reads have essentially the same considerations as striped reads, unless
+the striped plex is part of a mirrored volume, in which case the performance of
+the mirrored volume will be better.
+.It
+RAID-5 writes are approximately 25% of the speed of striped writes: to perform
+the write,
+.Nm
+must first read the data block and the corresponding parity block, perform some
+calculations and write back the parity block and the data block, four times as
+many transfers as for writing a striped plex.  On the other hand, this is offset
+by the cost of mirroring, so writes to a volume with a single RAID-5 plex are
+approximately half the speed of writes to a correctly configured volume with two
+striped plexes.
+.It
+When the 
+.Nm
+configuration changes (for example, adding or removing objects, or the change of
+state of one of the objects),
+.Nm
+writes up to 128 kB of updated configuration to each drive.  The larger the
+number of drives, the longer this takes.
+.El
+.Ss Creating file systems on Vinum volumes
+You do not need to run
+.Nm disklabel
+before creating a file system on a
+.Nm
+volume.  Just run
+.Nm newfs
+against the raw device.  Use the
+.Fl v
+option to state that the device is not divided into partitions.  For example, to
+create a file system on volume
+.Pa mirror ,
+enter the following command:
+.Bd -literal -offset 4n
+# newfs -v /dev/vinum/rmirror
+.Ed
+.Pp
+Note the name
+.Pa rmirror ,
+indicating the raw device.
+.Sh Other considerations
+A number of other considerations apply to
+.Nm
+configuration:
+.Bl -bullet
+.It
+There is no advantage in creating multiple drives on a single disk.  Each drive
+uses 131.5 kB of data for label and configuration information, and performance
+will suffer when the configuration changes.  Use appropriately sized subdisks instead.
+.It
+It is possible to increase the size of a concatenated
+.Nm
+plex, but currently the size of striped and RAID-5 plexes cannot be increased.
+Currently the size of an existing UFS file system also cannot be increased, but
+it is planned to make both plexes and file systems extensible.
+.El
 .Sh GOTCHAS
 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
@@ -1101,19 +1853,33 @@
 .It
 .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
-``unused''.
+message 
+.if t ``wrong partition type''.  
+.if n "wrong partition type".  
+The partition type should be
+.Ar vinum ,
+though currently partitions of type
+.Ar unused
+are also accepted.
 .It
 When you create a volume with multiple plexes,
-.Nm 
+.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 
+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 .
-.sp
+In order to synchronize them with the first plex, you must
+.Nm start
+their subdisks, which causes
+.Nm
+to copy the data from a plex which is in the
+.Ar up
+state.  Depending on the size of the subdisks involved, this can take a long
+time.
+.Pp
 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 
+created, and other volume managers cheat by setting them
 .Ar up
 anyway.
 .Nm
@@ -1121,8 +1887,8 @@
 .Ar up :
 .Bl -bullet
 .It
-Create the plexes and then initialize them with
-.Nm vinum init .
+Create the plexes and then synchronize them with
+.Nm vinum start .
 .It
 Create the volume (not the plex) with the keyword
 .Ar setupstate ,
@@ -1137,7 +1903,7 @@
 are not really needed.  For reasons which I don't understand, however, I find
 that users frequently try the
 .Nm label
-and 
+and
 .Nm resetconfig
 commands, though especially
 .Nm resetconfig
@@ -1154,7 +1920,7 @@
 .Nm stop
 or
 .Nm stop Ar -f
-commands.  If that works, you should then be able to start it.  If you find 
+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
@@ -1174,6 +1940,46 @@
 .Ed
 .Pp
 This error may also occur if you use old versions of kld or userland program.
+.It
+.Nm
+drives are UNIX disk partitions and should have the partition type
+.Ar vinum .
+This is different from
+.Nm ccd ,
+which expects partitions of type
+.Ar 4.2BSD .
+This behaviour of ccd is an invitation to shoot yourself in the foot: with
+.Nm ccd 
+you can easily overwrite a file system.  
+.Nm
+will not permit this.
+.Pp
+For similar reasons, the
+.Nm vinum Ar start
+command will not accept a drive on partition
+.Ar c .
+Partition
+.Ar c
+is used by the system to represent the whole disk, and must be of type
+.Ar unused .
+Clearly there is a conflict here, which
+.Nm
+resolves by not using the
+.Ar c
+partition.
+.It
+The
+.Nm vinum Ar read
+command has a particularly emetic syntax.  Once it was the only way to start
+.Nm vinum ,
+but now the preferred method is with
+.Nm vinum Ar start .
+.Nm vinum Ar read
+should be used for maintenance purposes only.  Note that its syntax has changed,
+and the arguments must be disk slices, such as
+.Pa /dev/da0 ,
+not partitions such as
+.Pa /dev/da0e .
 .El
 .\"XXX.Sh BUGS
 .Sh FILES
@@ -1184,7 +1990,7 @@
 .br
 .Ar /dev/vinum/control
 - control device for
-.Nm vinum 
+.Nm vinum
 .br
 .Ar /dev/vinum/plex
 - directory containing device nodes for
@@ -1198,10 +2004,11 @@
 .Sh SEE ALSO
 .Xr vinum 4 ,
 .Xr disklabel 8 ,
-.Nm http://www.lemis.com/vinum.html ,
-.Nm http://www.lemis.com/vinum-debugging.html .
+.Xr newfs 8 ,
+.Pa http://www.lemis.com/vinum.html ,
+.Pa http://www.lemis.com/vinum-debugging.html .
 .Sh AUTHOR
-Greg Lehey 
+Greg Lehey
 .Pa <grog@lemis.com> .
 .Sh HISTORY
 The

----Next_Part(Sun_Apr_25_21:28:07_1999_518)----
