xref: /freebsd/lib/geom/virstor/gvirstor.8 (revision cbb3ec25236ba72f91cbdf23f8b78b9d1af0cedf)
1.\" Copyright (c) 2006-2011 Ivan Voras <ivoras@FreeBSD.org>
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\"
13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23.\" SUCH DAMAGE.
24.\"
25.Dd October 1, 2013
26.Dt GVIRSTOR 8
27.Os
28.Sh NAME
29.Nm gvirstor
30.Nd "control utility for virtual data storage devices"
31.Sh SYNOPSIS
32.Nm
33.Cm label
34.Op Fl hv
35.Op Fl s Ar virsize
36.Op Fl m Ar chunksize
37.Ar name
38.Ar prov ...
39.Nm
40.Cm stop
41.Op Fl fv
42.Ar name ...
43.Nm
44.Cm destroy
45.Op Fl fv
46.Ar name ...
47.Nm
48.Cm add
49.Op Fl vh
50.Ar name prov ...
51.Nm
52.Cm remove
53.Op Fl v
54.Ar name prov ...
55.Nm
56.Cm clear
57.Op Fl v
58.Ar prov ...
59.Nm
60.Cm dump
61.Ar prov ...
62.Nm
63.Cm list
64.Nm
65.Cm status
66.Nm
67.Cm load
68.Nm
69.Cm unload
70.Sh DESCRIPTION
71The
72.Nm
73utility is used for setting up a virtual storage device of arbitrary
74large size
75.Pq for example, several TB ,
76consisting of an arbitrary number of physical storage devices with the
77total size which is equal to or smaller than the virtual size.
78Data for the virtual devices will be allocated from physical devices on
79demand.
80The idea behind
81.Nm
82is similar to the concept of Virtual Memory in operating systems,
83effectively allowing users to overcommit on storage
84.Pq free file system space .
85The concept is also known as "thin provisioning" in virtualization
86environments, only here it is implemented on the level of physical storage
87devices.
88.Pp
89The first argument to
90.Nm
91indicates an action to be performed:
92.Bl -tag -width ".Cm remove"
93.It Cm label
94Set up a virtual device from the given components with the specified
95.Ar name .
96Metadata is stored in the last sector of every component.
97Argument
98.Fl s Ar virsize
99is the size of new virtual device, with default being set to 2 TiB
100.Pq 2097152 MiB .
101Argument
102.Fl m Ar chunksize
103is the chunk size, with default being set to 4 MiB
104.Pq 4096 KiB .
105The default arguments are thus
106.Qq Fl s Ar 2097152 Fl m Ar 4096 .
107.It Cm stop
108Turn off an existing virtual device with the given
109.Ar name .
110This command does not touch on-disk metadata.
111As with other GEOM classes, stopped geoms cannot be started manually.
112.It Cm destroy
113Same as
114.Cm stop.
115.It Cm add
116Adds new components to existing virtual device with the given
117.Ar name .
118The specified virstor device must exist and be active
119.Pq i.e. module loaded, device present in Pa /dev .
120This action can be safely performed while the virstor device is in use
121.Pq Qo hot Qc operation .
122.It Cm remove
123Removes components from existing virtual device with the given
124.Ar name .
125Only unallocated providers can be removed.
126.It Cm clear
127Clear metadata on the given providers.
128.It Cm dump
129Dump metadata stored on the given providers.
130.It Cm list
131See
132.Xr geom 8 .
133.It Cm status
134See
135.Xr geom 8 .
136.It Cm load
137See
138.Xr geom 8 .
139.It Cm unload
140See
141.Xr geom 8 .
142.El
143.Pp
144Additional options:
145.Bl -tag -width ".Fl f"
146.It Fl f
147Force the removal of the specified virtual device.
148.It Fl h
149Hardcode providers' names in metadata.
150.It Fl v
151Be more verbose.
152.El
153.Sh EXAMPLES
154The following example shows how to create a virtual device of default size
155.Pq 2 TiB ,
156of default chunk
157.Pq extent
158size
159.Pq 4 MiB ,
160with two physical devices for backing storage.
161.Bd -literal -offset indent
162.No gvirstor label -v Ar mydata Ar /dev/ada4 Ar /dev/ada6
163.No newfs Ar /dev/virstor/mydata
164.Ed
165.Pp
166From now on, the virtual device will be available via the
167.Pa /dev/virstor/mydata
168device entry.
169To add a new physical device / component to an active virstor device:
170.Bd -literal -offset indent
171.No gvirstor add Ar mydata Ar ada8
172.Ed
173.Pp
174This will add physical storage of
175.Ar ada8
176to
177.Pa /dev/virstor/mydata
178device.
179.Pp
180To see the device status information
181.Pq including how much physical storage is still available for the virtual device ,
182use:
183.Bd -literal -offset indent
184gvirstor list
185.Ed
186.Pp
187All standard
188.Xr geom 8
189subcommands
190.Pq e.g. Cm status , Cm help
191are also supported.
192.Sh SYSCTL VARIABLES
193.Nm
194has several
195.Xr sysctl 8
196tunable variables.
197.Bd -literal -offset indent
198.Va int kern.geom.virstor.debug
199.Ed
200.Pp
201This sysctl controls verbosity of the kernel module, in the range
2021 to 15.
203Messages that are marked with higher verbosity levels than this are
204suppressed.
205Default value is 5 and it is not recommended to set this tunable to less
206than 2, because level 1 messages are error events, and level 2 messages
207are system warnings.
208.Bd -literal -offset indent
209.Va int kern.geom.virstor.chunk_watermark
210.Ed
211.Pp
212Value in this sysctl sets warning watermark level for physical chunk
213usage on a single component.
214The warning is issued when a virstor component has less than this many
215free chunks
216.Pq default 100 .
217.Bd -literal -offset indent
218.Va int kern.geom.virstor.component_watermark
219.Ed
220.Pp
221Value in this sysctl sets warning watermark level for component usage.
222The warning is issued when there are less than this many unallocated
223components
224.Pq default is 1 .
225.Pp
226All these sysctls are also available as
227.Xr loader 8
228tunables.
229.Sh DIAGNOSTICS
230.Ex -std
231.Pp
232.Nm
233kernel module issues log messages with prefixes in standardized format,
234which is useful for log message filtering and dispatching.
235Each message line begins with
236.Bd -literal -offset indent
237.Li GEOM_VIRSTOR[%d]:
238.Ed
239.Pp
240The number
241.Pq %d
242is message verbosity / importance level, in the range 1 to 15.
243If a message filtering, dispatching or operator alert system is used, it
244is recommended that messages with levels 1 and 2 be taken seriously
245.Pq for example, to catch out-of-space conditions as set by watermark
246sysctls.
247.Sh SEE ALSO
248.Xr geom 4 ,
249.Xr fstab 5 ,
250.Xr geom 8 ,
251.Xr glabel 8 ,
252.Xr newfs 8
253.Sh HISTORY
254The
255.Nm
256utility first appeared in
257.Fx 7.0 .
258.Sh AUTHORS
259.An Ivan Voras Aq Mt ivoras@FreeBSD.org
260.Pp
261Sponsored by Google Summer of Code 2006.
262.Sh BUGS
263Commands
264.Cm add
265and
266.Cm remove
267contain unavoidable critical sections which may make the virstor
268device unusable if a power failure
269.Pq or other disruptive event
270happens during their execution.
271It is recommended to run them when the system is quiescent.
272.Sh ASSUMPTIONS AND INTERACTION WITH FILE SYSTEMS
273There are several assumptions that
274.Nm
275has in its operation: that the size of the virtual storage device will not
276change once it is set, and that the sizes of individual physical storage
277components will always remain constant during their existence.
278For alternative ways to implement virtual or resizable file systems see
279.Xr zfs 1M ,
280.Xr gconcat 8
281and
282.Xr growfs 8 .
283.Pp
284Note that
285.Nm
286has nontrivial interaction with file systems which initialize a large
287number of on-disk structures during newfs.
288If such file systems attempt to spread their structures across the drive
289media
290.Pq like UFS/UFS2 does ,
291their efforts will be effectively foiled by sequential allocation of
292chunks in
293.Nm
294and all their structures will be physically allocated at the start
295of the first virstor component.
296This could have a significant impact on file system performance
297.Pq which can in some rare cases be even positive .
298