Go to file
NeilBrown 721b662b5b Monitor: fix reporting for Fail vs FailSpare etc.
The tests here were specific to 0.90 metadata and didn't
work properly for 1.x metadata, where a device's "number"
doesn't change.

By checking if this is a new array we can avoid some
corner cases.  Then we test mostly based on state and
not based on 'number' at all.

Signed-off-by: NeilBrown <neilb@suse.de>
2012-06-04 12:57:52 +10:00
misc mdadm-1.8.0 2004-11-01 04:49:34 +00:00
tests New tests testing removal of internal bitmaps 2012-05-30 10:46:25 +10:00
.gitignore .gitignore: ignore mdadm.8 file 2011-06-23 11:40:14 +10:00
ANNOUNCE-3.0 Release mdadm-3.0 2009-06-02 15:37:56 +10:00
ANNOUNCE-3.1 Release 3.1 2009-10-22 14:07:05 +11:00
ANNOUNCE-3.1.1 Release mdadm-3.1.1 2009-11-19 16:10:58 +11:00
ANNOUNCE-3.1.2 Add ANNOUNCE-3.1.2 2010-04-07 09:13:16 +10:00
ANNOUNCE-3.1.3 Release mdadm-3.1.3 2010-08-06 16:55:23 +10:00
ANNOUNCE-3.1.4 Release mdadm-3.1.4 2010-08-31 17:21:13 +10:00
ANNOUNCE-3.1.5 Release mdadm-3.1.5 2011-03-23 15:50:18 +11:00
ANNOUNCE-3.2 Release mdadm-3.2 - developer only release 2011-02-01 16:11:13 +11:00
ANNOUNCE-3.2.1 Release 3.2.1 2011-03-28 13:30:29 +11:00
ANNOUNCE-3.2.2 Release mdadm-3.2.2 2011-06-17 15:15:37 +10:00
ANNOUNCE-3.2.3 Release mdadm-3.2.3 2011-12-23 14:32:44 +11:00
ANNOUNCE-3.2.4 Create new release: 3.2.4 2012-05-09 09:42:57 +10:00
ANNOUNCE-3.2.5 Create new release: 3.2.5 2012-05-18 17:10:03 +10:00
ANNOUNCE-3.0.1 Release mdadm-3.0.1 2009-09-25 17:08:19 +10:00
ANNOUNCE-3.0.2 Release mdadm-3.0.2 2009-09-25 18:19:07 +10:00
ANNOUNCE-3.0.3 Release 3.0.3 2009-10-22 12:05:22 +11:00
Assemble.c Don't consider disks with a valid recovery offset as candidates for bumping up event count 2012-05-15 14:20:42 +10:00
bitmap.c Subject: bitmap: used 4K aligned buffers when reading the bitmap. 2011-12-23 14:09:29 +11:00
bitmap.h Remove spaces/tabs from ends of lines. 2007-12-14 20:13:43 +11:00
Build.c Create: allow chunksize to be non-power-of-2. 2011-05-10 17:35:41 +10:00
ChangeLog Release mdadm-3.1.4 2010-08-31 17:21:13 +10:00
config.c config: conf_match should ignore devname when not set. 2012-02-16 14:11:57 +11:00
COPYING Update COPYING file. 2011-08-18 12:55:24 +10:00
crc32.c Add crc32 files. 2008-05-15 16:48:10 +10:00
crc32.h Add crc32 files. 2008-05-15 16:48:10 +10:00
Create.c Create: round off size for RAID1 arrays. 2012-03-22 16:53:51 +11:00
Detail.c Monitor: fix inconsistencies in values for ->percent 2012-06-04 12:31:40 +10:00
dlink.c mdadm-1.5.0 2004-01-22 02:10:29 +00:00
dlink.h This is to avoid gcc warnings when building with strict-aliasing optimization 2006-05-29 02:06:32 +00:00
Examine.c examine: allows to examine a disk metadata on non-metadata compliant systems 2011-03-23 12:04:46 +11:00
external-reshape-design.txt Refactor reshape monitoring. 2011-01-06 15:58:32 +11:00
Grow.c Grow: don't print message if unfreezing fails. 2012-05-15 12:12:58 +10:00
Incremental.c Incremental: fix adding devices with --incremental 2012-03-22 15:53:53 +11:00
INSTALL mdadm-0.8.1 2002-04-05 22:00:28 +00:00
inventory Create new release: 3.2.5 2012-05-18 17:10:03 +10:00
kernel-patch-2.6.18 Add new mode: --incremental 2006-12-21 17:10:52 +11:00
kernel-patch-2.6.18.6 Add new mode: --incremental 2006-12-21 17:10:52 +11:00
kernel-patch-2.6.19 Add new mode: --incremental 2006-12-21 17:10:52 +11:00
kernel-patch-2.6.25 Fix kernel patch 2008-07-12 20:27:39 +10:00
kernel-patch-2.6.27 mdmon: periodically retry to create the socket 2008-10-15 14:15:52 -07:00
Kill.c Kill: remove duplicate tests on 'force'. 2011-11-01 13:30:44 +11:00
lib.c Add --prefer option for --detail and --monitor 2012-04-18 11:00:07 +10:00
makedist Create new release: 3.2.4 2012-05-09 09:42:57 +10:00
Makefile Adjust to new standard of /run 2012-05-03 14:16:56 +10:00
Manage.c Relax restrictions on when --add is permitted. 2012-04-18 14:19:49 +10:00
managemon.c Fix: Sometimes mdmon throws core dump during reshape 2012-02-09 12:20:52 +11:00
mapfile.c RebuildMap: check that container_content returns a valid 'info'. 2012-05-17 15:46:09 +10:00
maps.c split name/number maps into separate file. 2011-04-05 08:40:49 +10:00
md_p.h kill-subarray: fix, IMSM cannot kill-subarray with unsupported metadata 2011-10-31 11:29:46 +11:00
md_u.h Remove spaces/tabs from ends of lines. 2007-12-14 20:13:43 +11:00
md.4 md.4: two typos fixed 2011-08-23 09:13:08 +10:00
md5.h mdadm fix compilation for uClibc 2009-02-02 09:53:51 +11:00
mdadm.8.in Create new release: 3.2.5 2012-05-18 17:10:03 +10:00
mdadm.c Add --prefer option for --detail and --monitor 2012-04-18 11:00:07 +10:00
mdadm.conf-example Adjust to new standard of /run 2012-05-03 14:16:56 +10:00
mdadm.conf.5 mdadm.conf.5: typo: of -> or 2012-05-18 12:31:06 +10:00
mdadm.h Monitor: fix inconsistencies in values for ->percent 2012-06-04 12:31:40 +10:00
mdadm.spec Create new release: 3.2.5 2012-05-18 17:10:03 +10:00
mdassemble.8 Create new release: 3.2.5 2012-05-18 17:10:03 +10:00
mdassemble.c FIX: resolve make everything compilation error 2011-12-06 11:44:46 +11:00
mdmon-design.txt mdmon-design.txt 2010-12-16 22:12:26 +11:00
mdmon.8 Create new release: 3.2.5 2012-05-18 17:10:03 +10:00
mdmon.c Add --offroot argument to mdmon 2012-01-30 12:11:21 +11:00
mdmon.h FIX: Mdmon crashes after changing RAID level from 1 to 0 2011-09-06 15:19:58 +10:00
mdopen.c Update test for "is udev active". 2012-05-03 14:16:51 +10:00
mdstat.c Monitor: fix inconsistencies in values for ->percent 2012-06-04 12:31:40 +10:00
mkinitramfs Guides on how to use mdadm with initramfs 2005-12-05 05:56:42 +00:00
monitor.c monitor: ensure we retry soon when 'remove' fails. 2012-01-03 11:39:59 +11:00
Monitor.c Monitor: fix reporting for Fail vs FailSpare etc. 2012-06-04 12:57:52 +10:00
msg.c Flush mdmon before next reshape step during container operation 2012-02-09 12:20:52 +11:00
msg.h Flush mdmon before next reshape step during container operation 2012-02-09 12:20:52 +11:00
part.h Add mbr pseudo metadata handler. 2010-09-06 11:26:28 +10:00
platform-intel.c imsm: reading of UEFI variables needs an update 2011-03-28 10:42:07 +11:00
platform-intel.h show 2TB volumes/disks support in --detail-platform 2012-04-02 10:17:25 +10:00
policy.c Write_rules(): Avoid stack corruption if using extremely long udev pathname 2011-11-01 14:56:12 +11:00
probe_roms.c probe_roms: allow to probe expansion ROMs using vendor and device id. 2011-03-10 11:41:46 +11:00
probe_roms.h probe_roms: allow to probe expansion ROMs using vendor and device id. 2011-03-10 11:41:46 +11:00
pwgr.c Improve compiling for static binaries. 2006-05-29 04:09:21 +00:00
Query.c Remove unused variable 'superrno' in Query.c 2011-05-23 17:21:36 +10:00
raid5extend.c Remove spaces/tabs from ends of lines. 2007-12-14 20:13:43 +11:00
raid6check.8 RAID-6 check standalone man page 2011-08-09 10:43:58 +10:00
raid6check.c RAID-6 check standalone suspend array 2011-05-16 17:29:08 +10:00
ReadMe.c Create new release: 3.2.5 2012-05-18 17:10:03 +10:00
README.initramfs Guides on how to use mdadm with initramfs 2005-12-05 05:56:42 +00:00
restripe.c Fix serious memory leak 2011-09-19 13:26:05 +10:00
sg_io.c update copyright headers 2008-10-28 10:55:29 -07:00
sha1.c New sha1.c and sha1.h 2012-05-15 09:24:27 +10:00
sha1.h New sha1.c and sha1.h 2012-05-15 09:24:27 +10:00
super-ddf.c __write_init_super_ddf(): Use posix_memalign() instead of static aligned buffer 2012-03-21 08:07:12 +11:00
super-gpt.c Subject: bitmap: used 4K aligned buffers when reading the bitmap. 2011-12-23 14:09:29 +11:00
super-intel.c imsm: fix: correct checking volume's degradation 2012-05-29 09:34:39 +10:00
super-mbr.c match_metadata_desc(): Fix memory leak 2011-11-03 08:10:08 +11:00
super1.c mdadm: Fix Segmentation fault. 2012-05-29 09:21:51 +10:00
super0.c Examine: fix array size calculation for RAID10. 2012-03-22 14:43:09 +11:00
swap_super.c Getting ready for 2.0 release... 2005-08-26 02:26:37 +00:00
sysfs.c Introduce sysfs_set_num_signed() and use it to set bitmap/offset 2012-04-30 09:56:22 +10:00
test Fix --no-error in test script 2012-05-30 10:44:10 +10:00
TODO Initial DDF support code. 2008-05-15 16:48:14 +10:00
udev-md-raid.rules udev-rules: prevent systemd from mount devices before they are ready. 2012-05-24 11:49:49 +10:00
util.c Raid limit of 1024 when scanning for devices. 2012-04-18 09:06:02 +10:00

