xref: /freebsd/lib/geom/raid/graid.8 (revision e4b0a90e771b94e4b043729a6f0f5564f1d01aca)
1*e4b0a90eSBrooks Davis.\" Copyright (c) 2010 Alexander Motin <mav@FreeBSD.org>
2*e4b0a90eSBrooks Davis.\" All rights reserved.
3*e4b0a90eSBrooks Davis.\"
4*e4b0a90eSBrooks Davis.\" Redistribution and use in source and binary forms, with or without
5*e4b0a90eSBrooks Davis.\" modification, are permitted provided that the following conditions
6*e4b0a90eSBrooks Davis.\" are met:
7*e4b0a90eSBrooks Davis.\" 1. Redistributions of source code must retain the above copyright
8*e4b0a90eSBrooks Davis.\"    notice, this list of conditions and the following disclaimer.
9*e4b0a90eSBrooks Davis.\" 2. Redistributions in binary form must reproduce the above copyright
10*e4b0a90eSBrooks Davis.\"    notice, this list of conditions and the following disclaimer in the
11*e4b0a90eSBrooks Davis.\"    documentation and/or other materials provided with the distribution.
12*e4b0a90eSBrooks Davis.\"
13*e4b0a90eSBrooks Davis.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
14*e4b0a90eSBrooks Davis.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15*e4b0a90eSBrooks Davis.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16*e4b0a90eSBrooks Davis.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
17*e4b0a90eSBrooks Davis.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18*e4b0a90eSBrooks Davis.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19*e4b0a90eSBrooks Davis.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20*e4b0a90eSBrooks Davis.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21*e4b0a90eSBrooks Davis.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22*e4b0a90eSBrooks Davis.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23*e4b0a90eSBrooks Davis.\" SUCH DAMAGE.
24*e4b0a90eSBrooks Davis.\"
25*e4b0a90eSBrooks Davis.\" $FreeBSD$
26*e4b0a90eSBrooks Davis.\"
27*e4b0a90eSBrooks Davis.Dd April 4, 2013
28*e4b0a90eSBrooks Davis.Dt GRAID 8
29*e4b0a90eSBrooks Davis.Os
30*e4b0a90eSBrooks Davis.Sh NAME
31*e4b0a90eSBrooks Davis.Nm graid
32*e4b0a90eSBrooks Davis.Nd "control utility for software RAID devices"
33*e4b0a90eSBrooks Davis.Sh SYNOPSIS
34*e4b0a90eSBrooks Davis.Nm
35*e4b0a90eSBrooks Davis.Cm label
36*e4b0a90eSBrooks Davis.Op Fl f
37*e4b0a90eSBrooks Davis.Op Fl o Ar fmtopt
38*e4b0a90eSBrooks Davis.Op Fl S Ar size
39*e4b0a90eSBrooks Davis.Op Fl s Ar strip
40*e4b0a90eSBrooks Davis.Ar format
41*e4b0a90eSBrooks Davis.Ar label
42*e4b0a90eSBrooks Davis.Ar level
43*e4b0a90eSBrooks Davis.Ar prov ...
44*e4b0a90eSBrooks Davis.Nm
45*e4b0a90eSBrooks Davis.Cm add
46*e4b0a90eSBrooks Davis.Op Fl f
47*e4b0a90eSBrooks Davis.Op Fl S Ar size
48*e4b0a90eSBrooks Davis.Op Fl s Ar strip
49*e4b0a90eSBrooks Davis.Ar name
50*e4b0a90eSBrooks Davis.Ar label
51*e4b0a90eSBrooks Davis.Ar level
52*e4b0a90eSBrooks Davis.Nm
53*e4b0a90eSBrooks Davis.Cm delete
54*e4b0a90eSBrooks Davis.Op Fl f
55*e4b0a90eSBrooks Davis.Ar name
56*e4b0a90eSBrooks Davis.Op Ar label | Ar num
57*e4b0a90eSBrooks Davis.Nm
58*e4b0a90eSBrooks Davis.Cm insert
59*e4b0a90eSBrooks Davis.Ar name
60*e4b0a90eSBrooks Davis.Ar prov ...
61*e4b0a90eSBrooks Davis.Nm
62*e4b0a90eSBrooks Davis.Cm remove
63*e4b0a90eSBrooks Davis.Ar name
64*e4b0a90eSBrooks Davis.Ar prov ...
65*e4b0a90eSBrooks Davis.Nm
66*e4b0a90eSBrooks Davis.Cm fail
67*e4b0a90eSBrooks Davis.Ar name
68*e4b0a90eSBrooks Davis.Ar prov ...
69*e4b0a90eSBrooks Davis.Nm
70*e4b0a90eSBrooks Davis.Cm stop
71*e4b0a90eSBrooks Davis.Op Fl fv
72*e4b0a90eSBrooks Davis.Ar name ...
73*e4b0a90eSBrooks Davis.Nm
74*e4b0a90eSBrooks Davis.Cm list
75*e4b0a90eSBrooks Davis.Nm
76*e4b0a90eSBrooks Davis.Cm status
77*e4b0a90eSBrooks Davis.Nm
78*e4b0a90eSBrooks Davis.Cm load
79*e4b0a90eSBrooks Davis.Nm
80*e4b0a90eSBrooks Davis.Cm unload
81*e4b0a90eSBrooks Davis.Sh DESCRIPTION
82*e4b0a90eSBrooks DavisThe
83*e4b0a90eSBrooks Davis.Nm
84*e4b0a90eSBrooks Davisutility is used to manage software RAID configurations, supported by the
85*e4b0a90eSBrooks DavisGEOM RAID class.
86*e4b0a90eSBrooks DavisGEOM RAID class uses on-disk metadata to provide access to software-RAID
87*e4b0a90eSBrooks Davisvolumes defined by different RAID BIOSes.
88*e4b0a90eSBrooks DavisDepending on RAID BIOS type and its metadata format, different subsets of
89*e4b0a90eSBrooks Davisconfigurations and features are supported.
90*e4b0a90eSBrooks DavisTo allow booting from RAID volume, the metadata format should match the
91*e4b0a90eSBrooks DavisRAID BIOS type and its capabilities.
92*e4b0a90eSBrooks DavisTo guarantee that these match, it is recommended to create volumes via the
93*e4b0a90eSBrooks DavisRAID BIOS interface, while experienced users are free to do it using this
94*e4b0a90eSBrooks Davisutility.
95*e4b0a90eSBrooks Davis.Pp
96*e4b0a90eSBrooks DavisThe first argument to
97*e4b0a90eSBrooks Davis.Nm
98*e4b0a90eSBrooks Davisindicates an action to be performed:
99*e4b0a90eSBrooks Davis.Bl -tag -width ".Cm destroy"
100*e4b0a90eSBrooks Davis.It Cm label
101*e4b0a90eSBrooks DavisCreate an array with single volume.
102*e4b0a90eSBrooks DavisThe
103*e4b0a90eSBrooks Davis.Ar format
104*e4b0a90eSBrooks Davisargument specifies the on-disk metadata format to use for this array,
105*e4b0a90eSBrooks Davissuch as "Intel".
106*e4b0a90eSBrooks DavisThe
107*e4b0a90eSBrooks Davis.Ar label
108*e4b0a90eSBrooks Davisargument specifies the label of the created volume.
109*e4b0a90eSBrooks DavisThe
110*e4b0a90eSBrooks Davis.Ar level
111*e4b0a90eSBrooks Davisargument specifies the RAID level of the created volume, such as:
112*e4b0a90eSBrooks Davis"RAID0", "RAID1", etc.
113*e4b0a90eSBrooks DavisThe subsequent list enumerates providers to use as array components.
114*e4b0a90eSBrooks DavisThe special name "NONE" can be used to reserve space for absent disks.
115*e4b0a90eSBrooks DavisThe order of components can be important, depending on specific RAID level
116*e4b0a90eSBrooks Davisand metadata format.
117*e4b0a90eSBrooks Davis.Pp
118*e4b0a90eSBrooks DavisAdditional options include:
119*e4b0a90eSBrooks Davis.Bl -tag -width ".Fl s Ar strip"
120*e4b0a90eSBrooks Davis.It Fl f
121*e4b0a90eSBrooks DavisEnforce specified configuration creation if it is officially unsupported,
122*e4b0a90eSBrooks Davisbut technically can be created.
123*e4b0a90eSBrooks Davis.It Fl o Ar fmtopt
124*e4b0a90eSBrooks DavisSpecifies metadata format options.
125*e4b0a90eSBrooks Davis.It Fl S Ar size
126*e4b0a90eSBrooks DavisUse
127*e4b0a90eSBrooks Davis.Ar size
128*e4b0a90eSBrooks Davisbytes on each component for this volume.
129*e4b0a90eSBrooks DavisShould be used if several volumes per array are planned, or if smaller
130*e4b0a90eSBrooks Daviscomponents going to be inserted later.
131*e4b0a90eSBrooks DavisDefaults to size of the smallest component.
132*e4b0a90eSBrooks Davis.It Fl s Ar strip
133*e4b0a90eSBrooks DavisSpecifies strip size in bytes.
134*e4b0a90eSBrooks DavisDefaults to 131072.
135*e4b0a90eSBrooks Davis.El
136*e4b0a90eSBrooks Davis.It Cm add
137*e4b0a90eSBrooks DavisCreate another volume on the existing array.
138*e4b0a90eSBrooks DavisThe
139*e4b0a90eSBrooks Davis.Ar name
140*e4b0a90eSBrooks Davisargument is the name of the existing array, reported by label command.
141*e4b0a90eSBrooks DavisThe rest of arguments are the same as for the label command.
142*e4b0a90eSBrooks Davis.It Cm delete
143*e4b0a90eSBrooks DavisDelete volume(s) from the existing array.
144*e4b0a90eSBrooks DavisWhen the last volume is deleted, the array is also deleted and its metadata
145*e4b0a90eSBrooks Daviserased.
146*e4b0a90eSBrooks DavisThe
147*e4b0a90eSBrooks Davis.Ar name
148*e4b0a90eSBrooks Davisargument is the name of existing array.
149*e4b0a90eSBrooks DavisOptional
150*e4b0a90eSBrooks Davis.Ar label
151*e4b0a90eSBrooks Davisor
152*e4b0a90eSBrooks Davis.Ar num
153*e4b0a90eSBrooks Davisarguments allow specifying volume for deletion.
154*e4b0a90eSBrooks Davis.Pp
155*e4b0a90eSBrooks DavisAdditional options include:
156*e4b0a90eSBrooks Davis.Bl -tag -width ".Fl f"
157*e4b0a90eSBrooks Davis.It Fl f
158*e4b0a90eSBrooks DavisDelete volume(s) even if it is still open.
159*e4b0a90eSBrooks Davis.El
160*e4b0a90eSBrooks Davis.It Cm insert
161*e4b0a90eSBrooks DavisInsert specified provider(s) into specified array instead of the first missing
162*e4b0a90eSBrooks Davisor failed components.
163*e4b0a90eSBrooks DavisIf there are no such components, mark disk(s) as spare.
164*e4b0a90eSBrooks Davis.It Cm remove
165*e4b0a90eSBrooks DavisRemove the specified provider(s) from the specified array and erase metadata.
166*e4b0a90eSBrooks DavisIf there are spare disks present, the removed disk(s) will be replaced by
167*e4b0a90eSBrooks Davisspares.
168*e4b0a90eSBrooks Davis.It Cm fail
169*e4b0a90eSBrooks DavisMark the given disks(s) as failed, removing from active use unless absolutely
170*e4b0a90eSBrooks Davisnecessary due to exhausted redundancy.
171*e4b0a90eSBrooks DavisIf there are spare disks present - failed disk(s) will be replaced with one
172*e4b0a90eSBrooks Davisof them.
173*e4b0a90eSBrooks Davis.It Cm stop
174*e4b0a90eSBrooks DavisStop the given array.
175*e4b0a90eSBrooks DavisThe metadata will not be erased.
176*e4b0a90eSBrooks Davis.Pp
177*e4b0a90eSBrooks DavisAdditional options include:
178*e4b0a90eSBrooks Davis.Bl -tag -width ".Fl f"
179*e4b0a90eSBrooks Davis.It Fl f
180*e4b0a90eSBrooks DavisStop the given array even if some of its volumes are opened.
181*e4b0a90eSBrooks Davis.El
182*e4b0a90eSBrooks Davis.It Cm list
183*e4b0a90eSBrooks DavisSee
184*e4b0a90eSBrooks Davis.Xr geom 8 .
185*e4b0a90eSBrooks Davis.It Cm status
186*e4b0a90eSBrooks DavisSee
187*e4b0a90eSBrooks Davis.Xr geom 8 .
188*e4b0a90eSBrooks Davis.It Cm load
189*e4b0a90eSBrooks DavisSee
190*e4b0a90eSBrooks Davis.Xr geom 8 .
191*e4b0a90eSBrooks Davis.It Cm unload
192*e4b0a90eSBrooks DavisSee
193*e4b0a90eSBrooks Davis.Xr geom 8 .
194*e4b0a90eSBrooks Davis.El
195*e4b0a90eSBrooks Davis.Pp
196*e4b0a90eSBrooks DavisAdditional options include:
197*e4b0a90eSBrooks Davis.Bl -tag -width ".Fl v"
198*e4b0a90eSBrooks Davis.It Fl v
199*e4b0a90eSBrooks DavisBe more verbose.
200*e4b0a90eSBrooks Davis.El
201*e4b0a90eSBrooks Davis.Sh SUPPORTED METADATA FORMATS
202*e4b0a90eSBrooks DavisThe GEOM RAID class follows a modular design, allowing different metadata
203*e4b0a90eSBrooks Davisformats to be used.
204*e4b0a90eSBrooks DavisSupport is currently implemented for the following formats:
205*e4b0a90eSBrooks Davis.Bl -tag -width "Intel"
206*e4b0a90eSBrooks Davis.It DDF
207*e4b0a90eSBrooks DavisThe format defined by the SNIA Common RAID Disk Data Format v2.0 specification.
208*e4b0a90eSBrooks DavisUsed by some Adaptec RAID BIOSes and some hardware RAID controllers.
209*e4b0a90eSBrooks DavisBecause of high format flexibility different implementations support
210*e4b0a90eSBrooks Davisdifferent set of features and have different on-disk metadata layouts.
211*e4b0a90eSBrooks DavisTo provide compatibility, the GEOM RAID class mimics capabilities
212*e4b0a90eSBrooks Davisof the first detected DDF array.
213*e4b0a90eSBrooks DavisRespecting that, it may support different number of disks per volume,
214*e4b0a90eSBrooks Davisvolumes per array, partitions per disk, etc.
215*e4b0a90eSBrooks DavisThe following configurations are supported: RAID0 (2+ disks), RAID1 (2+ disks),
216*e4b0a90eSBrooks DavisRAID1E (3+ disks), RAID3 (3+ disks), RAID4 (3+ disks), RAID5 (3+ disks),
217*e4b0a90eSBrooks DavisRAID5E (4+ disks), RAID5EE (4+ disks), RAID5R (3+ disks), RAID6 (4+ disks),
218*e4b0a90eSBrooks DavisRAIDMDF (4+ disks), RAID10 (4+ disks), SINGLE (1 disk), CONCAT (2+ disks).
219*e4b0a90eSBrooks Davis.Pp
220*e4b0a90eSBrooks DavisFormat supports two options "BE" and "LE", that mean big-endian byte order
221*e4b0a90eSBrooks Davisdefined by specification (default) and little-endian used by some Adaptec
222*e4b0a90eSBrooks Daviscontrollers.
223*e4b0a90eSBrooks Davis.It Intel
224*e4b0a90eSBrooks DavisThe format used by Intel RAID BIOS.
225*e4b0a90eSBrooks DavisSupports up to two volumes per array.
226*e4b0a90eSBrooks DavisSupports configurations: RAID0 (2+ disks), RAID1 (2 disks),
227*e4b0a90eSBrooks DavisRAID5 (3+ disks), RAID10 (4 disks).
228*e4b0a90eSBrooks DavisConfigurations not supported by Intel RAID BIOS, but enforceable on your own
229*e4b0a90eSBrooks Davisrisk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks).
230*e4b0a90eSBrooks Davis.It JMicron
231*e4b0a90eSBrooks DavisThe format used by JMicron RAID BIOS.
232*e4b0a90eSBrooks DavisSupports one volume per array.
233*e4b0a90eSBrooks DavisSupports configurations: RAID0 (2+ disks), RAID1 (2 disks),
234*e4b0a90eSBrooks DavisRAID10 (4 disks), CONCAT (2+ disks).
235*e4b0a90eSBrooks DavisConfigurations not supported by JMicron RAID BIOS, but enforceable on your own
236*e4b0a90eSBrooks Davisrisk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks), RAID5 (3+ disks).
237*e4b0a90eSBrooks Davis.It NVIDIA
238*e4b0a90eSBrooks DavisThe format used by NVIDIA MediaShield RAID BIOS.
239*e4b0a90eSBrooks DavisSupports one volume per array.
240*e4b0a90eSBrooks DavisSupports configurations: RAID0 (2+ disks), RAID1 (2 disks),
241*e4b0a90eSBrooks DavisRAID5 (3+ disks), RAID10 (4+ disks), SINGLE (1 disk), CONCAT (2+ disks).
242*e4b0a90eSBrooks DavisConfigurations not supported by NVIDIA MediaShield RAID BIOS, but enforceable
243*e4b0a90eSBrooks Davison your own risk: RAID1 (3+ disks).
244*e4b0a90eSBrooks Davis.It Promise
245*e4b0a90eSBrooks DavisThe format used by Promise and AMD/ATI RAID BIOSes.
246*e4b0a90eSBrooks DavisSupports multiple volumes per array.
247*e4b0a90eSBrooks DavisEach disk can be split to be used by up to two arbitrary volumes.
248*e4b0a90eSBrooks DavisSupports configurations: RAID0 (2+ disks), RAID1 (2 disks),
249*e4b0a90eSBrooks DavisRAID5 (3+ disks), RAID10 (4 disks), SINGLE (1 disk), CONCAT (2+ disks).
250*e4b0a90eSBrooks DavisConfigurations not supported by RAID BIOSes, but enforceable on your
251*e4b0a90eSBrooks Davisown risk: RAID1 (3+ disks), RAID10 (6+ disks).
252*e4b0a90eSBrooks Davis.It SiI
253*e4b0a90eSBrooks DavisThe format used by SiliconImage RAID BIOS.
254*e4b0a90eSBrooks DavisSupports one volume per array.
255*e4b0a90eSBrooks DavisSupports configurations: RAID0 (2+ disks), RAID1 (2 disks),
256*e4b0a90eSBrooks DavisRAID5 (3+ disks), RAID10 (4 disks), SINGLE (1 disk), CONCAT (2+ disks).
257*e4b0a90eSBrooks DavisConfigurations not supported by SiliconImage RAID BIOS, but enforceable on your
258*e4b0a90eSBrooks Davisown risk: RAID1 (3+ disks), RAID10 (6+ disks).
259*e4b0a90eSBrooks Davis.El
260*e4b0a90eSBrooks Davis.Sh SUPPORTED RAID LEVELS
261*e4b0a90eSBrooks DavisThe GEOM RAID class follows a modular design, allowing different RAID levels
262*e4b0a90eSBrooks Davisto be used.
263*e4b0a90eSBrooks DavisFull support for the following RAID levels is currently implemented:
264*e4b0a90eSBrooks DavisRAID0, RAID1, RAID1E, RAID10, SINGLE, CONCAT.
265*e4b0a90eSBrooks DavisThe following RAID levels supported as read-only for volumes in optimal
266*e4b0a90eSBrooks Davisstate (without using redundancy): RAID4, RAID5, RAID5E, RAID5EE, RAID5R,
267*e4b0a90eSBrooks DavisRAID6, RAIDMDF.
268*e4b0a90eSBrooks Davis.Sh RAID LEVEL MIGRATION
269*e4b0a90eSBrooks DavisThe GEOM RAID class has no support for RAID level migration, allowed by some
270*e4b0a90eSBrooks Davismetadata formats.
271*e4b0a90eSBrooks DavisIf you started migration using BIOS or in some other way, make sure to
272*e4b0a90eSBrooks Daviscomplete it there.
273*e4b0a90eSBrooks DavisDo not run GEOM RAID class on migrating volumes under pain of possible data
274*e4b0a90eSBrooks Daviscorruption!
275*e4b0a90eSBrooks Davis.Sh 2TiB BARRIERS
276*e4b0a90eSBrooks DavisNVIDIA metadata format does not support volumes above 2TiB.
277*e4b0a90eSBrooks Davis.Sh SYSCTL VARIABLES
278*e4b0a90eSBrooks DavisThe following
279*e4b0a90eSBrooks Davis.Xr sysctl 8
280*e4b0a90eSBrooks Davisvariable can be used to control the behavior of the
281*e4b0a90eSBrooks Davis.Nm RAID
282*e4b0a90eSBrooks DavisGEOM class.
283*e4b0a90eSBrooks Davis.Bl -tag -width indent
284*e4b0a90eSBrooks Davis.It Va kern.geom.raid.aggressive_spare : No 0
285*e4b0a90eSBrooks DavisUse any disks without metadata connected to controllers of the vendor
286*e4b0a90eSBrooks Davismatching to volume metadata format as spare.
287*e4b0a90eSBrooks DavisUse it with much care to not lose data if connecting unrelated disk!
288*e4b0a90eSBrooks Davis.It Va kern.geom.raid.clean_time : No 5
289*e4b0a90eSBrooks DavisMark volume as clean when idle for the specified number of seconds.
290*e4b0a90eSBrooks Davis.It Va kern.geom.raid.debug : No 0
291*e4b0a90eSBrooks DavisDebug level of the
292*e4b0a90eSBrooks Davis.Nm RAID
293*e4b0a90eSBrooks DavisGEOM class.
294*e4b0a90eSBrooks Davis.It Va kern.geom.raid.enable : No 1
295*e4b0a90eSBrooks DavisEnable on-disk metadata taste.
296*e4b0a90eSBrooks Davis.It Va kern.geom.raid.idle_threshold : No 1000000
297*e4b0a90eSBrooks DavisTime in microseconds to consider a volume idle for rebuild purposes.
298*e4b0a90eSBrooks Davis.It Va kern.geom.raid.name_format : No 0
299*e4b0a90eSBrooks DavisProviders name format: 0 -- raid/r{num}, 1 -- raid/{label}.
300*e4b0a90eSBrooks Davis.It Va kern.geom.raid.read_err_thresh : No 10
301*e4b0a90eSBrooks DavisNumber of read errors equated to disk failure.
302*e4b0a90eSBrooks DavisWrite errors are always considered as disk failures.
303*e4b0a90eSBrooks Davis.It Va kern.geom.raid.start_timeout : No 30
304*e4b0a90eSBrooks DavisTime to wait for missing array components on startup.
305*e4b0a90eSBrooks Davis.It Va kern.geom.raid. Ns Ar X Ns Va .enable : No 1
306*e4b0a90eSBrooks DavisEnable taste for specific metadata or transformation module.
307*e4b0a90eSBrooks Davis.El
308*e4b0a90eSBrooks Davis.Sh EXIT STATUS
309*e4b0a90eSBrooks DavisExit status is 0 on success, and non-zero if the command fails.
310*e4b0a90eSBrooks Davis.Sh SEE ALSO
311*e4b0a90eSBrooks Davis.Xr geom 4 ,
312*e4b0a90eSBrooks Davis.Xr geom 8 ,
313*e4b0a90eSBrooks Davis.Xr gvinum 8
314*e4b0a90eSBrooks Davis.Sh HISTORY
315*e4b0a90eSBrooks DavisThe
316*e4b0a90eSBrooks Davis.Nm
317*e4b0a90eSBrooks Davisutility appeared in
318*e4b0a90eSBrooks Davis.Fx 9.0 .
319*e4b0a90eSBrooks Davis.Sh AUTHORS
320*e4b0a90eSBrooks Davis.An Alexander Motin Aq Mt mav@FreeBSD.org
321*e4b0a90eSBrooks Davis.An M. Warner Losh Aq Mt imp@FreeBSD.org
322