Go to file
Guoqing Jiang 119b66a473 super1: make write_bitmap1 compatible with previous mdadm versions
For older mdadm version, v1.x metadata has different bitmap_offset,
we can't ensure all the bitmaps are on a 4K boundary since writing
4K for bitmap could corrupt the superblock, and Anthony reported
the bug about it at below link.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837964

So let's check about the alignment for bitmap_offset before set
the boundary to 4096 unconditionally. Thanks for Neil's detailed
explanation.

Reported-by: Anthony DeRobertis <anthony@derobert.net>
Fixes: 95a05b37e8 ("Create n bitmaps for clustered mode")
Cc: Neil Brown <neilb@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
2016-10-19 11:21:15 -04:00
misc mdcheck: be careful when sourcing the output of "mdadm --detail --export" 2015-02-04 09:06:47 +11:00
systemd systemd/mdadm-last-resort: add Conflicts to .service file. 2016-01-28 11:45:53 +11:00
tests mdadm: add test script for raid456 journal 2015-10-22 12:20:08 +11:00
.gitignore Add raid6check to .gitignore 2013-08-26 15:26:54 +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.2.6 Add ANNOUNCE-3.2.6 from different branch 2013-08-26 15:28:43 +10:00
ANNOUNCE-3.3 Release mdadm-3.3 2013-09-03 14:47:47 +10:00
ANNOUNCE-3.3.1 Release mdadm-3.3.1 2014-06-05 16:54:24 +10:00
ANNOUNCE-3.3.2 Release mdadm-3.3.2 2014-08-21 20:16:56 +10:00
ANNOUNCE-3.3.3 Release mdadm-3.3.3 2015-07-24 16:18:17 +10:00
ANNOUNCE-3.3.4 Release mdadm-3.3.4 2015-08-03 16:17:13 +10:00
ANNOUNCE-3.4 Release mdadm-3.4 2016-01-28 17:14:56 +11: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 Introduce random_uuid() helper function 2016-08-15 15:41:34 -04:00
bitmap.c bitmap: Mark a number of local functions static 2016-08-15 16:35:28 -04:00
bitmap.h Increment version for clustered bitmaps 2015-09-28 11:47:04 +10:00
Build.c Don't break long strings onto multiple lines. 2015-02-12 13:46:53 +11:00
ChangeLog Release mdadm-3.3 2013-09-03 14:47:47 +10:00
config.c config: Various stylistic cleanups 2016-08-11 15:48:09 -04:00
COPYING Update COPYING file. 2011-08-18 12:55:24 +10:00
crc32.c Add zlib license to crc32.c 2012-10-03 18:17:26 +10:00
crc32.h Add crc32 files. 2008-05-15 16:48:10 +10:00
crc32c.c add crc32c and use it for r5l checksum 2015-10-30 17:38:28 +11:00
Create.c mdadm: Make add_internal_bitmap() return 0 on success 2016-05-12 15:19:16 -04:00
Detail.c mdadm: put journal device in right place of --detail 2016-08-12 10:58:58 -04:00
dlink.c Remove lots of unnecessary white space. 2013-06-19 12:31:45 +10:00
dlink.h Remove scattered checks for malloc success. 2012-07-09 17:14:16 +10:00
Dump.c Add --dump / --restore functionality. 2013-05-16 15:07:16 +10:00
Examine.c Release mdadm-3.3 2013-09-03 14:47:47 +10:00
external-reshape-design.txt Remove some trailing white space 2015-07-02 08:26:30 +10:00
Grow.c MDADM:Check mdinfo->reshape_active more times before calling Grow_continue 2016-06-16 13:53:45 -04:00
Incremental.c Incremental: don't try to load_container() for a subarray 2016-08-09 10:57:15 -04:00
INSTALL mdadm-0.8.1 2002-04-05 22:00:28 +00:00
inventory Release mdadm-3.4 2016-01-28 17:14:56 +11: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 Discard devnum in favour of devnm 2013-02-21 17:05:23 +11:00
lib.c lib: Various coding style cleanups 2016-08-11 16:01:00 -04:00
makedist Release mdadm-3.3 2013-09-03 14:47:47 +10:00
Makefile Makefile: make the CC definition conditional 2016-02-08 10:54:34 -05:00
Manage.c Remove: container should wait for an array to release a drive 2016-07-21 11:25:16 -04:00
managemon.c Don't ignore return value from read and write 2015-07-24 16:11:23 +10:00
mapfile.c Use dev_t for devnm2devid and devid2devnm 2016-06-03 15:35:26 -04:00
maps.c Remove lots of unnecessary white space. 2013-06-19 12:31:45 +10:00
md_p.h Enable create array with write journal (--write-journal DEVICE). 2015-10-19 13:06:12 +11:00
md_u.h mdadm: Change timestamps to unsigned data type. 2015-12-16 12:43:25 +11:00
md.4 mdadm: Add description of write journal to md.4 2015-10-22 12:19:11 +11:00
md5.h mdadm fix compilation for uClibc 2009-02-02 09:53:51 +11:00
mdadm.8.in mdadm: add man page for --add-journal 2016-08-12 10:57:13 -04:00
mdadm.c mdadm:add 'clustered' in typo prompt when specify wrong param for bitmap 2016-08-02 10:06:43 -04:00
mdadm.conf-example Remove some trailing white space 2015-07-02 08:26:30 +10:00
mdadm.conf.5 config: new option to suppress adding bad block lists. 2014-08-07 12:23:45 +10:00
mdadm.h Introduce random_uuid() helper function 2016-08-15 15:41:34 -04:00
mdadm.spec Release mdadm-3.4 2016-01-28 17:14:56 +11:00
mdassemble.8 Release mdadm-3.4 2016-01-28 17:14:56 +11:00
mdassemble.c mdassemble: include mapfile support. 2015-08-03 15:42:31 +10:00
mdmon-design.txt mdmon-design.txt 2010-12-16 22:12:26 +11:00
mdmon.8 Release mdadm-3.4 2016-01-28 17:14:56 +11:00
mdmon.c Add casts for the addr arg of connect and bind 2016-01-15 08:36:45 +11:00
mdmon.h Fix some issues found by clang 2016-10-07 11:47:48 -04:00
mdopen.c Fix some issues found by clang 2016-10-07 11:47:48 -04:00
mdstat.c Monitor: release /proc/mdstat fd when no arrays present 2016-07-21 11:37:17 -04:00
mkinitramfs Remove lots of unnecessary white space. 2013-06-19 12:31:45 +10:00
monitor.c monitor: Make sure that last_checkpoint is set to 0 after sync 2016-06-16 13:55:09 -04:00
Monitor.c Monitor: release /proc/mdstat fd when no arrays present 2016-07-21 11:37:17 -04:00
msg.c Add casts for the addr arg of connect and bind 2016-01-15 08:36:45 +11:00
msg.h Remove lots of unnecessary white space. 2013-06-19 12:31:45 +10:00
part.h Remove lots of unnecessary white space. 2013-06-19 12:31:45 +10:00
platform-intel.c {platform,super}-intel: Fix two resource leaks 2016-03-09 11:35:34 -05:00
platform-intel.h IMSM: Add support for VMD 2016-01-06 12:22:57 +11:00
policy.c Don't break long strings onto multiple lines. 2015-02-12 13:46:53 +11:00
probe_roms.c Move ARRAY_SIZE macro to common include file. 2013-09-10 09:48:06 +10: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 lots of unnecessary white space. 2013-06-19 12:31:45 +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 raid6check: don't ignore return value from posix_memalign. 2015-08-05 14:51:25 +10:00
ReadMe.c Release mdadm-3.4 2016-01-28 17:14:56 +11:00
README.initramfs Guides on how to use mdadm with initramfs 2005-12-05 05:56:42 +00:00
restripe.c Fix some issues found by clang 2016-10-07 11:47:48 -04:00
sg_io.c imsm: retrieve nvme serial from sysfs 2016-10-07 11:18:32 -04:00
sha1.c Remove lots of unnecessary white space. 2013-06-19 12:31:45 +10:00
sha1.h Remove lots of unnecessary white space. 2013-06-19 12:31:45 +10:00
super-ddf.c ddf: use 64bit 'size', not 32bit 'info->size' for create. 2016-03-10 11:42:41 -05:00
super-gpt.c Consistently print program Name and __func__ in debug messages. 2015-02-12 13:21:17 +11:00
super-intel.c Fix some issues found by clang 2016-10-07 11:47:48 -04:00
super-mbr.c Consistently print program Name and __func__ in debug messages. 2015-02-12 13:21:17 +11:00
super1.c super1: make write_bitmap1 compatible with previous mdadm versions 2016-10-19 11:21:15 -04:00
super0.c super0: Clean up formatting in examine_super0() 2016-08-15 15:56:23 -04:00
swap_super.c Remove lots of unnecessary white space. 2013-06-19 12:31:45 +10:00
sysfs.c sysfs: Avoid if and return on the same line 2016-08-11 15:52:48 -04:00
test mdadm: add test script for raid456 journal 2015-10-22 12:20:08 +11:00
TODO Initial DDF support code. 2008-05-15 16:48:14 +10:00
udev-md-raid-arrays.rules install: use BINDIR consistently to locate mdadm and mdmon 2014-05-22 17:13:02 +10:00
udev-md-raid-assembly.rules install: use BINDIR consistently to locate mdadm and mdmon 2014-05-22 17:13:02 +10:00
util.c Fix RAID metadata check 2016-09-22 11:35:02 -04:00
xmalloc.c Don't ignore return value from read and write 2015-07-24 16:11:23 +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.