]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.8
mdadm-1.6.0
[thirdparty/mdadm.git] / mdadm.8
diff --git a/mdadm.8 b/mdadm.8
index 7eba10ca1dc698ea4db717ddb896a0c41c2c26ae..6e20b7ea93b5f49b2876cb89b03e3defa75926d7 100644 (file)
--- a/mdadm.8
+++ b/mdadm.8
@@ -1,5 +1,5 @@
 .\" -*- nroff -*-
-.TH mdadm 8
+.TH MDADM 8 "" v1.6.0
 .SH NAME
 mdadm \- manage MD devices
 .I aka
@@ -7,17 +7,18 @@ Linux Software Raid.
 
 .SH SYNOPSIS
 
-.BI mdadm " [mode] <raiddevice> [options] <subdevices>"
+.BI mdadm " [mode] <raiddevice> [options] <component-devices>"
 
 .SH DESCRIPTION 
 RAID devices are virtual devices created from two or more
 real block devices. This allows multiple devices (typically 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
+Some RAID levels include redundancy and so can survive some degree of
 device failure.
 
-Linux Software RAID devices are implemented through the md (Multiple Devices) device driver.
+Linux Software RAID devices are implemented through the md (Multiple
+Devices) device driver.
 
 Currently, Linux supports
 .B LINEAR
@@ -26,17 +27,21 @@ md devices,
 (striping),
 .B RAID1
 (mirroring),
-.B RAID4
+.BR RAID4 ,
+.BR RAID5 ,
+.BR RAID6 ,
 and
-.B RAID5.
-
-Recent kernels (2002) also support a mode known as
 .BR MULTIPATH .
-.B mdadm
-does not support MULTIPATH as yet.
+
+.B MULTIPATH is not a Software RAID mechanism, but does involve
+multiple devices.  For
+.B MULTIPATH
+each device is a path to one common physical storage device.
+
 
 .B mdadm
-is a program that can be used to create and manage MD devices.  As
+is a program that can be used to create, manage, and monitor
+MD devices.  As
 such it provides a similar set of functionality to the
 .B raidtools
 packages.
@@ -51,19 +56,24 @@ is a single program and not a collection of programs.
 .IP \(bu 4
 .B mdadm
 can perform (almost) all of its functions without having a
-configuration file.  Also mdadm helps with management of the configuration
+configuration file and does not use one by default.  Also
+.B mdadm
+helps with management of the configuration
 file.
 .IP \(bu 4
 .B mdadm
-can provide information about your arrays (through Detail and Examine)
+can provide information about your arrays (through Query, Detail, and Examine)
 that
 .B  raidtools
 cannot.
-.IP \(bu 4
+.P
+.I mdadm
+does not use
+.IR /etc/raidtab ,
+the
 .B raidtools
-can manage MULTIPATH devices which
-.B mdadm
-cannot yet manage.
+configuration file, at all.  It has a different configuration file
+with a different format and an different purpose.
 
 .SH MODES
 mdadm has 7 major modes of operation:
@@ -88,31 +98,28 @@ Create a new array with per-device superblocks.
 '''in several step create-add-add-run or it can all happen with one command.
 
 .TP
-.B Detail
-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.
+.B Manage
+This is for doing things to specific components of an array such as
+adding new spares and removing faulty devices.
 
 .TP
-.B Examine
-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 number of devices and to
-print out a summary of the arrays found in a format suitable for the
-.B mdadm.conf
-configuration file.
+.B Misc
+This mode allows operations on independent devices such as examine MD
+superblocks, erasing old superblocks and stopping active arrays.
 
 .TP
 .B "Follow or Monitor"
-Monitor one or more md devices and act on any state changes.
+Monitor one or more md devices and act on any state changes.  This is
+only meaningful for raid1, 4, 5, 6 or multipath arrays as
+only these have interesting state.  raid0 or linear never have
+missing, spare, or failed drives, so there is nothing to monitor.
 
 .TP
-.B Manage
-This is for odd bits an pieces like hotadd, hotremove, setfaulty, stop,
-readonly, readwrite.
-'''If an array is only partially setup by the
-'''Create or Assemble commands, subsequent Manage commands can finish the
-'''job.
+.B "Grow"
+Grow (or shrink) an array, or otherwise reshape it in some way.
+Currently supported growth options including changing the active size
+of componenet devices in RAID level 1/4/5/6 and changing the number of
+active devices in RAID1.
 
 .SH OPTIONS
 
@@ -120,7 +127,7 @@ Available options are:
 
 .TP
 .BR -A ", " --assemble
-Assemble aexisting array.
+Assemble a pre-existing array.
 
 .TP
 .BR -B ", " --build
@@ -130,6 +137,13 @@ Build a legacy array without superblocks.
 .BR -C ", " --create
 Create a new array.
 
+.TP
+.BR -Q ", " --query
+Examine a device to see
+(1) if it is an md device and (2) if it is a component of an md
+array.
+Information about what is discovered is presented.
+
 .TP
 .BR -D ", " --detail
 Print detail of one or more md devices.
@@ -144,9 +158,19 @@ Select
 .B Monitor
 mode.
 
+.TP
+.BR -G ", " --grow
+Change the size or shape of an active array.
+
 .TP
 .BR -h ", " --help
-Display help message or, after above option, mode specific help message.
+Display help message or, after above option, mode specific help
+message.
+
+.TP
+.B --help-options
+Display more detailed help about command line parsing and some commonly
+used options.
 
 .TP
 .BR -V ", " --version
@@ -163,6 +187,50 @@ Be less verbose.  This is used with
 and
 .BR --examine .
 
+.TP
+.BR -f ", " --force
+Be more forceful about certain operations.  See the various modes of
+the exact meaning of this option in different contexts.
+
+.TP
+.BR -c ", " --config=
+Specify the config file.  Default is
+.BR /etc/mdadm.conf .
+If the config file given is
+.B partitions
+then nothing will be read, but
+.I mdadm
+will act as though the config file contained exactly
+.B "DEVICE partitions"
+and will read
+.B /proc/partitions
+to find a list of devices to scan.
+If the word
+.B none
+is given for the config file, then
+.I mdadm
+will act as though the config file were empty.
+
+.TP
+.BR -s ", " --scan
+scan config file or
+.B /proc/mdstat
+for missing information.
+In general, this option gives
+.B mdadm
+permission to get any missing information, like component devices,
+array devices, array identities, and alert destination from the
+configuration file:
+.BR /etc/mdadm.conf .
+One exception is MISC mode when using
+.B --detail
+or
+.B --stop
+in which case
+.B --scan
+says to get a list of array devices from
+.BR /proc/mdstat .
+
 .SH For create or build:
 
 .TP
@@ -175,31 +243,58 @@ Specify rounding factor for linear array (==chunk size)
 
 .TP
 .BR -l ", " --level=
-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.
+Set raid level.  When used with
+.IR --create ,
+options are: linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4,
+raid5, 5, raid6, 6, multipath, mp.  Obviously some of these are synonymous.
+
+When used with
+.IR --build ,
+only linear, raid0, 0, stripe are valid.
 
 .TP
 .BR -p ", " --parity=
 Set raid5 parity algorithm. Options are:
-{left,right}-{,a}symmetric, la, ra, ls, rs.  The default is left-symmetric.
+left-asymmetric,
+left-symmetric,
+right-asymmetric,
+right-symmetric,
+la, ra, ls, rs.  The default is left-symmetric.
 
 .TP
 .BR --layout=
 same as --parity
 
 .TP
-.BR -n ", " --raid-disks=
-number of active devices in array.
+.BR -n ", " --raid-devices=
+Specify the number of active devices in the array.  This, plus the
+number of spare devices (see below) must equal the number of
+.I component-devices
+(including "\fBmissing\fP" devices)
+that are listed on the command line for
+.BR  --create .
+Setting a value of 1 is probably
+a mistake and so requires that
+.B --force
+be specified first.  A value of 1 will then be allowed for linear,
+multipath, raid0 and raid1.  It is never allowed for raid4 or raid5.
+.br
+This number can only be changed using
+.B --grow
+for RAID1 arrays, and only on kernels which provide necessary support.
 
 .TP
-.BR -x ", " --spare-disks=
-number of spare (eXtra) disks in initial array.  Spares can be added
-and removed later.
+.BR -x ", " --spare-devices=
+Specify the number of spare (eXtra) devices in the initial array.
+Spares can also be added
+and removed later.  The number of component devices listed
+on the command line must equal the number of raid devices plus the
+number of spare devices. 
+
 
 .TP
 .BR -z ", " --size=
-Amount (in Kibibytes) of space to use from each drive in RAID1/4/5.
+Amount (in Kibibytes) of space to use from each drive in RAID1/4/5/6.
 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
@@ -207,6 +302,63 @@ If this is not specified
 size, though if there is a variance among the drives of greater than 1%, a warning is
 issued.
 
+This value can be set with
+.B --grow
+for RAID level 1/4/5/6. If the array was created with a size smaller
+than the currently active drives, the extra space can be accessed
+using
+.BR --grow .
+
+.TP
+.BR --assume-clean
+Tell
+.I mdadm
+that the array pre-existed and is known to be clean.  This is only
+really useful for Building RAID1 array.  Only use this if you really
+know what you are doing.  This is currently only supported for --build.
+
+.TP
+.BR -R ", " --run
+Insist that
+.I mdadm
+run the array, even if some of the components
+appear to be active in another array or filesystem.  Normally
+.I mdadm
+will ask for confirmation before including such components in an
+array.  This option causes that question to be suppressed.
+
+.TP
+.BR -f ", " --force
+Insist that
+.I mdadm
+accept the geometry and layout specified without question.  Normally
+.I mdadm
+will not allow creation of an array with only one device, and will try
+to create a raid5 array with one missing drive (as this makes the
+initial resync work faster).  With
+.BR --force ,
+.I mdadm
+will not try to be so clever.
+
+.TP
+.BR -a ", " "--auto{=no,yes,md,mdp,part,p}{NN}"
+Instruct mdadm to create the device file if needed, and to allocate
+an unused minor number.  "yes" or "md" causes a non-partitionable array
+to be used.  "mdp", "part" or "p" causes a partitionable array (2.6 and
+later) to be used.  The argumentment can also come immediately after
+"-a".  e.g. "-ap".
+
+For partitionable arrays,
+.I mdadm
+will create the device file for the whole array and for the first 4
+partitions.  A different number of partitions can be specified at the
+end of this option (e.g.
+.BR --auto=p7 ).
+If the device name ends with a digit, the partition names add an
+underscore, a 'p', and a number, e.g. "/dev/home1_p3".  If there is no
+trailing digit, then the partition names just have a number added,
+e.g. "/dev/scratch3".
+
 .SH For assemble:
 
 .TP
@@ -218,17 +370,18 @@ excluded
 .BR -m ", " --super-minor=
 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
+/dev/md1, then all superblocks will contain the minor number 1, even if
 the array is later assembled as /dev/md2.
 
-.TP
-.BR -c ", " --config=
-config file.  Default is
-.BR /etc/mdadm.conf .
-
-.TP
-.BR -s ", " --scan
-scan config file for missing information
+Giving the literal word "dev" for
+.B --super-minor
+will cause
+.I mdadm
+to use the minor number of the md device that is being assembled.
+e.g. when assembling
+.BR /dev/md0 ,
+.M --super-minor=dev
+will look for super blocks with a minor number of 0.
 
 .TP
 .BR -f ", " --force
@@ -244,7 +397,43 @@ With
 .B --run
 an attempt will be made to start it anyway.
 
-.SH General management
+.TP
+.BR -a ", " "--auto{=no,yes,md,mdp,part}"
+See this option under Create and Build options.
+
+.TP
+.BR -U ", " --update=
+Update the superblock on each device while assembling the array.  The
+argument given to this flag can be one of
+.BR sparc2.2 ,
+.BR summaries ,
+or
+.BR super-minor .
+
+The
+.B sparc2.2
+option will  adjust the superblock of an array what was created on a Sparc
+machine running a patched 2.2 Linux kernel.  This kernel got the
+alignment of part of the superblock wrong.  You can use the
+.B "--examine --sparc2.2"
+option to
+.I mdadm
+to see what effect this would have.
+
+The
+.B super-minor
+option will update the
+.B "prefered minor"
+field on each superblock to match the minor number of the array being
+assembled.  This is not needed on 2.6 and later kernels as they make
+this adjustment automatically.
+
+The
+.B summaries
+option will correct the summaries in the superblock. That is the
+counts of total, working, active, failed, and spare devices.
+
+.SH For Manage mode:
 
 .TP
 .BR -a ", " --add
@@ -253,7 +442,7 @@ hotadd listed devices.
 
 .TP
 .BR -r ", " --remove
-remove listed devices.  The must not be active.  i.e. they should
+remove listed devices.  They must not be active.  i.e. they should
 be failed or spare devices.
 
 .TP
@@ -264,6 +453,22 @@ mark listed devices as faulty.
 .BR --set-faulty
 same as --fail.
 
+.SH For Examine mode:
+
+.TP
+.B --sparc2.2
+In an array was created on a 2.2 Linux kernel patched with RAID
+support, the superblock will have been created incorrectly, or at
+least incompatibly with 2.4 and later kernels.  Using the
+.B --sparc2.2
+flag with
+.B --examine
+will fix the superblock before displaying it.  If this appears to do
+the right thing, then the array can be successfully assembled using
+.BR "--assemble --update=sparc2.2" .
+
+.SH For Misc mode:
+
 .TP
 .BR -R ", " --run
 start a partially built array.
@@ -280,13 +485,80 @@ mark array as readonly.
 .BR -w ", " --readwrite
 mark array as readwrite.
 
+.TP
+.B --zero-superblock
+If the device contains a valid md superblock, the block is
+over-written with zeros.  With
+--force
+the block where the superblock would be is over-written even if it
+doesn't appear to be valid.
+
+.TP
+.BR -t ", " --test
+When used with
+.BR --detail ,
+the exit status of
+.I mdadm
+is set to reflect the status of the device.
+
+.SH For Monitor mode:
+.TP
+.BR -m ", " --mail
+Give a mail address to send alerts to.
+
+.TP
+.BR -p ", " --program ", " --alert
+Give a program to be run whenever an event is detected.
+
+.TP
+.BR -d ", " --delay
+Give a delay in seconds.
+.B mdadm
+polls the md arrays and then waits this many seconds before polling
+again.  The default is 60 seconds.
+
+.TP
+.BR -f ", " --daemonise
+Tell
+.B mdadm
+to run as a background daemon if it decides to monitor anything.  This
+causes it to fork and run in the child, and to disconnect form the
+terminal.  The process id of the child is written to stdout.
+This is useful with
+.B --scan
+which will only continue monitoring if a mail address or alert program
+is found in the config file.
+
+.TP
+.BR -1 ", " --oneshot
+Check arrays only once.  This will generate
+.B NewArray
+events and more significantly
+.B DegradedArray
+events.  Running
+.in +5
+.B "   mdadm --monitor --scan -1"
+.in -5
+from a cron script will ensure regular notification of any degraded arrays.
+
+.TP
+.BR -t ", " --test
+Generate a
+.B TestMessage
+alert for every array found at startup.  This alert gets mailed and
+passed to the alert program.  This can be used for testing that alert
+message to get through successfully.
 
-.SH ASSEMBLY MODE
+.SH ASSEMBLE MODE
 
 .HP 12
 Usage:
 .B mdadm --assemble
-.I device options...
+.I md-device options-and-component-devices...
+.HP 12
+Usage:
+.B mdadm --assemble --scan
+.I  md-devices-and-options...
 .HP 12
 Usage:
 .B mdadm --assemble --scan
@@ -295,28 +567,40 @@ Usage:
 .PP
 This usage assembles one or more raid arrays from pre-existing components.
 For each array, mdadm 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.
+array, and a number of component-devices. These can be found in a number of ways.
+
+In the first usage example (without the
+.BR --scan )
+the first device given is the md device.
+In the second usage example, all devices listed are treated as md
+devices and assembly is attempted.
+In the third (where no devices are listed) all md devices that are
+listed in the configuration file are assembled.
 
-The md device is either given before 
+If precisely one device is listed, but
 .B --scan
-or is found from the config file. In the latter case, multiple md devices
-can be started with a single mdadm command.
+is not given, then
+.I mdadm
+acts as though
+.B --scan
+was given and identify information is extracted from the configuration file.
 
 The identity can be given with the 
 .B --uuid
 option, with the
 .B --super-minor
-option, can be found in in the config file, or will be taken from the
-super block on the first subdevice listed on the command line.
+option, can be found  in the config file, or will be taken from the
+super block on the first component-device listed on the command line.
 
 Devices can be given on the 
 .B --assemble
-command line or from the config file. Only devices which have an md
-superblock which contains the right identity will be considered for any device.
+command line or in the config file. Only devices which have an md
+superblock which contains the right identity will be considered for
+any array.
 
 The config file is only used if explicitly named with 
 .B --config
-or requested with 
+or requested with (a possibly implicit)
 .B --scan. 
 In the later case,
 .B /etc/mdadm.conf
@@ -327,15 +611,55 @@ If
 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
+Normally the array will be started after it is assembled.  However if
 .B --scan
-is not given and insufficient drives were lists to start a complete
+is not given and insufficient drives were listed 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
+may work for RAID1, 4, 5 or 6), give the
 .B --run
 flag.
 
+If an
+.B auto
+option is given, either on the command line (--auto) or in the
+configuration file (e.g. auto=part), then
+.I mdadm
+will create the md device if necessary or will re-create it if it
+doesn't look usable as it is.
+
+This can be useful for handling partitioned devices (which don't have
+a stable device number - it can change after a reboot) and when using
+"udev" to manage your
+.B /dev
+tree (udev cannot handle md devices because of the unusual device
+initialisation conventions).
+
+If the option to "auto" is "mdp" or "part" or (on the command line
+only) "p", then mdadm will create a partitionable array, using the
+first free one that is not inuse, and does not already have an entry
+in /dev (apart from numeric /dev/md* entries).
+
+If the option to "auto" is "yes" or "md" or (on the command line)
+nothing, then mdadm will create a traditional, non-partitionable md
+array.
+
+It is expected that the "auto" functionality will be used to create
+device entries with meaningful names such as "/dev/md/home" or
+"/dev/md/root", rather than names based on the numerical array number.
+
+When using this option to create a partitionable array, the device
+files for the first 4 partitions are also created. If a different
+number is required it can be simply appended to the auto option.
+e.g. "auto=part8".  Partition names are created by appending a digit
+string to the device name, with an intervening "_p" if the device name
+ends with a digit.
+
+The
+.B --auto
+option is also available in Build and Create modes.  As those modes do
+not use a config file, the "auto=" config option does not apply to
+these modes.
 
 .SH BUILD MODE
 
@@ -345,7 +669,7 @@ Usage:
 .I device
 .BI --chunk= X
 .BI --level= Y
-.BI --raid-disks= Z
+.BI --raid-devices= Z
 .I devices
 
 .PP
@@ -368,15 +692,21 @@ Usage:
 .BI --chunk= X
 .BI --level= Y
 .br
-.BI --raid-disks= Z
+.BI --raid-devices= Z
 .I  devices
 
 .PP
 This usage will initialise a new md array, associate some devices with
 it, and activate the array.
 
+This the
+.B --auto
+option is given (as described in more detail in the section on
+Assemble mode), then the md device will be created with a suitable
+device number if necessary.
+
 As devices are added, they are checked to see if they contain raid
-superblocks or filesystems. They are also check to see if the variance in
+superblocks or filesystems. They are also checked to see if the variance in
 device size exceeds 1%.
 
 If any discrepancy is found, the array will not automatically be run, though
@@ -384,9 +714,29 @@ the presence of a
 .B --run
 can override this caution.
 
+To create a "degraded" array in which some devices are missing, simply
+give the word "\fBmissing\fP"
+in place of a device name.  This will cause
+.B mdadm
+to leave the corresponding slot in the array empty.
+For a RAID4 or RAID5 array at most one slot can be
+"\fBmissing\fP"; for a RAID6 array at most two slots.
+For a RAID1 array, only one real device needs to be given.  All of the
+others can be
+"\fBmissing\fP".
+
+When creating a RAID5 array,
+.B mdadm
+will automatically create a degraded array with an extra spare drive.
+This is because building the spare into a degraded array is in general faster than resyncing
+the parity on a non-degraded, but not clean, array.  This feature can
+be over-ridden with the
+-I --force
+option.
+
 '''If the 
 '''.B --size
-'''option is given, it is not necessary to list any subdevices in this command.
+'''option is given, it is not necessary to list any component-devices in this command.
 '''They can be added later, before a
 '''.B --run. 
 '''If no 
@@ -396,157 +746,457 @@ can override this caution.
 The General Management options that are valid with --create are:
 .TP
 .B --run
-insist of running the array even if some devices look like they might
+insist on running the array even if some devices look like they might
 be in use.
 
 .TP
 .B --readonly
 start the array readonly - not supported yet.
 
-.SH DETAIL MODE
+.SH MANAGE MODE
 .HP 12
 Usage:
-.B mdadm --detail
-.RB [ --brief ]
-.I device ...
+.B mdadm
+.I device
+.I options... devices...
 .PP
 
-This usage sill print out the details of the given array including a
-list of component devices.  To determine names for the devices,
+This usage will allow individual devices in an array to be failed,
+removed or added.  It is possible to perform multiple operations with
+on command. For example:
+.br
+.B "  mdadm /dev/md0 -f /dev/hda1 -r /dev/hda1 -a /dev/hda1"
+.br
+will firstly mark
+.B /dev/hda1
+as faulty in
+.B /dev/md0
+and will then remove it from the array and finally add it back
+in as a spare.  However only one md array can be affected by a single
+command. 
+
+.SH MISC MODE
+.HP 12
+Usage:
 .B mdadm
-searches
-.B /dev
-for device files with the right major and minor numbers.
+.I options ...
+.I devices  ...
+.PP
 
-With
+MISC mode includes a number if distinct operations that
+operate on distinct devices.  The operations are:
+.TP
+--query
+The device is examined to see if it is
+(1) an active md array, or
+(2) a component of an md array.
+The information discovered is reported.
+
+.TP
+--detail
+The device should be an active md device.
+.B   mdadm
+will display a detailed description of the array.
 .B --brief
+or
+.B --scan
+will cause the output to be less detailed and the format to be
+suitable for inclusion in
+.BR /etc/mdadm.conf .
+The exit status of
+.I mdadm
+will normally be 0 unless
+.I mdadm
+failed to get useful information about the device(s).  However if the
+.B --test
+option is given, then the exit status will be:
+.RS
+.TP
+0
+The array is functioning normally.
+.TP
+1
+The array has at least one failed device.
+.TP
+2
+The array has multiple failed devices and hence is unusable (raid4 or
+raid5).
+.TP
+4
+There was an error while trying to get information about the device.
+.RE
+
+.TP
+--examine
+The device should be a component of an md array.
 .B mdadm
-prints a single line that identifies the level, number of disks, and
-UUID of the array.  This line is suitable for inclusion in
+will read the md superblock of the device and display the contents.
+If
+.B --brief
+is given, or
+.B --scan
+then multiple devices that are components of the one array
+are grouped together and reported in a single entry suitable
+for inclusion in
 .BR /etc/mdadm.conf .
 
-.SH EXAMINE MODE
+Having
+.B --scan
+without listing any devices will cause all devices listed in the
+config file to be examined.
+
+.TP
+--stop
+The devices should be active md arrays which will be deactivated, as
+long as they are not currently in use.
+
+.TP
+--run
+This will fully activate a partially assembled md array.
+
+.TP
+--readonly
+This will mark an active array as read-only, providing that it is
+not currently being used.
+
+.TP
+--readwrite
+This will change a
+.B readonly
+array back to being read/write.
+
+.TP
+--scan
+For all operations except
+.BR --examine ,
+.B --scan
+will cause the operation to be applied to all arrays listed in
+.BR /proc/mdstat .
+For
+.BR --examine,
+.B --scan
+causes all devices listed in the config file to be examined.
+
+
+.SH MONITOR MODE
+
 .HP 12
 Usage:
-.B mdadm --examine
-.RB [ --scan ]
-.RB [ --brief ]
-.I device ...
+.B mdadm --monitor
+.I options... devices...
+
 .PP
-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.
+This usage causes
+.B mdadm
+to periodically poll a number of md arrays and to report on any events
+noticed.
+.B mdadm
+will never exit once it decides that there are arrays to be checked,
+so it should normally be run in the background.
+
+As well as reporting events,
+.B mdadm
+may move a spare drive from one array to another if they are in the
+same
+.B spare-group
+and if the destination array has a failed drive but not spares.
+
+If any devices are listed on the command line,
+.B mdadm
+will only monitor those devices. Otherwise all arrays listed in the
+configuration file will be monitored.  Further, if
+.B --scan
+is given, then any other md devices that appear in
+.B /proc/mdstat
+will also be monitored.
+
+The result of monitoring the arrays is the generation of events.
+These events are passed to a separate program (if specified) and may
+be mailed to a given E-mail address.
+
+When passing event to program, the program is run once for each event
+and is given 2 or 3 command-line arguements.  The first is the
+name of the event (see below).  The second is the name of the
+md device which is affected, and the third is the name of a related
+device if relevant, such as a component device that has failed.
 
 If
 .B --scan
-is used, the no devices should be listed, and the complete set of
-devices identified in the configuration file are checked.
+is given, then a program or an E-mail address must be specified on the
+command line or in the config file.  If neither are available, then
+.B mdadm
+will not monitor anything.
+Without
 .B --scan
-implies
-.B --brief
-but this implication can be countered by specifying
-.BR --verbose .
-
-With
-.B --brief
 .B mdadm
-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
-.B NOT
-be used blindly.  Often the array description that you want in the
-configuration file is much less specific than that given by
-.BR "mdadm -Bs" .
-For example, you normally do not want to list the devices,
-particularly if they are SCSI devices.
-
-'''.SH BUGS
-'''no known bugs.
+will continue monitoring as long as something was found to monitor.  If
+no program or email is given, then each event is reported to
+.BR stdout .
 
-.SH FILES
-
-.SS /proc/mdstat
+The different events are:
 
-If you're using the 
-.B /proc 
-filesystem,
-.B /proc/mdstat
-gives you informations about md devices status.
-This file is not currently used by
-.BR mdadm .
+.RS 4
+.TP
+.B DeviceDisappeared
+An md array which previously was configured appears to no longer be
+configured.
 
-.SS /etc/mdadm.conf
+.TP
+.B RebuildStarted
+An md array started reconstruction.
 
-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).
+.TP
+.BI Rebuild NN
+Where
+.I NN
+is 20, 40, 60, or 80, this indicates that rebuild has passed that many
+percentage of the total.
 
-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.
+.TP
+.B RebuildFinished
+An md array that was rebuilding, isn't any more, either because it
+finished normally or was aborted.
 
-There are two types of lines. ARRAY and DEVICE.
+.TP
+.B Fail
+An active component device of an array has been marked as faulty.
 
-The DEVICE lines usually come first. All remaining words on the line
-are treated as names of devices, possibly containing wild cards (see
-.IR glob (7)).
-These list all the devices that
-.B mdadm
-is allowed to scan
-when looking for devices with RAID superblocks.
-Each line can contain multiple device names, and there can be multiple
-DEVICE lines.  For example:
-.IP
-DEVICE /dev/hda* /dev/hdc*
-.br
-DEV    /dev/sd*
-.br
-DEVICE /dev/discs/disc*/disc
-.PP
-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 considered a match.
-Each identity word has a tag, and equals sign, and some value.
-The options are:
+.TP
+.B FailSpare
+A spare component device which was being rebuilt to replace a faulty
+device has failed.
 
 .TP
-.B uuid=
-The value should be a 128 bit uuid in hexadecimal, with punctuation
-interspersed if desired.  This must match the uuid stored in the
-superblock.
+.B SpareActive
+A spare component device which was being rebuilt to replace a faulty
+device as been successfully rebuild and has been made active.
+
 .TP
-.B super-minor=
-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.
+.B NewArray
+A new md array has been detected in the
+.B /proc/mdstat
+file.
+
 .TP
-.B devices=
-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.
+.B DegradedArray
+A newly noticed array appears to be degraded.  This message is not
+generated when
+.I mdadm
+notices a drive failure which causes degradation, but only when
+.I mdadm
+notices that an array is degraded when it first sees the array.
+
 .TP
-.B level=
-The value is a raid level.  This is normally used to identify an
-array, but is supported so that the output of
-.B "mdadm --examine --scan"
-can be use directly in the configuration file.
+.B MoveSpare
+A spare drive has been moved from one array in a
+.B spare-group
+to another to allow a failed drive to be replaced.
+
 .TP
-.B disks=
-The value is the number of disks in a complete active array.  As with
-.B level=
-this is mainly for compatibility with the output of
-.BR "mdadm --examine --scan" .
+.B TestMessage
+An array was found at startup, and the
+.B --test
+flag was given.
+.RE
+
+Only
+.B Fail ,
+.B FailSpare ,
+.B DegradedArray ,
+and
+.B TestMessage
+cause Email to be sent.  All events cause the program to be run.
+The program is run with two or three arguments, they being the event
+name, the array device and possibly a second device.
+
+Each event has an associated array device (e.g.
+.BR /dev/md1 )
+and possibly a second device.  For
+.BR Fail ,
+.BR FailSpare ,
+and
+.B SpareActive
+the second device is the relevant component device.
+For
+.B MoveSpare
+the second device is the array that the spare was moved from.
+
+For
+.B mdadm
+to move spares from one array to another, the different arrays need to
+be labelled with the same
+.B spare-group
+in the configuration file.  The
+.B spare-group
+name can be any string. It is only necessary that different spare
+groups use different names.
+
+When
+.B mdadm
+detects that an array which is in a spare group has fewer active
+devices than necessary for the complete array, and has no spare
+devices, it will look for another array in the same spare group that
+has a full complement of working drive and a spare.  It will then
+attempt to remove the spare from the second drive and add it to the
+first.
+If the removal succeeds but the adding fails, then it is added back to
+the original array.
+
+.SH GROW MODE
+The GROW mode is used for changing the size or shape of an active
+array.
+For this to work, the kernel must support the necessary change.
+Various types of growth may be added during 2.6 development, possibly
+including restructuring a raid5 array to have more active devices.
+
+Currently the only support available is to change the "size" attribute
+for arrays with redundancy, and the raid-disks attribute of RAID1
+arrays.
+
+Normally when an array is build the "size" it taken from the smallest
+of the drives.  If all the small drives in an arrays are, one at a
+time, removed and replaced with larger drives, then you could have an
+array of large drives with only a small amount used.  In this
+situation, changing the "size" with "GROW" mode will allow the extra
+space to start being used.  If the size is increased in this way, a
+"resync" process will start to make sure the new parts of the array
+are synchronised.
+
+Note that when an array changes size, any filesystem that may be
+stored in the array will not automatically grow to use the space.  The
+filesystem will need to be explicitly told to use the extra space.
+
+A RAID1 array can work with any number of devices from 1 upwards
+(though 1 is not very useful).  There may be times which you want to
+increase or decrease the number of active devices.  Note that this is
+different to hot-add or hot-remove which changes the number of
+inactive devices.
+
+When reducing the number of devices in a RAID1 array, the slots which
+are to be removed from the array must already be vacant.  That is, the
+devices that which were in those slots must be failed and removed.
+
+When the number of devices is increased, any hot spares that are
+present may be activated immediately.
+
+.SH EXAMPLES
+
+.B "  mdadm --query /dev/name-of-device"
+.br
+This will find out if a given device is a raid array, or is part of
+one, and will provide brief information about the device.
+
+.B "  mdadm --assemble --scan"
+.br
+This will assemble and start all arrays listed in the standard confile
+file.  This command will typically go in a system startup file.
+
+.B "  mdadm --stop --scan"
+.br
+This will shut down all array that can be shut down (i.e. are not
+currently in used).  This will typically going in a system shutdown script.
+
+.B "  mdadm --follow --scan --delay=120"
+.br
+If (and only if) there is an Email address or program given in the
+standard config file, then
+monitor the status of all arrays listed in that file by
+polling them ever 2 minutes.
+
+.B "  mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/hd[ac]1"
+.br
+Create /dev/md0 as a RAID1 array consisting of /dev/hda1 and /dev/hdc1.
+
+.br
+.B "  echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' > mdadm.conf"
+.br
+.B "  mdadm --detail --scan >> mdadm.conf"
+.br
+This will create a prototype config file that describes currently
+active arrays that are known to be made from partitions of IDE or SCSI drives.
+This file should be reviewed before being used as it may
+contain unwanted detail.
+
+.B "  echo 'DEVICE /dev/hd[a-z] /dev/sd*[a-z]' > mdadm.conf"
+.br
+.B "  mdadm --examine --scan --config=mdadm.conf >> mdadm.conf"
+.ber
+This will find what arrays could be assembled from existign IDE and
+SCSI whole drives (not partitions) and store the information is the
+format of a config file.
+This file is very likely to contain unwanted detail, particularly
+the
+.B devices=
+entries.  It should be reviewed and edited before being used as an
+actual config file.
+
+.B "  mdadm --examine --brief --scan --config=partitions"
+.br
+.B "  mdadm -Ebsc partitions"
+.br
+Create a list of devices by reading
+.BR /proc/partitions ,
+scan these for RAID superblocks, and printout a brief listing of all
+that was found.
 
-.SH TODO
+.B "  mdadm -Ac partitions -m 0 /dev/md0"
+.br
+Scan all partitions and devices listed in
+.BR /proc/partitions
+and assemble
+.B /dev/md0
+out of all such devices with a RAID superblock with a minor number of 0.
+
+.B "  mdadm --monitor --scan --daemonise > /var/run/mdadm"
+.br
+If config file contains a mail address or alert program, run mdadm in
+the background in monitor mode monitoring all md devices.  Also write
+pid of mdadm daemon to
+.BR /var/run/mdadm .
+
+.B "  mdadm --create --help"
+.br
+Providew help about the Create mode.
+
+.B "  mdadm --config --help"
+.br
+Provide help about the format of the config file.
 
-Finish and document Follow mode.
+.B "  mdadm --help"
+.br
+Provide general help.
+
+
+.SH FILES
 
+.SS /proc/mdstat
+
+If you're using the 
+.B /proc 
+filesystem,
+.B /proc/mdstat
+lists all active md devices with information about them.
+.B mdadm
+uses this to find arrays when
+.B --scan
+is given in Misc mode, and to monitor array reconstruction
+on Monitor mode.
+
+
+.SS /etc/mdadm.conf
+
+The config file lists which devices may be scanned to see if
+they contain MD super block, and gives identifying information
+(e.g. UUID) about known MD arrays.  See
+.BR mdadm.conf (5)
+for more details.
+
+
+.SH NOTE
+.B mdadm
+was previously known as
+.BR mdctl .
 .SH SEE ALSO
 For information on the various levels of
 RAID, check out:
@@ -569,6 +1219,9 @@ or
 http://www.cse.unsw.edu.au/~neilb/patches/linux-stable/
 .URk
 .PP
+.BR mdadm.conf (5),
+.BR md (4).
+.PP
 .IR raidtab (5),
 .IR raid0run (8),
 .IR raidstop (8),