1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
|
mdctl(8) mdctl(8)
NNAAMMEE
mdctl - manage MD devices _a_k_a Linux Software Raid.
SSYYNNOOPPSSIISS
mmddccttll _[_m_o_d_e_] _<_r_a_i_d_d_e_v_i_c_e_> _[_o_p_t_i_o_n_s_] _<_s_u_b_d_e_v_i_c_e_s_>
DDEESSCCRRIIPPTTIIOONN
RAID devices are virtual devices created from two or more
real block devices. This allows multiple devices (typi-
cally disk drives or partitions there-of) to be combined
into a single device to hold (for example) a single
filesystem. Some RAID levels included redundancy and so
can survive some degree of device failure.
Linux Software RAID devices are implemented through the md
(Multiple Devices) device driver.
Currently, Linux supports LLIINNEEAARR md devices, RRAAIIDD00 (strip-
ing), RRAAIIDD11 (mirroring), RRAAIIDD44 and RRAAIIDD55..
Recent kernels (2002) also support a mode known as MMUULLTTII--
PPAATTHH. mmddccttll does not support MULTIPATH as yet.
mmddccttll is a program that can be used to create and manage
MD devices. As such it provides a similar set of func-
tionality to the rraaiiddttoooollss packages. The key differences
between mmddccttll and rraaiiddttoooollss are:
+o mmddccttll is a single program and not a collection of pro-
grams.
+o mmddccttll can perform (almost) all of its functions with-
out having a configuration file. Also mdctl helps
with management of the configuration file.
+o mmddccttll can provide information about your arrays
(through Detail and Examine) that rraaiiddttoooollss cannot.
+o rraaiiddttoooollss can manage MULTIPATH devices which mmddccttll
cannot yet manage.
MMOODDEESS
mdctl has 7 major modes of operation:
AAsssseemmbbllee
Assemble the parts of a previously created array
into an active array. Components can be explicitly
given or can be searched for. mmddccttll checks that
the components do form a bona fide array, and can,
on request, fiddle superblock information so as to
assemble a faulty array.
BBuuiilldd Build a legacy array without per-device
superblocks.
CCrreeaattee Create a new array with per-device superblocks.
DDeettaaiill Display the details of a given md device. Details
include the RAID level, the number of devices,
which ones are faulty (if any), and the array UUID.
EExxaammiinnee
Examine a device to see if it is part of an md
array, and print out the details of that array.
This mode can also be used to examine a large num-
ber of devices and to print out a summary of the
arrays found in a format suitable for the
mmddccttll..ccoonnff configuration file.
FFoollllooww oorr MMoonniittoorr
Monitor one or more md devices and act on any state
changes.
MMaannaaggee This is for odd bits an pieces like hotadd,
hotremove, setfaulty, stop, readonly, readwrite.
OOPPTTIIOONNSS
Available options are:
--AA, ----aasssseemmbbllee
Assemble an existing array.
--BB, ----bbuuiilldd
Build a legacy array without superblocks.
--CC, ----ccrreeaattee
Create a new array.
--DD, ----ddeettaaiill
Print detail of one or more md devices.
--EE, ----eexxaammiinnee
Print content of md superblock on device(s).
--FF, ----ffoollllooww, ----mmoonniittoorr
Select MMoonniittoorr mode.
--hh, ----hheellpp
Display help message or, after above option, mode
specific help message.
--VV, ----vveerrssiioonn
Print version information for mdctl.
--vv, ----vveerrbboossee
Be more verbose about what is happening.
--bb, ----bbrriieeff
Be less verbose. This is used with ----ddeettaaiill and
----eexxaammiinnee.
FFoorr ccrreeaattee oorr bbuuiilldd::
--cc, ----cchhuunnkk==
Specify chunk size of kibibytes. The default is
64.
----rroouunnddiinngg==
Specify rounding factor for linear array (==chunk
size)
--ll, ----lleevveell==
Set raid level. Options are: linear, raid0, 0,
stripe, raid1, 1, mirror, raid5, 4, raid5, 5.
Obviously some of these are synonymous. Only the
first 4 are valid when Building.
--pp, ----ppaarriittyy==
Set raid5 parity algorithm. Options are:
{left,right}-{,a}symmetric, la, ra, ls, rs. The
default is left-symmetric.
----llaayyoouutt==
same as --parity
--nn, ----rraaiidd--ddiisskkss==
number of active devices in array.
--xx, ----ssppaarree--ddiisskkss==
number of spare (eXtra) disks in initial array.
Spares can be added and removed later.
--zz, ----ssiizzee==
Amount (in Kibibytes) of space to use from each
drive in RAID1/4/5. This must be a multiple of the
chunk size, and must leave about 128Kb of space at
the end of the drive for the RAID superblock. If
this is not specified (as it normally is not) the
smallest drive (or partition) sets the size, though
if there is a variance among the drives of greater
than 1%, a warning is issued.
FFoorr aasssseemmbbllee::
--uu, ----uuuuiidd==
uuid of array to assemble. Devices which don't have
this uuid are excluded
--mm, ----ssuuppeerr--mmiinnoorr==
Minor number of device that array was created for.
Devices which don't have this minor number are
excluded. If you create an array as /dev/md1, then
all superblock will contain the minor number 1,
even if the array is later assembled as /dev/md2.
--cc, ----ccoonnffiigg==
config file. Default is //eettcc//mmddccttll..ccoonnff.
--ss, ----ssccaann
scan config file for missing information
--ff, ----ffoorrccee
Assemble the array even if some superblocks appear
out-of-date
--RR, ----rruunn
Attempt to start the array even if fewer drives
were given than are needed for a full array. Nor-
mally if not all drives are found and ----ssccaann is not
used, then the array will be assembled but not
started. With ----rruunn an attempt will be made to
start it anyway.
GGeenneerraall mmaannaaggeemmeenntt
--aa, ----aadddd
hotadd listed devices.
--rr, ----rreemmoovvee
remove listed devices. The must not be active.
i.e. they should be failed or spare devices.
--ff, ----ffaaiill
mark listed devices as faulty.
----sseett--ffaauullttyy
same as --fail.
--RR, ----rruunn
start a partially built array.
--SS, ----ssttoopp
deactivate array, releasing all resources.
--oo, ----rreeaaddoonnllyy
mark array as readonly.
--ww, ----rreeaaddwwrriittee
mark array as readwrite.
AASSSSEEMMBBLLYY MMOODDEE
Usage: mmddccttll ----aasssseemmbbllee _d_e_v_i_c_e _o_p_t_i_o_n_s_._._.
Usage: mmddccttll ----aasssseemmbbllee ----ssccaann _o_p_t_i_o_n_s_._._.
This usage assembles one or more raid arrays from pre-
existing components. For each array, mdctl needs to know
the md device, the identity of the array, and a number of
sub devices. These can be found in a number of ways.
The md device is either given before ----ssccaann or is found
from the config file. In the latter case, multiple md
devices can be started with a single mdctl command.
The identity can be given with the ----uuuuiidd option, with the
----ssuuppeerr--mmiinnoorr option, can be found in in the config file,
or will be taken from the super block on the first subde-
vice listed on the command line.
Devices can be given on the ----aasssseemmbbllee command line or
from the config file. Only devices which have an md
superblock which contains the right identity will be con-
sidered for any device.
The config file is only used if explicitly named with
----ccoonnffiigg or requested with ----ssccaann.. In the later case,
//eettcc//mmddccttll..ccoonnff is used.
If ----ssccaann is not given, then the config file will only be
used to find the identity of md arrays.
Normally the array will be started after it is assembled.
However is ----ssccaann is not given and insufficient drives
were lists to start a complete (non-degraded) array, then
the array is not started (to guard against usage errors).
To insist that the array be started in this case (as may
work for RAID1 or RAID5), give the ----rruunn flag.
BBUUIILLDD MMOODDEE
Usage: mmddccttll ----bbuuiilldd _d_e_v_i_c_e ----cchhuunnkk==_X ----lleevveell==_Y ----rraaiidd--
ddiisskkss==_Z _d_e_v_i_c_e_s
This usage is similar to ----ccrreeaattee. The difference is that
it creates a legacy array without a superblock. With these
arrays there is no difference between initially creating
the array and subsequently assembling the array, except
that hopefully there is useful data there in the second
case.
The level may only be 0, raid0, or linear. All devices
must be listed and the array will be started once com-
plete.
CCRREEAATTEE MMOODDEE
Usage: mmddccttll ----ccrreeaattee _d_e_v_i_c_e ----cchhuunnkk==_X ----lleevveell==_Y
----rraaiidd--ddiisskkss==_Z _d_e_v_i_c_e_s
This usage will initialise a new md array, associate some
devices with it, and activate the array.
As devices are added, they are checked to see if they con-
tain raid superblocks or filesystems. They are also check
to see if the variance in device size exceeds 1%.
If any discrepancy is found, the array will not automati-
cally be run, though the presence of a ----rruunn can override
this caution.
The General Management options that are valid with --cre-
ate are:
----rruunn insist of running the array even if some devices
look like they might be in use.
----rreeaaddoonnllyy
start the array readonly - not supported yet.
DDEETTAAIILL MMOODDEE
Usage: mmddccttll ----ddeettaaiill [----bbrriieeff] _d_e_v_i_c_e _._._.
This usage sill print out the details of the given array
including a list of component devices. To determine names
for the devices, mmddccttll searches //ddeevv for device files with
the right major and minor numbers.
With ----bbrriieeff mmddccttll prints a single line that identifies
the level, number of disks, and UUID of the array. This
line is suitable for inclusion in //eettcc//mmddccttll..ccoonnff.
EEXXAAMMIINNEE MMOODDEE
Usage: mmddccttll ----eexxaammiinnee [----ssccaann] [----bbrriieeff] _d_e_v_i_c_e _._._.
This usage will examine some block devices to see if that
have a valid RAID superblock on them. The information in
each valid raid superblock will be printed.
If ----ssccaann is used, the no devices should be listed, and
the complete set of devices identified in the configura-
tion file are checked. ----ssccaann implies ----bbrriieeff but this
implication can be countered by specifying ----vveerrbboossee.
With ----bbrriieeff mmddccttll will output an config file entry of
each distinct array that was found. This entry will list
the UUID, the raid level, and a list of the individual
devices on which a superblock for that array was found.
This output will by syntactically suitable for inclusion
in the configuration file, but should NNOOTT be used blindly.
Often the array description that you want in the configu-
ration file is much less specific than that given by mmddccttll
--BBss. For example, you normally do not want to list the
devices, particularly if they are SCSI devices.
FFIILLEESS
//pprroocc//mmddssttaatt
If you're using the //pprroocc filesystem, //pprroocc//mmddssttaatt gives
you informations about md devices status. This file is
not currently used by mmddccttll.
//eettcc//mmddccttll..ccoonnff
The config file is line oriented with, as usual, blank
lines and lines beginning with a hash (or pound sign or
sharp or number sign, whichever you like to call it)
ignored. Lines that start with a blank are treated as
continuations of the previous line (I don't like trailing
slashes).
Each line contains a sequence of space-separated words,
the first of which identified the type of line. Keywords
are case-insensitive, and the first work on a line can be
abbreviated to 3 letters.
There are two types of lines. ARRAY and DEVICE.
The DEVICE lines usually come first. All remaining words
on the line are treated as names of devices, possibly con-
taining wild cards (see _g_l_o_b(7)). These list all the
devices that mmddccttll is allowed to scan when looking for
devices with RAID superblocks. Each line can contain mul-
tiple device names, and there can be multiple DEVICE
lines. For example:
DEVICE /dev/hda* /dev/hdc*
DEV /dev/sd*
DEVICE /dev/discs/disc*/disc
The ARRAY lines identify actual arrays. The second word
on the line should be the name of the device where the
array is normally assembled, such as /dev/md1. Subsequent
words identify the array. If multiple identities are
given, then the array much match ALL identities to be con-
sidered a match. Each identity word has a tag, and equals
sign, and some value. The options are:
uuuuiidd== The value should be a 128 bit uuid in hexadecimal,
with punctuation interspersed if desired. This
must match the uuid stored in the superblock.
ssuuppeerr--mmiinnoorr==
The value is an integer which indicates the minor
number that was stored in the superblock when the
array was created. When an array is created as
/dev/mdX, then the minor number X is stored.
ddeevviicceess==
The value is a comma separated list of device
names. Precisely these devices will be used to
assemble the array. Note that the devices listed
there must also be listed on a DEVICE line.
lleevveell== The value is a raid level. This is normally used
to identify an array, but is supported so that the
output of mmddccttll ----eexxaammiinnee ----ssccaann can be use
directly in the configuration file.
ddiisskkss== The value is the number of disks in a complete
active array. As with lleevveell== this is mainly for
compatibility with the output of mmddccttll ----eexxaammiinnee
----ssccaann.
TTOODDOO
Finish and document Follow mode.
SSEEEE AALLSSOO
For information on the various levels of RAID, check out:
http://ostenfeld.dk/~jakob/Software-RAID.HOWTO/
for new releases of the RAID driver check out:
ftp://ftp.kernel.org/pub/linux/kernel/peo-
ple/mingo/raid-patches
or
http://www.cse.unsw.edu.au/~neilb/patches/linux-
stable/
_r_a_i_d_t_a_b(5), _r_a_i_d_0_r_u_n(8), _r_a_i_d_s_t_o_p(8), _m_k_r_a_i_d(8)
mdctl(8)
|