Provided by: mdadm_4.1-5ubuntu1.2_amd64 bug

NAME

       mdmon - monitor MD external metadata arrays

SYNOPSIS

       mdmon [--all] [--takeover] [--foreground] CONTAINER

OVERVIEW

       The 2.6.27 kernel brings the ability to support external metadata arrays.  External metadata implies that
       user space handles all updates to the metadata.  The kernel's responsibility is to notify user space when
       a  "metadata  event" occurs, like disk failures and clean-to-dirty transitions.  The kernel, in important
       cases, waits for user space to take action on these notifications.

DESCRIPTION

   Metadata updates:
       To service metadata update requests a daemon, mdmon, is introduced.  Mdmon is  tasked  with  polling  the
       sysfs  namespace  looking for changes in array_state, sync_action, and per disk state attributes.  When a
       change is detected it calls a per metadata type handler to  make  modifications  to  the  metadata.   The
       following actions are taken:

              array_state - inactive
                     Clear the dirty bit for the volume and let the array be stopped

              array_state - write pending
                     Set  the  dirty  bit  for the array and then set array_state to active.  Writes are blocked
                     until userspace writes active.

              array_state - active-idle
                     The safe mode timer has expired so set array state to clean to block writes to the array

              array_state - clean
                     Clear the dirty bit for the volume

              array_state - read-only
                     This is the initial state that all arrays start at.  mdmon takes one of the three actions:

                     1/     Transition the array to read-auto keeping  the  dirty  bit  clear  if  the  metadata
                            handler determines that the array does not need resyncing or other modification

                     2/     Transition  the  array to active if the metadata handler determines a resync or some
                            other manipulation is necessary

                     3/     Leave the array read-only if the volume is marked to not be monitored; for  example,
                            the   metadata   version   has   been   set   to  "external:-dev/md127"  instead  of
                            "external:/dev/md127"

              sync_action - resync-to-idle
                     Notify the metadata handler that a resync may have completed.  If a resync process is idled
                     before it completes this event allows the metadata handler to checkpoint resync.

              sync_action - recover-to-idle
                     A  spare may have completed rebuilding so tell the metadata handler about the state of each
                     disk.  This is the metadata handler's opportunity to clear any "out-of-sync" bits and clear
                     the  volume's  degraded  status.   If  a recovery process is idled before it completes this
                     event allows the metadata handler to checkpoint recovery.

              <disk>/state - faulty
                     A disk failure kicks off a series of events.  First, notify the  metadata  handler  that  a
                     disk  has failed, and then notify the kernel that it can unblock writes that were dependent
                     on this disk.  After unblocking the kernel this disk is set to be removed+ from the  member
                     array.  Finally the disk is marked failed in all other member arrays in the container.

                     + Note This behavior differs slightly from native MD arrays where removal is reserved for a
                     mdadm --remove event.  In  the  external  metadata  case  the  container  holds  the  final
                     reference  on  a  block  device  and  a  mdadm  --remove <container> <victim> call is still
                     required.

   Containers:
       External metadata formats, like DDF, differ from the native MD metadata formats in that they define a set
       of  disks  and  a  series  of  sub-arrays  within  those  disks.  MD metadata in comparison defines a 1:1
       relationship between a set of block devices and a  RAID  array.   For  example  to  create  2  arrays  at
       different  RAID  levels  on a single set of disks, MD metadata requires the disks be partitioned and then
       each array can be created with a subset of those partitions.  The supported external formats perform this
       disk carving internally.

       Container  devices  simply  hold  references  to all member disks and allow tools like mdmon to determine
       which active arrays belong to which container.  Some array management commands like disk removal and disk
       add  are  now  only valid at the container level.  Attempts to perform these actions on member arrays are
       blocked with error messages like:

              "mdadm: Cannot remove disks from a ´member´ array, perform this operation on the parent container"

       Containers are identified in /proc/mdstat with a  metadata  version  string  "external:<metadata  name>".
       Member  devices are identified by "external:/<container device>/<member index>", or "external:-<container
       device>/<member index>" if the array is to remain readonly.

OPTIONS

       CONTAINER
              The container device to monitor.  It can be a full path like /dev/md/container,  or  a  simple  md
              device name like md127.

       --foreground
              Normally,  mdmon will fork and continue in the background.  Adding this option will skip that step
              and run mdmon in the foreground.

       --takeover
              This instructs mdmon to replace any active mdmon which is currently monitoring the array.  This is
              primarily  used  late in the boot process to replace any mdmon which was started from an initramfs
              before the root filesystem was mounted.   This  avoids  holding  a  reference  on  that  initramfs
              indefinitely  and  ensures  that  the  pid  and sock files used to communicate with mdmon are in a
              standard place.

       --all  This tells mdmon to find any active containers and start monitoring each of them  if  appropriate.
              This  is  normally  used  with  --takeover late in the boot sequence.  A separate mdmon process is
              started for each container as the --all argument is over-written with the name of  the  container.
              To  allow  for  containers  with  names longer than 5 characters, this argument can be arbitrarily
              extended, e.g. to --all-active-arrays.

              Note that
              mdmon is automatically started by mdadm when needed and so does not need  to  be  considered  when
              working  with  RAID arrays.  The only times it is run other than by mdadm is when the boot scripts
              need to restart it after mounting the new root filesystem.

START UP AND SHUTDOWN

       As mdmon needs to be running whenever any filesystem on the monitored device is mounted there are special
       considerations  when the root filesystem is mounted from an mdmon monitored device.  Note that in general
       mdmon is needed even if the filesystem is mounted read-only as some filesystems can still  write  to  the
       device in those circumstances, for example to replay a journal after an unclean shutdown.

       When  the  array  is  assembled  by the initramfs code, mdadm will automatically start mdmon as required.
       This means that mdmon must be installed on  the  initramfs  and  there  must  be  a  writable  filesystem
       (typically  tmpfs)  in which mdmon can create a .pid and .sock file.  The particular filesystem to use is
       given to mdmon at compile time and defaults to /run/mdadm.

       This filesystem must persist through to shutdown time.

       After the final root filesystem has be instantiated (usually with pivot_root) mdmon should  be  run  with
       --all  --takeover  so  that  the mdmon running from the initramfs can be replaced with one running in the
       main root, and so the memory used by the initramfs can be released.

       At shutdown time, mdmon should not be killed along with other processes.  Also as it holds a file (socket
       actually)  open  in  /dev  (by  default)  it  will  not  be  possible to unmount /dev if it is a separate
       filesystem.

EXAMPLES

         mdmon --all-active-arrays --takeover
       Any mdmon which is currently running is killed and a new instance is started.  This should be run  during
       in the boot sequence if an initramfs was used, so that any mdmon running from the initramfs will not hold
       the initramfs active.

SEE ALSO

       mdadm(8), md(4).