Assembling md arrays at boot time.
---------------------------------
December 2005

These notes apply to 2.6 kernels only and, in some cases,
to 2.6.15 or later.

Md arrays can be assembled at boot time using the 'autodetect' functionality
which is triggered by storing components of an array in partitions of type
'fd' - Linux Raid Autodetect.
They can also be assembled by specifying the component devices in a
kernel parameter such as
  md=0,/dev/sda,/dev/sdb
In this case, /dev/md0 will be assembled (because of the 0) from the listed
devices.

These mechanisms, while useful, do not provide complete functionality
and are unlikely to be extended.  The preferred way to assemble md
arrays at boot time is using 'mdadm' or 'mdassemble' (which is a
trimmed-down mdadm).  To assemble an array which contains the root
filesystem, mdadm needs to be run before that filesystem is mounted,
and so needs to be run from an initial-ram-fs.  It is how this can
work that is the primary focus of this document.

It should be noted up front that only the array containing the root
filesystem should be assembled from the initramfs.  Any other arrays
should be assembled under the control of files on the main filesystem
as this enhanced flexibility and maintainability.

A minimal initramfs for assembling md arrays can be created using 3
files and one directory.  These are:

/bin           Directory
/bin/mdadm     statically linked mdadm binary
/bin/busybox   statically linked busybox binary
/bin/sh        hard link to /bin/busybox
/init          a shell script which call mdadm appropriately.

