parent
76ae482075
commit
7b0bbd0f71
|
@ -0,0 +1,75 @@
|
||||||
|
|
||||||
|
|
||||||
|
I am pleased to announce the availability of
|
||||||
|
mdadm version 3.2.1
|
||||||
|
|
||||||
|
It is available at the usual places:
|
||||||
|
countrycode=xx.
|
||||||
|
http://www.${countrycode}kernel.org/pub/linux/utils/raid/mdadm/
|
||||||
|
and via git at
|
||||||
|
git://neil.brown.name/mdadm
|
||||||
|
http://neil.brown.name/git/mdadm
|
||||||
|
|
||||||
|
Many of the changes in this release are of internal interest only,
|
||||||
|
restructuring and refactoring code and so forth.
|
||||||
|
|
||||||
|
Most of the bugs found and fixed during development for 3.2.1 have been
|
||||||
|
back-ported for the recently-release 3.1.5 so this release primarily
|
||||||
|
provides a few new features over 3.1.5.
|
||||||
|
|
||||||
|
They include:
|
||||||
|
- policy framework
|
||||||
|
Policy can be expressed for moving spare devices between arrays, and
|
||||||
|
for how to handle hot-plugged devices. This policy can be different
|
||||||
|
for devices plugged in to different controllers etc.
|
||||||
|
This, for example, allows a configuration where when a device is plugged
|
||||||
|
in it is immediately included in an md array as a hot spare and
|
||||||
|
possibly starts recovery immediately if an array is degraded.
|
||||||
|
|
||||||
|
- some understanding of mbr and gpt paritition tables
|
||||||
|
This is primarly to support the new hot-plug support. If a
|
||||||
|
device is plugged in and policy suggests it should have a partition table,
|
||||||
|
the partition table will be copied from a suitably similar device, and
|
||||||
|
then the partitions will hot-plug and can then be added to md arrays.
|
||||||
|
|
||||||
|
- "--incremental --remove" can remember where a device was removed from
|
||||||
|
so if a device gets plugged back in the same place, special policy applies
|
||||||
|
to it, allowing it to be included in an array even if a general hotplug
|
||||||
|
will not be included.
|
||||||
|
|
||||||
|
- enhanced reshape options, including growing a RAID0 by converting to RAID4,
|
||||||
|
restriping, and converting back. Also convertions between RAID0 and
|
||||||
|
RAID10 and between RAID1 and RAID10 are possible (with a suitably recent
|
||||||
|
kernel).
|
||||||
|
|
||||||
|
- spare migration for IMSM arrays.
|
||||||
|
Spare migration can now work across 'containers' using non-native metadata
|
||||||
|
and specifically Intel's IMSM arrays support spare migrations.
|
||||||
|
|
||||||
|
- OLCE and level migration for Intel IMSM arrays.
|
||||||
|
OnLine Capacity Expansion and level migration (e.g. RAID0 -> RAID5) is
|
||||||
|
supported for Intel Matrix Storage Manager arrays.
|
||||||
|
This support is currently 'experimental' for technical reasons. It can
|
||||||
|
be enabled with "export MDADM_EXPERIMENTAL=1"
|
||||||
|
|
||||||
|
- avoid including wayward devices
|
||||||
|
If you split a RAID1, mount the two halves as two separate degraded RAID1s,
|
||||||
|
and then later bring the two back together, it is possible that the md
|
||||||
|
metadata won't properly show that one must over-ride the other.
|
||||||
|
mdadm now does extra checking to detect this possibilty and avoid
|
||||||
|
potentially corrupting data.
|
||||||
|
|
||||||
|
- remove any possible confusion between similar options.
|
||||||
|
e.g. --brief and --bitmap were mapped to 'b' and mdadm wouldn't
|
||||||
|
notice if one was used where the other was expected.
|
||||||
|
|
||||||
|
- allow K,M,G suffixes on chunk sizes
|
||||||
|
|
||||||
|
|
||||||
|
While mdadm-3.2.1 is considered to be reasonably stable, you should
|
||||||
|
only use it if you want to try out the new features, or if you
|
||||||
|
generally like to be on the bleeding edge. If the new features are not
|
||||||
|
important to you, then 3.1.5 is probably the appropriate version to be using
|
||||||
|
until 3.2.2 comes out.
|
||||||
|
|
||||||
|
NeilBrown 28th March 2011
|
|
@ -438,7 +438,7 @@ int Incremental(char *devname, int verbose, int runstop,
|
||||||
/* 7/ Is there enough devices to possibly start the array? */
|
/* 7/ Is there enough devices to possibly start the array? */
|
||||||
/* 7a/ if not, finish with success. */
|
/* 7a/ if not, finish with success. */
|
||||||
if (info.array.level == LEVEL_CONTAINER) {
|
if (info.array.level == LEVEL_CONTAINER) {
|
||||||
int devnum;
|
int devnum = devnum; /* defined and used iff ->external */
|
||||||
/* Try to assemble within the container */
|
/* Try to assemble within the container */
|
||||||
map_unlock(&map);
|
map_unlock(&map);
|
||||||
sysfs_uevent(&info, "change");
|
sysfs_uevent(&info, "change");
|
||||||
|
|
2
ReadMe.c
2
ReadMe.c
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
#include "mdadm.h"
|
#include "mdadm.h"
|
||||||
|
|
||||||
char Version[] = Name " - v3.2 DEVELOPER_ONLY - 1st February 2011 (USE WITH CARE)\n";
|
char Version[] = Name " - v3.2.1 - 28th March 2011\n";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* File: ReadMe.c
|
* File: ReadMe.c
|
||||||
|
|
|
@ -10,6 +10,7 @@ ANNOUNCE-3.1.3
|
||||||
ANNOUNCE-3.1.4
|
ANNOUNCE-3.1.4
|
||||||
ANNOUNCE-3.1.5
|
ANNOUNCE-3.1.5
|
||||||
ANNOUNCE-3.2
|
ANNOUNCE-3.2
|
||||||
|
ANNOUNCE-3.2.1
|
||||||
Assemble.c
|
Assemble.c
|
||||||
bitmap.c
|
bitmap.c
|
||||||
bitmap.h
|
bitmap.h
|
||||||
|
@ -75,6 +76,7 @@ probe_roms.h
|
||||||
pwgr.c
|
pwgr.c
|
||||||
Query.c
|
Query.c
|
||||||
raid5extend.c
|
raid5extend.c
|
||||||
|
raid6check.c
|
||||||
ReadMe.c
|
ReadMe.c
|
||||||
README.initramfs
|
README.initramfs
|
||||||
restripe.c
|
restripe.c
|
||||||
|
@ -179,6 +181,7 @@ tests/18imsm-1d-takeover-r0_1d
|
||||||
tests/18imsm-1d-takeover-r1_2d
|
tests/18imsm-1d-takeover-r1_2d
|
||||||
tests/18imsm-r0_2d-takeover-r10_4d
|
tests/18imsm-r0_2d-takeover-r10_4d
|
||||||
tests/18imsm-r10_4d-takeover-r0_2d
|
tests/18imsm-r10_4d-takeover-r0_2d
|
||||||
|
tests/18imsm-r1_2d-takeover-r0_1d
|
||||||
tests/check
|
tests/check
|
||||||
tests/env-imsm-template
|
tests/env-imsm-template
|
||||||
tests/imsm-grow-template
|
tests/imsm-grow-template
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
.\" the Free Software Foundation; either version 2 of the License, or
|
.\" the Free Software Foundation; either version 2 of the License, or
|
||||||
.\" (at your option) any later version.
|
.\" (at your option) any later version.
|
||||||
.\" See file COPYING in distribution for details.
|
.\" See file COPYING in distribution for details.
|
||||||
.TH MDADM 8 "" v3.2
|
.TH MDADM 8 "" v3.2.1
|
||||||
.SH NAME
|
.SH NAME
|
||||||
mdadm \- manage MD devices
|
mdadm \- manage MD devices
|
||||||
.I aka
|
.I aka
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Summary: mdadm is used for controlling Linux md devices (aka RAID arrays)
|
Summary: mdadm is used for controlling Linux md devices (aka RAID arrays)
|
||||||
Name: mdadm
|
Name: mdadm
|
||||||
Version: 3.2
|
Version: 3.2.1
|
||||||
Release: 1
|
Release: 1
|
||||||
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tgz
|
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tgz
|
||||||
URL: http://neil.brown.name/blog/mdadm
|
URL: http://neil.brown.name/blog/mdadm
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.\" -*- nroff -*-
|
.\" -*- nroff -*-
|
||||||
.TH MDASSEMBLE 8 "" v3.2
|
.TH MDASSEMBLE 8 "" v3.2.1
|
||||||
.SH NAME
|
.SH NAME
|
||||||
mdassemble \- assemble MD devices
|
mdassemble \- assemble MD devices
|
||||||
.I aka
|
.I aka
|
||||||
|
|
2
mdmon.8
2
mdmon.8
|
@ -1,5 +1,5 @@
|
||||||
.\" See file COPYING in distribution for details.
|
.\" See file COPYING in distribution for details.
|
||||||
.TH MDMON 8 "" v3.2-devel
|
.TH MDMON 8 "" v3.2.1
|
||||||
.SH NAME
|
.SH NAME
|
||||||
mdmon \- monitor MD external metadata arrays
|
mdmon \- monitor MD external metadata arrays
|
||||||
|
|
||||||
|
|
|
@ -383,7 +383,6 @@ const char *get_sys_dev_type(enum sys_dev_type type)
|
||||||
return _sys_dev_type[type];
|
return _sys_dev_type[type];
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MDASSEMBLE
|
|
||||||
static struct intel_hba * alloc_intel_hba(struct sys_dev *device)
|
static struct intel_hba * alloc_intel_hba(struct sys_dev *device)
|
||||||
{
|
{
|
||||||
struct intel_hba *result = malloc(sizeof(*result));
|
struct intel_hba *result = malloc(sizeof(*result));
|
||||||
|
@ -407,7 +406,6 @@ static struct intel_hba * find_intel_hba(struct intel_hba *hba, struct sys_dev *
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int attach_hba_to_super(struct intel_super *super, struct sys_dev *device)
|
static int attach_hba_to_super(struct intel_super *super, struct sys_dev *device)
|
||||||
{
|
{
|
||||||
struct intel_hba *hba;
|
struct intel_hba *hba;
|
||||||
|
@ -473,7 +471,6 @@ static struct sys_dev* find_disk_attached_hba(int fd, const char *devname)
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif /* MDASSEMBLE */
|
|
||||||
|
|
||||||
|
|
||||||
static int find_intel_hba_capability(int fd, struct intel_super *super,
|
static int find_intel_hba_capability(int fd, struct intel_super *super,
|
||||||
|
@ -4962,6 +4959,7 @@ static struct mdinfo *container_content_imsm(struct supertype *st, char *subarra
|
||||||
*/
|
*/
|
||||||
|
|
||||||
chunk = __le16_to_cpu(map->blocks_per_strip) >> 1;
|
chunk = __le16_to_cpu(map->blocks_per_strip) >> 1;
|
||||||
|
#ifndef MDASSEMBLE
|
||||||
if (!validate_geometry_imsm_orom(super,
|
if (!validate_geometry_imsm_orom(super,
|
||||||
get_imsm_raid_level(map), /* RAID level */
|
get_imsm_raid_level(map), /* RAID level */
|
||||||
imsm_level_to_layout(get_imsm_raid_level(map)),
|
imsm_level_to_layout(get_imsm_raid_level(map)),
|
||||||
|
@ -4972,6 +4970,7 @@ static struct mdinfo *container_content_imsm(struct supertype *st, char *subarra
|
||||||
"Cannot proceed with the action(s).\n");
|
"Cannot proceed with the action(s).\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
#endif /* MDASSEMBLE */
|
||||||
this = malloc(sizeof(*this));
|
this = malloc(sizeof(*this));
|
||||||
if (!this) {
|
if (!this) {
|
||||||
fprintf(stderr, Name ": failed to allocate %zu bytes\n",
|
fprintf(stderr, Name ": failed to allocate %zu bytes\n",
|
||||||
|
|
Loading…
Reference in New Issue