 - add 'name' field to metadata type and use it.
 - use validate_geometry more
 - metadata should be able to check/reject bitmap stuff.

DDF:
  Three new metadata types:
    ddf - used only to create a container.
    ddf-bvd - used to create an array in a container
    ddf-svd - used to create a secondary array from bvds.

  Usage:
    mdadm -C /dev/ddf1 /dev/sd[abcdef]
    mdadm -C /dev/md1 -e ddf /dev/sd[a-f]
    mdadm -C /dev/md1 -l container /dev/sd[a-f]

        Each of these create a new ddf container using all those
	devices.  The name 'ddf*' signals that ddf metadata should be used.
	'-e ddf' only supports one level - 'container'.  'container' is only
	supported by ddf.

    mdadm -C /dev/md1 -l0 -n4 /dev/ddf1 # or maybe not ???
    mdadm -C /dev/md1 -l1 -n2 /dev/sda /dev/sdb
	If exactly one device is given, and it is a container, we select
	devices from that container.
	If devices are given that are already in use, they must be in use by
	a container, and the array is created in the container.
	If devices given are bvds, we slip under the hood to make
	  the svd arrays.

    mdadm -A /dev/ddf ......
	base drives make a container.  Anything in that container is started
	 auto-read-only.
	 if /dev/ddf is already assembled, we assemble bvds and svds inside it.


2005-dec-20
  Want an incremental assembly mode to work nicely with udev.
  Core usage would be something like
       mdadm --incr-assemble /dev/newdevice
  This would
     - examine the device to determine  uuid etc.
     - look for a match in /etc/mdadm.conf, abort if not found
     - find that device and collect current contents
     - perform an 'assemble' analysis to make sure we have the best set of devices.
     - remove or add devices as appropriate
     - possibly start the array if it was complete

   Other usages could involve
     - specify which array to auto-add to.
       This requires an existing array for uuid matching... is there any point?

     -


2004-june-02
  * Don't print 'errors' flag, it is meaningless. DONE
  * Handle new superblock format
  * create device file on demand, particularly partitionable devices. DONE
      BUT figure a way to create the partition devices.
              auto=partN
  * Use Event: interface to listen for events. DONE, untested
  * Make sure mdadm -As can assemble multi-level RAIDs ok.
  * --build to build raid1 or multipath arrays 
       clean or not ???
  
----------------------------------------------------------------------------
* mdadm --monitor to monitor failed multipath paths and re-instate them.

* Maybe make "--help" fit in 80x24 and have a --long-help with more info. DONE


* maybe "missing" instead of <bold>missing</> in doco DONE
* possibly wait for resync to start, or even finish while assembling.- NO

* -Db should have a devices= entry if possible. - DONE
* when assembling multipath arrays, ignore any error indicators. - DONE
* rationalise --monitor usage:
     mdadm --monitor
  doesn't do as expected. DONE

* --assemble could have a --update option. - DONE
  following word can be:
	sparc2.2
	super-minor

* mdadm /dev/md11, where md11 is raid0 can segfault, particularly when looking in the 
   [UU_UUU] string ... which doesn't exist !
It should be more sensible.  DONE

Example:

from  Raimund Sacherer <raimund.sacherer@ngit.at>

mke2fs -m0 -q /dev/ram1 300
mount -n -t ext2 /dev/ram1 /tmp
echo DEVICE /dev/[sh]* >> /tmp/mdadm.conf
mdadm -Esb /dev/[sh]* 2>/dev/null >> /tmp/mdadm.conf
mdadm -ARsc /tmp/mdadm.conf
umount /tmp


?? Allow -S /dev/md? - current complains subsequent not a/d/r - DONE

* new "Query" mode to subsume --detail and --examine.
   --query or -Q, takes a device and tells if it is an MD device,
   and also tells in a raid superblock is found. 
 DONE

* write mdstat.c to parse /proc/mdstat file
   Build list of arrays:  name, rebuild-percent
  DONE

* parse /proc/partitions and map major/minor into /dev/* names,
  and use that for default DEVICE list ????

* --detail --scan to read /proc/mdstat, and then iterate over these,
    but assume --brief.  --verbose can override
    check each subdevice to see if it is in conf_get_devs.
    Warn if not.
  DONE, but don't warn yet...

* Support multipath ... maybe...
  maybe DONE

* --follow to syslog 

* --follow to move spares around DONE

* --follow to notice other events: DONE
     rebuild started
     spare activated
     spare removed
     spare added

------------------------------------
- --examine --scan scans all drives and build an mdadm.conf file DONE

- check superblock checksum in examine DONE
- report "chunk" or "rounding" depending on raid level DONE
- report "linear" instead of "-1" for raid level DONE
- decode ayout depending on raid level DONE
- --verbose and --force flags. DONE

- set md_minor, *_disks for Create  - DONE
- for create raid5, how to choose between 
   all working, but not insync
   one missing, one spare, insync  DONE (--force)
- and for raid1 - some failed drives...  (missing)

- when RUN_ARRAY, make sure *_disks counts are right

- get --detail to extract extra stuff from superblock,
   like uuid  DONE
- --detail --brief to give a config file line DONE
- parse config file. DONE
- test...

- when --assemble --scan, if an underlying device is an md device, 
  then try to assemble that device first.


- mdadm -S /dev/md0 /dev/md1 gives internal error FIXED

- mdadm --detail --scan print summary of what it can find? DONE


---------
Assemble doesn't add spares. - DONE
Create to allow "missing" name for devices.
Create to accept "--force" for do exactly what is requested
- get Assemble to upgrade devices if force flag.
ARRAY lines in config file to have super_minor=n
ARRAY lines in config file to have device=pattern, and only accept
   those devices
   If UUID given, insist on that
   If not, but super_minor given, require all found with that minor
    to have same uuid
   If only device given, all valid supers on those devices must have 
    same uuid
allow /dev/mdX as first argument before any options
Possible --dry-run option for create and assemble--force

Assemble to check that all devices mentioned in superblock
  are present.

New mode: --Monitor (or --Follow)
  Periodically check status of all arrays (listed in config file).
  Log every event and apparent cause - or differences
  Email and alert - or run a program - for important events
  Move spares around if necessary.

  An Array line can have a spare-group= field that indicates that
   the array shares spares with other arrays with the same
   spare-group name.
   If an array has a failed and no spares, then check all other
     arrays in the spare group.  If one has no failures and a spare,
     then consider that spare.
    Choose the smallest considered spare that is large enough.
    If there is one, then hot-remove it from it's home, and
    hot-add it to the array in question.

  --mail-to address  
  --alert-handler program
  
  Will also extract information from /proc/mdstat if present,
  and consider 20% marks in rebuild as events.

  Events are:
     drive fails  - causes mail to be sent
     rebuild started
     spare activated
     spare removed
     spare added
