| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | .\" $NetBSD: raid.4,v 1.35 2008/05/02 18:11:05 martin Exp $ | | 1 | .\" $NetBSD: raid.4,v 1.36 2009/05/04 20:37:07 wiz Exp $ |
2 | .\" | | 2 | .\" |
3 | .\" Copyright (c) 1998 The NetBSD Foundation, Inc. | | 3 | .\" Copyright (c) 1998 The NetBSD Foundation, Inc. |
4 | .\" All rights reserved. | | 4 | .\" All rights reserved. |
5 | .\" | | 5 | .\" |
6 | .\" This code is derived from software contributed to The NetBSD Foundation | | 6 | .\" This code is derived from software contributed to The NetBSD Foundation |
7 | .\" by Greg Oster | | 7 | .\" by Greg Oster |
8 | .\" | | 8 | .\" |
9 | .\" Redistribution and use in source and binary forms, with or without | | 9 | .\" Redistribution and use in source and binary forms, with or without |
10 | .\" modification, are permitted provided that the following conditions | | 10 | .\" modification, are permitted provided that the following conditions |
11 | .\" are met: | | 11 | .\" are met: |
12 | .\" 1. Redistributions of source code must retain the above copyright | | 12 | .\" 1. Redistributions of source code must retain the above copyright |
13 | .\" notice, this list of conditions and the following disclaimer. | | 13 | .\" notice, this list of conditions and the following disclaimer. |
14 | .\" 2. Redistributions in binary form must reproduce the above copyright | | 14 | .\" 2. Redistributions in binary form must reproduce the above copyright |
| @@ -77,194 +77,215 @@ | | | @@ -77,194 +77,215 @@ |
77 | .Cd options RF_INCLUDE_PARITY_DECLUSTERING=n | | 77 | .Cd options RF_INCLUDE_PARITY_DECLUSTERING=n |
78 | .Cd options RF_INCLUDE_PARITY_DECLUSTERING_DS=n | | 78 | .Cd options RF_INCLUDE_PARITY_DECLUSTERING_DS=n |
79 | .Cd options RF_INCLUDE_PARITYLOGGING=n | | 79 | .Cd options RF_INCLUDE_PARITYLOGGING=n |
80 | .Cd options RF_INCLUDE_RAID5_RS=n | | 80 | .Cd options RF_INCLUDE_RAID5_RS=n |
81 | .Pp | | 81 | .Pp |
82 | .Cd "pseudo-device raid" Op Ar count | | 82 | .Cd "pseudo-device raid" Op Ar count |
83 | .Sh DESCRIPTION | | 83 | .Sh DESCRIPTION |
84 | The | | 84 | The |
85 | .Nm | | 85 | .Nm |
86 | driver provides RAID 0, 1, 4, and 5 (and more!) capabilities to | | 86 | driver provides RAID 0, 1, 4, and 5 (and more!) capabilities to |
87 | .Nx . | | 87 | .Nx . |
88 | This | | 88 | This |
89 | document assumes that the reader has at least some familiarity with RAID | | 89 | document assumes that the reader has at least some familiarity with RAID |
90 | and RAID concepts. The reader is also assumed to know how to configure | | 90 | and RAID concepts. |
| | | 91 | The reader is also assumed to know how to configure |
91 | disks and pseudo-devices into kernels, how to generate kernels, and how | | 92 | disks and pseudo-devices into kernels, how to generate kernels, and how |
92 | to partition disks. | | 93 | to partition disks. |
93 | .Pp | | 94 | .Pp |
94 | RAIDframe provides a number of different RAID levels including: | | 95 | RAIDframe provides a number of different RAID levels including: |
95 | .Bl -tag -width indent | | 96 | .Bl -tag -width indent |
96 | .It RAID 0 | | 97 | .It RAID 0 |
97 | provides simple data striping across the components. | | 98 | provides simple data striping across the components. |
98 | .It RAID 1 | | 99 | .It RAID 1 |
99 | provides mirroring. | | 100 | provides mirroring. |
100 | .It RAID 4 | | 101 | .It RAID 4 |
101 | provides data striping across the components, with parity | | 102 | provides data striping across the components, with parity |
102 | stored on a dedicated drive (in this case, the last component). | | 103 | stored on a dedicated drive (in this case, the last component). |
103 | .It RAID 5 | | 104 | .It RAID 5 |
104 | provides data striping across the components, with parity | | 105 | provides data striping across the components, with parity |
105 | distributed across all the components. | | 106 | distributed across all the components. |
106 | .El | | 107 | .El |
107 | .Pp | | 108 | .Pp |
108 | There are a wide variety of other RAID levels supported by RAIDframe. | | 109 | There are a wide variety of other RAID levels supported by RAIDframe. |
109 | The configuration file options to enable them are briefly outlined | | 110 | The configuration file options to enable them are briefly outlined |
110 | at the end of this section. | | 111 | at the end of this section. |
111 | .Pp | | 112 | .Pp |
112 | Depending on the parity level configured, the device driver can | | 113 | Depending on the parity level configured, the device driver can |
113 | support the failure of component drives. The number of failures | | 114 | support the failure of component drives. |
114 | allowed depends on the parity level selected. If the driver is able | | 115 | The number of failures |
| | | 116 | allowed depends on the parity level selected. |
| | | 117 | If the driver is able |
115 | to handle drive failures, and a drive does fail, then the system is | | 118 | to handle drive failures, and a drive does fail, then the system is |
116 | operating in "degraded mode". In this mode, all missing data must be | | 119 | operating in "degraded mode". |
| | | 120 | In this mode, all missing data must be |
117 | reconstructed from the data and parity present on the other | | 121 | reconstructed from the data and parity present on the other |
118 | components. This results in much slower data accesses, but | | 122 | components. |
| | | 123 | This results in much slower data accesses, but |
119 | does mean that a failure need not bring the system to a complete halt. | | 124 | does mean that a failure need not bring the system to a complete halt. |
120 | .Pp | | 125 | .Pp |
121 | The RAID driver supports and enforces the use of | | 126 | The RAID driver supports and enforces the use of |
122 | .Sq component labels . | | 127 | .Sq component labels . |
123 | A | | 128 | A |
124 | .Sq component label | | 129 | .Sq component label |
125 | contains important information about the component, including a | | 130 | contains important information about the component, including a |
126 | user-specified serial number, the row and column of that component in | | 131 | user-specified serial number, the row and column of that component in |
127 | the RAID set, and whether the data (and parity) on the component is | | 132 | the RAID set, and whether the data (and parity) on the component is |
128 | .Sq clean . | | 133 | .Sq clean . |
129 | The component label currently lives at the half-way point of the | | 134 | The component label currently lives at the half-way point of the |
130 | .Sq reserved section | | 135 | .Sq reserved section |
131 | located at the beginning of each component. | | 136 | located at the beginning of each component. |
132 | This | | 137 | This |
133 | .Sq reserved section | | 138 | .Sq reserved section |
134 | is RF_PROTECTED_SECTORS in length (64 blocks or 32Kbytes) and the | | 139 | is RF_PROTECTED_SECTORS in length (64 blocks or 32Kbytes) and the |
135 | component label is currently 1Kbyte in size. | | 140 | component label is currently 1Kbyte in size. |
136 | .Pp | | 141 | .Pp |
137 | If the driver determines that the component labels are very inconsistent with | | 142 | If the driver determines that the component labels are very inconsistent with |
138 | respect to each other (e.g. two or more serial numbers do not match) | | 143 | respect to each other (e.g. two or more serial numbers do not match) |
139 | or that the component label is not consistent with its assigned place | | 144 | or that the component label is not consistent with its assigned place |
140 | in the set (e.g. the component label claims the component should be | | 145 | in the set (e.g. the component label claims the component should be |
141 | the 3rd one in a 6-disk set, but the RAID set has it as the 3rd component | | 146 | the 3rd one in a 6-disk set, but the RAID set has it as the 3rd component |
142 | in a 5-disk set) then the device will fail to configure. If the | | 147 | in a 5-disk set) then the device will fail to configure. |
| | | 148 | If the |
143 | driver determines that exactly one component label seems to be | | 149 | driver determines that exactly one component label seems to be |
144 | incorrect, and the RAID set is being configured as a set that supports | | 150 | incorrect, and the RAID set is being configured as a set that supports |
145 | a single failure, then the RAID set will be allowed to configure, but | | 151 | a single failure, then the RAID set will be allowed to configure, but |
146 | the incorrectly labeled component will be marked as | | 152 | the incorrectly labeled component will be marked as |
147 | .Sq failed , | | 153 | .Sq failed , |
148 | and the RAID set will begin operation in degraded mode. | | 154 | and the RAID set will begin operation in degraded mode. |
149 | If all of the components are consistent among themselves, the RAID set | | 155 | If all of the components are consistent among themselves, the RAID set |
150 | will configure normally. | | 156 | will configure normally. |
151 | .Pp | | 157 | .Pp |
152 | Component labels are also used to support the auto-detection and | | 158 | Component labels are also used to support the auto-detection and |
153 | autoconfiguration of RAID sets. A RAID set can be flagged as | | 159 | autoconfiguration of RAID sets. |
| | | 160 | A RAID set can be flagged as |
154 | autoconfigurable, in which case it will be configured automatically | | 161 | autoconfigurable, in which case it will be configured automatically |
155 | during the kernel boot process. RAID file systems which are | | 162 | during the kernel boot process. |
| | | 163 | RAID file systems which are |
156 | automatically configured are also eligible to be the root file system. | | 164 | automatically configured are also eligible to be the root file system. |
157 | There is currently only limited support (alpha, amd64, i386, pmax, | | 165 | There is currently only limited support (alpha, amd64, i386, pmax, |
158 | sparc, sparc64, and vax architectures) | | 166 | sparc, sparc64, and vax architectures) |
159 | for booting a kernel directly from a RAID 1 set, and no support for | | 167 | for booting a kernel directly from a RAID 1 set, and no support for |
160 | booting from any other RAID sets. To use a RAID set as the root | | 168 | booting from any other RAID sets. |
| | | 169 | To use a RAID set as the root |
161 | file system, a kernel is usually obtained from a small non-RAID | | 170 | file system, a kernel is usually obtained from a small non-RAID |
162 | partition, after which any autoconfiguring RAID set can be used for the | | 171 | partition, after which any autoconfiguring RAID set can be used for the |
163 | root file system. See | | 172 | root file system. |
| | | 173 | See |
164 | .Xr raidctl 8 | | 174 | .Xr raidctl 8 |
165 | for more information on autoconfiguration of RAID sets. | | 175 | for more information on autoconfiguration of RAID sets. |
166 | Note that with autoconfiguration of RAID sets, it is no longer | | 176 | Note that with autoconfiguration of RAID sets, it is no longer |
167 | necessary to hard-code SCSI IDs of drives. | | 177 | necessary to hard-code SCSI IDs of drives. |
168 | The autoconfiguration code will | | 178 | The autoconfiguration code will |
169 | correctly configure a device even after any number of the components | | 179 | correctly configure a device even after any number of the components |
170 | have had their device IDs changed or device names changed. | | 180 | have had their device IDs changed or device names changed. |
171 | .Pp | | 181 | .Pp |
172 | The driver supports | | 182 | The driver supports |
173 | .Sq hot spares , | | 183 | .Sq hot spares , |
174 | disks which are on-line, but are not | | 184 | disks which are on-line, but are not |
175 | actively used in an existing file system. Should a disk fail, the | | 185 | actively used in an existing file system. |
| | | 186 | Should a disk fail, the |
176 | driver is capable of reconstructing the failed disk onto a hot spare | | 187 | driver is capable of reconstructing the failed disk onto a hot spare |
177 | or back onto a replacement drive. | | 188 | or back onto a replacement drive. |
178 | If the components are hot swappable, the failed disk can then be | | 189 | If the components are hot swappable, the failed disk can then be |
179 | removed, a new disk put in its place, and a copyback operation | | 190 | removed, a new disk put in its place, and a copyback operation |
180 | performed. The copyback operation, as its name indicates, will copy | | 191 | performed. |
| | | 192 | The copyback operation, as its name indicates, will copy |
181 | the reconstructed data from the hot spare to the previously failed | | 193 | the reconstructed data from the hot spare to the previously failed |
182 | (and now replaced) disk. Hot spares can also be hot-added using | | 194 | (and now replaced) disk. |
| | | 195 | Hot spares can also be hot-added using |
183 | .Xr raidctl 8 . | | 196 | .Xr raidctl 8 . |
184 | .Pp | | 197 | .Pp |
185 | If a component cannot be detected when the RAID device is configured, | | 198 | If a component cannot be detected when the RAID device is configured, |
186 | that component will be simply marked as 'failed'. | | 199 | that component will be simply marked as 'failed'. |
187 | .Pp | | 200 | .Pp |
188 | The user-land utility for doing all | | 201 | The user-land utility for doing all |
189 | .Nm | | 202 | .Nm |
190 | configuration and other operations | | 203 | configuration and other operations |
191 | is | | 204 | is |
192 | .Xr raidctl 8 . | | 205 | .Xr raidctl 8 . |
193 | Most importantly, | | 206 | Most importantly, |
194 | .Xr raidctl 8 | | 207 | .Xr raidctl 8 |
195 | must be used with the | | 208 | must be used with the |
196 | .Fl i | | 209 | .Fl i |
197 | option to initialize all RAID sets. In particular, this | | 210 | option to initialize all RAID sets. |
198 | initialization includes re-building the parity data. This rebuilding | | 211 | In particular, this |
| | | 212 | initialization includes re-building the parity data. |
| | | 213 | This rebuilding |
199 | of parity data is also required when either a) a new RAID device is | | 214 | of parity data is also required when either a) a new RAID device is |
200 | brought up for the first time or b) after an un-clean shutdown of a | | 215 | brought up for the first time or b) after an un-clean shutdown of a |
201 | RAID device. By using the | | 216 | RAID device. |
| | | 217 | By using the |
202 | .Fl P | | 218 | .Fl P |
203 | option to | | 219 | option to |
204 | .Xr raidctl 8 , | | 220 | .Xr raidctl 8 , |
205 | and performing this on-demand recomputation of all parity | | 221 | and performing this on-demand recomputation of all parity |
206 | before doing a | | 222 | before doing a |
207 | .Xr fsck 8 | | 223 | .Xr fsck 8 |
208 | or a | | 224 | or a |
209 | .Xr newfs 8 , | | 225 | .Xr newfs 8 , |
210 | file system integrity and parity integrity can be ensured. It bears | | 226 | file system integrity and parity integrity can be ensured. |
211 | repeating again that parity recomputation is | | 227 | It bears repeating again that parity recomputation is |
212 | .Ar required | | 228 | .Ar required |
213 | before any file systems are created or used on the RAID device. If the | | 229 | before any file systems are created or used on the RAID device. |
| | | 230 | If the |
214 | parity is not correct, then missing data cannot be correctly recovered. | | 231 | parity is not correct, then missing data cannot be correctly recovered. |
215 | .Pp | | 232 | .Pp |
216 | RAID levels may be combined in a hierarchical fashion. For example, a RAID 0 | | 233 | RAID levels may be combined in a hierarchical fashion. |
| | | 234 | For example, a RAID 0 |
217 | device can be constructed out of a number of RAID 5 devices (which, in turn, | | 235 | device can be constructed out of a number of RAID 5 devices (which, in turn, |
218 | may be constructed out of the physical disks, or of other RAID devices). | | 236 | may be constructed out of the physical disks, or of other RAID devices). |
219 | .Pp | | 237 | .Pp |
220 | The first step to using the | | 238 | The first step to using the |
221 | .Nm | | 239 | .Nm |
222 | driver is to ensure that it is suitably configured in the kernel. This is | | 240 | driver is to ensure that it is suitably configured in the kernel. |
223 | done by adding a line similar to: | | 241 | This is done by adding a line similar to: |
224 | .Bd -unfilled -offset indent | | 242 | .Bd -unfilled -offset indent |
225 | pseudo-device raid 4 # RAIDframe disk device | | 243 | pseudo-device raid 4 # RAIDframe disk device |
226 | .Ed | | 244 | .Ed |
227 | .Pp | | 245 | .Pp |
228 | to the kernel configuration file. The | | 246 | to the kernel configuration file. |
| | | 247 | The |
229 | .Sq count | | 248 | .Sq count |
230 | argument ( | | 249 | argument |
231 | .Sq 4 , | | 250 | .Sq ( 4 , |
232 | in this case), specifies the number of RAIDframe drivers to configure. | | 251 | in this case), specifies the number of RAIDframe drivers to configure. |
233 | To turn on component auto-detection and autoconfiguration of RAID | | 252 | To turn on component auto-detection and autoconfiguration of RAID |
234 | sets, simply add: | | 253 | sets, simply add: |
235 | .Bd -unfilled -offset indent | | 254 | .Bd -unfilled -offset indent |
236 | options RAID_AUTOCONFIG | | 255 | options RAID_AUTOCONFIG |
237 | .Ed | | 256 | .Ed |
238 | .Pp | | 257 | .Pp |
239 | to the kernel configuration file. | | 258 | to the kernel configuration file. |
240 | .Pp | | 259 | .Pp |
241 | All component partitions must be of the type | | 260 | All component partitions must be of the type |
242 | .Dv FS_BSDFFS | | 261 | .Dv FS_BSDFFS |
243 | (e.g. 4.2BSD) or | | 262 | (e.g. 4.2BSD) or |
244 | .Dv FS_RAID . | | 263 | .Dv FS_RAID . |
245 | The use of the latter is strongly encouraged, and is required if | | 264 | The use of the latter is strongly encouraged, and is required if |
246 | autoconfiguration of the RAID set is desired. Since RAIDframe leaves | | 265 | autoconfiguration of the RAID set is desired. |
| | | 266 | Since RAIDframe leaves |
247 | room for disklabels, RAID components can be simply raw disks, or | | 267 | room for disklabels, RAID components can be simply raw disks, or |
248 | partitions which use an entire disk. | | 268 | partitions which use an entire disk. |
249 | .Pp | | 269 | .Pp |
250 | A more detailed treatment of actually using a | | 270 | A more detailed treatment of actually using a |
251 | .Nm | | 271 | .Nm |
252 | device is found in | | 272 | device is found in |
253 | .Xr raidctl 8 . | | 273 | .Xr raidctl 8 . |
254 | It is highly recommended that the steps to reconstruct, copyback, and | | 274 | It is highly recommended that the steps to reconstruct, copyback, and |
255 | re-compute parity are well understood by the system administrator(s) | | 275 | re-compute parity are well understood by the system administrator(s) |
256 | .Ar before | | 276 | .Ar before |
257 | a component failure. Doing the wrong thing when a component fails may | | 277 | a component failure. |
| | | 278 | Doing the wrong thing when a component fails may |
258 | result in data loss. | | 279 | result in data loss. |
259 | .Pp | | 280 | .Pp |
260 | Additional internal consistency checking can be enabled by specifying: | | 281 | Additional internal consistency checking can be enabled by specifying: |
261 | .Bd -unfilled -offset indent | | 282 | .Bd -unfilled -offset indent |
262 | options RAID_DIAGNOSTIC | | 283 | options RAID_DIAGNOSTIC |
263 | .Ed | | 284 | .Ed |
264 | .Pp | | 285 | .Pp |
265 | These assertions are disabled by default in order to improve | | 286 | These assertions are disabled by default in order to improve |
266 | performance. | | 287 | performance. |
267 | .Pp | | 288 | .Pp |
268 | RAIDframe supports an access tracing facility for tracking both | | 289 | RAIDframe supports an access tracing facility for tracking both |
269 | requests made and performance of various parts of the RAID systems | | 290 | requests made and performance of various parts of the RAID systems |
270 | as the request is processed. | | 291 | as the request is processed. |
| @@ -362,68 +383,74 @@ For Parity Declustering: | | | @@ -362,68 +383,74 @@ For Parity Declustering: |
362 | options RF_INCLUDE_PARITY_DECLUSTERING=1 | | 383 | options RF_INCLUDE_PARITY_DECLUSTERING=1 |
363 | .Ed | | 384 | .Ed |
364 | .Pp | | 385 | .Pp |
365 | For Parity Declustering with Distributed Spares: | | 386 | For Parity Declustering with Distributed Spares: |
366 | .Bd -unfilled -offset indent | | 387 | .Bd -unfilled -offset indent |
367 | options RF_INCLUDE_PARITY_DECLUSTERING_DS=1 | | 388 | options RF_INCLUDE_PARITY_DECLUSTERING_DS=1 |
368 | .Ed | | 389 | .Ed |
369 | .Pp | | 390 | .Pp |
370 | The reader is referred to the RAIDframe documentation mentioned in the | | 391 | The reader is referred to the RAIDframe documentation mentioned in the |
371 | .Sx HISTORY | | 392 | .Sx HISTORY |
372 | section for more detail on these various RAID configurations. | | 393 | section for more detail on these various RAID configurations. |
373 | .Sh WARNINGS | | 394 | .Sh WARNINGS |
374 | Certain RAID levels (1, 4, 5, 6, and others) can protect against some | | 395 | Certain RAID levels (1, 4, 5, 6, and others) can protect against some |
375 | data loss due to component failure. However the loss of two | | 396 | data loss due to component failure. |
| | | 397 | However the loss of two |
376 | components of a RAID 4 or 5 system, or the loss of a single component | | 398 | components of a RAID 4 or 5 system, or the loss of a single component |
377 | of a RAID 0 system, will result in the entire file systems on that RAID | | 399 | of a RAID 0 system, will result in the entire file systems on that RAID |
378 | device being lost. | | 400 | device being lost. |
379 | RAID is | | 401 | RAID is |
380 | .Ar NOT | | 402 | .Ar NOT |
381 | a substitute for good backup practices. | | 403 | a substitute for good backup practices. |
382 | .Pp | | 404 | .Pp |
383 | Recomputation of parity | | 405 | Recomputation of parity |
384 | .Ar MUST | | 406 | .Ar MUST |
385 | be performed whenever there is a chance that it may have been | | 407 | be performed whenever there is a chance that it may have been |
386 | compromised. This includes after system crashes, or before a RAID | | 408 | compromised. |
387 | device has been used for the first time. Failure to keep parity | | 409 | This includes after system crashes, or before a RAID |
| | | 410 | device has been used for the first time. |
| | | 411 | Failure to keep parity |
388 | correct will be catastrophic should a component ever fail -- it is | | 412 | correct will be catastrophic should a component ever fail -- it is |
389 | better to use RAID 0 and get the additional space and speed, than it | | 413 | better to use RAID 0 and get the additional space and speed, than it |
390 | is to use parity, but not keep the parity correct. At least with RAID | | 414 | is to use parity, but not keep the parity correct. |
| | | 415 | At least with RAID |
391 | 0 there is no perception of increased data security. | | 416 | 0 there is no perception of increased data security. |
392 | .Sh FILES | | 417 | .Sh FILES |
393 | .Bl -tag -width /dev/XXrXraidX -compact | | 418 | .Bl -tag -width /dev/XXrXraidX -compact |
394 | .It Pa /dev/{,r}raid* | | 419 | .It Pa /dev/{,r}raid* |
395 | .Nm | | 420 | .Nm |
396 | device special files. | | 421 | device special files. |
397 | .El | | 422 | .El |
398 | .Sh SEE ALSO | | 423 | .Sh SEE ALSO |
399 | .Xr config 1 , | | 424 | .Xr config 1 , |
400 | .Xr sd 4 , | | 425 | .Xr sd 4 , |
401 | .Xr MAKEDEV 8 , | | | |
402 | .Xr fsck 8 , | | 426 | .Xr fsck 8 , |
| | | 427 | .Xr MAKEDEV 8 , |
403 | .Xr mount 8 , | | 428 | .Xr mount 8 , |
404 | .Xr newfs 8 , | | 429 | .Xr newfs 8 , |
405 | .Xr raidctl 8 | | 430 | .Xr raidctl 8 |
406 | .Sh HISTORY | | 431 | .Sh HISTORY |
407 | The | | 432 | The |
408 | .Nm | | 433 | .Nm |
409 | driver in | | 434 | driver in |
410 | .Nx | | 435 | .Nx |
411 | is a port of RAIDframe, a framework for rapid prototyping of RAID | | 436 | is a port of RAIDframe, a framework for rapid prototyping of RAID |
412 | structures developed by the folks at the Parallel Data Laboratory at | | 437 | structures developed by the folks at the Parallel Data Laboratory at |
413 | Carnegie Mellon University (CMU). RAIDframe, as originally distributed | | 438 | Carnegie Mellon University (CMU). |
| | | 439 | RAIDframe, as originally distributed |
414 | by CMU, provides a RAID simulator for a number of different | | 440 | by CMU, provides a RAID simulator for a number of different |
415 | architectures, and a user-level device driver and a kernel device | | 441 | architectures, and a user-level device driver and a kernel device |
416 | driver for Digital Unix. The | | 442 | driver for Digital Unix. |
| | | 443 | The |
417 | .Nm | | 444 | .Nm |
418 | driver is a kernelized version of RAIDframe v1.1. | | 445 | driver is a kernelized version of RAIDframe v1.1. |
419 | .Pp | | 446 | .Pp |
420 | A more complete description of the internals and functionality of | | 447 | A more complete description of the internals and functionality of |
421 | RAIDframe is found in the paper "RAIDframe: A Rapid Prototyping Tool | | 448 | RAIDframe is found in the paper "RAIDframe: A Rapid Prototyping Tool |
422 | for RAID Systems", by William V. Courtright II, Garth Gibson, Mark | | 449 | for RAID Systems", by William V. Courtright II, Garth Gibson, Mark |
423 | Holland, LeAnn Neal Reilly, and Jim Zelenka, and published by the | | 450 | Holland, LeAnn Neal Reilly, and Jim Zelenka, and published by the |
424 | Parallel Data Laboratory of Carnegie Mellon University. | | 451 | Parallel Data Laboratory of Carnegie Mellon University. |
425 | The | | 452 | The |
426 | .Nm | | 453 | .Nm |
427 | driver first appeared in | | 454 | driver first appeared in |
428 | .Nx 1.4 . | | 455 | .Nx 1.4 . |
429 | .Sh COPYRIGHT | | 456 | .Sh COPYRIGHT |