An example init script is:

==============================================
#!/bin/sh

echo 'Auto-assembling boot md array'
mkdir /proc
mount -t proc proc /proc
if [ -n "$rootuuid" ]
then arg=--uuid=$rootuuid
elif [ -n "$mdminor" ]
then arg=--super-minor=$mdminor
else arg=--super-minor=0
fi
echo "Using $arg"
mdadm -Acpartitions $arg --auto=part /dev/mda
cd /
mount /dev/mda1 /root ||  mount /dev/mda /root
umount /proc
cd /root
exec chroot . /sbin/init < /dev/console > /dev/console 2>&1
=============================================

This could certainly be extended, or merged into a larger init script.
Though tested and in production use, it is not presented here as
"The Right Way" to do it, but as a useful example.
Some key points are:

  /proc needs to be mounted so that /proc/partitions can be accessed
  by mdadm, and so that /proc/filesystems can be accessed by mount.

  The uuid of the array can be passed in as a kernel parameter
  (rootuuid).  As the kernel doesn't use this value, it is made available
  in the environment for /init

  If no uuid is given, we default to md0, (--super-minor=0) which is a
  commonly used to store the root filesystem.  This may not work in
  all situations.

  We assemble the array as a partitionable array (/dev/mda) even if we
  end up using the whole array.  There is no cost in using the partitionable
  interface, and in this context it is simpler.

  We try mounting both /dev/mda1 and /dev/mda as they are the most like
  part of the array to contain the root filesystem.

  The --auto flag is given to mdadm so that it will create /dev/md*
  files automatically.  This is needed as /dev will not contain
  and md files, and udev will not create them (as udev only created device
  files after the device exists, and mdadm need the device file to create
  the device).  Note that the created md files may not exist in /dev
  of the mounted root filesystem.  This needs to be deal with separately
  from mdadm - possibly using udev.

  We do not need to create device files for the components which will
  be assembled into /dev/mda.  mdadm finds the major/minor numbers from
  /proc/partitions and creates a temporary /dev file if one doesn't already
  exist.

The script "mkinitramfs" which is included with the mdadm distribution
can be used to create a minimal initramfs.  It creates a file called
'init.cpio.gz' which can be specified as an 'initrd' to lilo or grub
(or whatever boot loader is being used).




Resume from an md array
-----------------------

If you want to make use of the suspend-to-disk/resume functionality in Linux,
and want to have swap on an md array, you will need to assemble the array
before resume is possible.
However, because the array is active in the resumed image, you do not want
anything written to any drives during the resume process, such as superblock
updates or array resync.

This can be achieved in 2.6.15-rc1 and later kernels using the
'start_readonly' module parameter.
Simply include the command
  echo 1 > /sys/module/md_mod/parameters/start_ro
before assembling the array with 'mdadm'.
You can then echo
  9:0
or whatever is appropriate to /sys/power/resume to trigger the resume.