summaryrefslogtreecommitdiff
path: root/TODO
blob: 279d20db99892c8e79b969a961ae38a7be5fd77c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
 - 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