Adaptec metadata (and other) patches for md
Table of Contents
Overview
I'm pleased to announce the availability of a new set of md patches that
fix some bugs, and implement some new features.
The patchset is against 2.4.18, and is available
below.
This work is sponsored by Adaptec.
Questions or feedback? Let me know.
Basic summary of changes and features:
- Adaptec metadata support. The type of Adaptec metadata supported
here is used on controllers supported by the dpt_i2o driver (e.g.
2100, 3200, 3400, 3210, 3410, etc. RAID cards). (Note that cards
supported by the aacraid driver, like the 5400 and the 2200,
which has been recently announced, use a different type of metadata.)
This metadata will also be used on some upcoming Adaptec products.
This metadata support only works for RAID 0 and 1. RAID 5 support
would be possible in theory, but I haven't done the work to get
RAID 5 functional.
- Somewhat abstracted metadata support. Although the in-core
metadata code hasn't changed much, it can now get translated to
Adaptec metadata on the "bottom end" of things.
- Verify and verify and fix functionality. A verify or a
verify-and-fix can be kicked off via something like mdadm. I've
put patches for mdctl-0.4.2 below.
But they could be ported to a newer version of mdadm without much
trouble.
- Checkpointing. With Adaptec metadata, md can checkpoint the
operation currently outstanding on the array (verify, resync,
etc.) and the point the operation has reached. So if you reboot
your machine during a verify, it'll pick back up where it left
off.
- Improved error recovery.
- Parellel reconstruction and resync. With these patches, each md
array can reconstruct or resync independently of the others,
instead of being gated on a single kernel thread.
- Targeted resync. The md RAID-1 code can now resync from the
second disk onto the first disk, if that is necessary. Currently
md can only resync from the primary disk onto the secondary.
- RAID 0 I/O requests can span multiple drives or exceed the stripe
size. They no longer have to be contained to a single disk.
- Partitionable arrays. This patchset includes Neil Brown's
partitionable md patches. The partitionable devices are /dev/mda,
/dev/mdb, etc., and use the standard Linux partitionable device
naming scheme. (e.g. the first partition on mda is /dev/mda1)
- Improved autodetection. md can now autodetect Adaptec metadata or
md metadata arrays that are composed either of whole disks or
individual partitions. So you don't necessarily have to have
Linux RAID partitions in order for your array to be autodetected.
- A new task queueing system for md. You can now queue tasks for
the main thread in each md instance to execute. (e.g. resync,
verify, etc.)
- A new disk/device arrival notification system for Linux. This
code allows kernel clients to be notified when a new disk, or
partition with a particular type, arrives. I wrote this code
to provide an infrastructure that md could use so that the core md
code could be loaded as a module and still see disks that arrived
in the system before md is loaded.
Currently, md has to be statically compiled into the kernel in
order for autodetection to work. It has to be able to "see" disks
(via md_autodetect_dev()) as they come into the system.
With the new 'diskpart' code, when md registers its notification
routine, it'll be informed of any disks that have arrived up to
that point, and any disks that arrive in the future.
Although this would allow loading the core md code as a module, it
still won't really do anything for the case where disks arrive
after md has run its autoconfiguration hook (md_run_setup()),
since md would need to support the incremental arrival of disks.
It currently assumes, during autoconfiguration, that all the
necessary disks in the array are either there or not there. (it
doesn't take into account disks that have yet to arrive, except to
assume they aren't there)
Note that you can't really create or manage an Adaptec metadata array
from userland. You basically have to create the array using a RAID
controller, and then you can detect it and use it with md.
Download
Patch against 2.4.18
Patch against mdctl-0.4.2