| mdmon(8) - phpMan
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 meta‐
data implies that user space handles all updates to the metadata. The kernel's responsi‐
bility 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 moni‐
tored; for example, the metadata version has been set to "exter‐
nal:-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 ker‐
nel 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
<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 meta‐
data 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:<meta‐
data name>". Member devices are identified by "external:/<container device>/<member
index>", or "external:-<container device>/<member index>" if the array is to remain read‐
only.
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 con‐
sidered 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 moni‐
tored 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).
v3.3.2 MDMON(8)
|