man > mdmon(8)

MDMON(8)                               System Manager's Manual                              MDMON(8)

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  re‐
                            sync 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 han‐
                     dler 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  con‐
                     tainer  holds  the final reference on a block device and a mdadm --remove <con‐
                     tainer> <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 compari‐
       son  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 parti‐
       tions.  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  par‐
              ent 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 ar‐
              ray.   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 sep‐
              arate mdmon process is started for each container as the --all argument is  over-writ‐
              ten  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 consid‐
              ered 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 de‐
       vice.  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).

v4.3                                                                                        MDMON(8)
mdmon(8) □✕
NAME SYNOPSIS OVERVIEW DESCRIPTION
Metadata updates: Containers:
OPTIONS
--foreground --takeover
START UP AND SHUTDOWN EXAMPLES SEE ALSO

Generated by phpman v4.11.2-35-gf98a251 · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-10-07 13:12 @216.73.217.162
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 Transitional!Valid CSS!

^_top_^