diff options
author | Randy Dunlap <randy.dunlap@oracle.com> | 2008-11-13 16:33:24 -0500 |
---|---|---|
committer | Randy Dunlap <randy.dunlap@oracle.com> | 2008-11-14 12:28:53 -0500 |
commit | 31c00fc15ebd35c1647775dbfc167a15d46657fd (patch) | |
tree | 6d8ff2a6607c94a791ccc56fd8eb625e4fdcc01a /Documentation/blockdev | |
parent | 3edac25f2e8ac8c2a84904c140e1aeb434e73e75 (diff) |
Create/use more directory structure in the Documentation/ tree.
Create Documentation/blockdev/ sub-directory and populate it.
Populate the Documentation/serial/ sub-directory.
Move MSI-HOWTO.txt to Documentation/PCI/.
Move ioctl-number.txt to Documentation/ioctl/.
Update all relevant 00-INDEX files.
Update all relevant Kconfig files and source files.
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Diffstat (limited to 'Documentation/blockdev')
-rw-r--r-- | Documentation/blockdev/00-INDEX | 16 | ||||
-rw-r--r-- | Documentation/blockdev/README.DAC960 | 756 | ||||
-rw-r--r-- | Documentation/blockdev/cciss.txt | 171 | ||||
-rw-r--r-- | Documentation/blockdev/cpqarray.txt | 93 | ||||
-rw-r--r-- | Documentation/blockdev/floppy.txt | 245 | ||||
-rw-r--r-- | Documentation/blockdev/nbd.txt | 47 | ||||
-rw-r--r-- | Documentation/blockdev/paride.txt | 417 | ||||
-rw-r--r-- | Documentation/blockdev/ramdisk.txt | 165 |
8 files changed, 1910 insertions, 0 deletions
diff --git a/Documentation/blockdev/00-INDEX b/Documentation/blockdev/00-INDEX new file mode 100644 index 000000000000..86f054c47013 --- /dev/null +++ b/Documentation/blockdev/00-INDEX | |||
@@ -0,0 +1,16 @@ | |||
1 | 00-INDEX | ||
2 | - this file | ||
3 | README.DAC960 | ||
4 | - info on Mylex DAC960/DAC1100 PCI RAID Controller Driver for Linux. | ||
5 | cciss.txt | ||
6 | - info, major/minor #'s for Compaq's SMART Array Controllers. | ||
7 | cpqarray.txt | ||
8 | - info on using Compaq's SMART2 Intelligent Disk Array Controllers. | ||
9 | floppy.txt | ||
10 | - notes and driver options for the floppy disk driver. | ||
11 | nbd.txt | ||
12 | - info on a TCP implementation of a network block device. | ||
13 | paride.txt | ||
14 | - information about the parallel port IDE subsystem. | ||
15 | ramdisk.txt | ||
16 | - short guide on how to set up and use the RAM disk. | ||
diff --git a/Documentation/blockdev/README.DAC960 b/Documentation/blockdev/README.DAC960 new file mode 100644 index 000000000000..0e8f618ab534 --- /dev/null +++ b/Documentation/blockdev/README.DAC960 | |||
@@ -0,0 +1,756 @@ | |||
1 | Linux Driver for Mylex DAC960/AcceleRAID/eXtremeRAID PCI RAID Controllers | ||
2 | |||
3 | Version 2.2.11 for Linux 2.2.19 | ||
4 | Version 2.4.11 for Linux 2.4.12 | ||
5 | |||
6 | PRODUCTION RELEASE | ||
7 | |||
8 | 11 October 2001 | ||
9 | |||
10 | Leonard N. Zubkoff | ||
11 | Dandelion Digital | ||
12 | lnz@dandelion.com | ||
13 | |||
14 | Copyright 1998-2001 by Leonard N. Zubkoff <lnz@dandelion.com> | ||
15 | |||
16 | |||
17 | INTRODUCTION | ||
18 | |||
19 | Mylex, Inc. designs and manufactures a variety of high performance PCI RAID | ||
20 | controllers. Mylex Corporation is located at 34551 Ardenwood Blvd., Fremont, | ||
21 | California 94555, USA and can be reached at 510.796.6100 or on the World Wide | ||
22 | Web at http://www.mylex.com. Mylex Technical Support can be reached by | ||
23 | electronic mail at mylexsup@us.ibm.com, by voice at 510.608.2400, or by FAX at | ||
24 | 510.745.7715. Contact information for offices in Europe and Japan is available | ||
25 | on their Web site. | ||
26 | |||
27 | The latest information on Linux support for DAC960 PCI RAID Controllers, as | ||
28 | well as the most recent release of this driver, will always be available from | ||
29 | my Linux Home Page at URL "http://www.dandelion.com/Linux/". The Linux DAC960 | ||
30 | driver supports all current Mylex PCI RAID controllers including the new | ||
31 | eXtremeRAID 2000/3000 and AcceleRAID 352/170/160 models which have an entirely | ||
32 | new firmware interface from the older eXtremeRAID 1100, AcceleRAID 150/200/250, | ||
33 | and DAC960PJ/PG/PU/PD/PL. See below for a complete controller list as well as | ||
34 | minimum firmware version requirements. For simplicity, in most places this | ||
35 | documentation refers to DAC960 generically rather than explicitly listing all | ||
36 | the supported models. | ||
37 | |||
38 | Driver bug reports should be sent via electronic mail to "lnz@dandelion.com". | ||
39 | Please include with the bug report the complete configuration messages reported | ||
40 | by the driver at startup, along with any subsequent system messages relevant to | ||
41 | the controller's operation, and a detailed description of your system's | ||
42 | hardware configuration. Driver bugs are actually quite rare; if you encounter | ||
43 | problems with disks being marked offline, for example, please contact Mylex | ||
44 | Technical Support as the problem is related to the hardware configuration | ||
45 | rather than the Linux driver. | ||
46 | |||
47 | Please consult the RAID controller documentation for detailed information | ||
48 | regarding installation and configuration of the controllers. This document | ||
49 | primarily provides information specific to the Linux support. | ||
50 | |||
51 | |||
52 | DRIVER FEATURES | ||
53 | |||
54 | The DAC960 RAID controllers are supported solely as high performance RAID | ||
55 | controllers, not as interfaces to arbitrary SCSI devices. The Linux DAC960 | ||
56 | driver operates at the block device level, the same level as the SCSI and IDE | ||
57 | drivers. Unlike other RAID controllers currently supported on Linux, the | ||
58 | DAC960 driver is not dependent on the SCSI subsystem, and hence avoids all the | ||
59 | complexity and unnecessary code that would be associated with an implementation | ||
60 | as a SCSI driver. The DAC960 driver is designed for as high a performance as | ||
61 | possible with no compromises or extra code for compatibility with lower | ||
62 | performance devices. The DAC960 driver includes extensive error logging and | ||
63 | online configuration management capabilities. Except for initial configuration | ||
64 | of the controller and adding new disk drives, most everything can be handled | ||
65 | from Linux while the system is operational. | ||
66 | |||
67 | The DAC960 driver is architected to support up to 8 controllers per system. | ||
68 | Each DAC960 parallel SCSI controller can support up to 15 disk drives per | ||
69 | channel, for a maximum of 60 drives on a four channel controller; the fibre | ||
70 | channel eXtremeRAID 3000 controller supports up to 125 disk drives per loop for | ||
71 | a total of 250 drives. The drives installed on a controller are divided into | ||
72 | one or more "Drive Groups", and then each Drive Group is subdivided further | ||
73 | into 1 to 32 "Logical Drives". Each Logical Drive has a specific RAID Level | ||
74 | and caching policy associated with it, and it appears to Linux as a single | ||
75 | block device. Logical Drives are further subdivided into up to 7 partitions | ||
76 | through the normal Linux and PC disk partitioning schemes. Logical Drives are | ||
77 | also known as "System Drives", and Drive Groups are also called "Packs". Both | ||
78 | terms are in use in the Mylex documentation; I have chosen to standardize on | ||
79 | the more generic "Logical Drive" and "Drive Group". | ||
80 | |||
81 | DAC960 RAID disk devices are named in the style of the obsolete Device File | ||
82 | System (DEVFS). The device corresponding to Logical Drive D on Controller C | ||
83 | is referred to as /dev/rd/cCdD, and the partitions are called /dev/rd/cCdDp1 | ||
84 | through /dev/rd/cCdDp7. For example, partition 3 of Logical Drive 5 on | ||
85 | Controller 2 is referred to as /dev/rd/c2d5p3. Note that unlike with SCSI | ||
86 | disks the device names will not change in the event of a disk drive failure. | ||
87 | The DAC960 driver is assigned major numbers 48 - 55 with one major number per | ||
88 | controller. The 8 bits of minor number are divided into 5 bits for the Logical | ||
89 | Drive and 3 bits for the partition. | ||
90 | |||
91 | |||
92 | SUPPORTED DAC960/AcceleRAID/eXtremeRAID PCI RAID CONTROLLERS | ||
93 | |||
94 | The following list comprises the supported DAC960, AcceleRAID, and eXtremeRAID | ||
95 | PCI RAID Controllers as of the date of this document. It is recommended that | ||
96 | anyone purchasing a Mylex PCI RAID Controller not in the following table | ||
97 | contact the author beforehand to verify that it is or will be supported. | ||
98 | |||
99 | eXtremeRAID 3000 | ||
100 | 1 Wide Ultra-2/LVD SCSI channel | ||
101 | 2 External Fibre FC-AL channels | ||
102 | 233MHz StrongARM SA 110 Processor | ||
103 | 64 Bit 33MHz PCI (backward compatible with 32 Bit PCI slots) | ||
104 | 32MB/64MB ECC SDRAM Memory | ||
105 | |||
106 | eXtremeRAID 2000 | ||
107 | 4 Wide Ultra-160 LVD SCSI channels | ||
108 | 233MHz StrongARM SA 110 Processor | ||
109 | 64 Bit 33MHz PCI (backward compatible with 32 Bit PCI slots) | ||
110 | 32MB/64MB ECC SDRAM Memory | ||
111 | |||
112 | AcceleRAID 352 | ||
113 | 2 Wide Ultra-160 LVD SCSI channels | ||
114 | 100MHz Intel i960RN RISC Processor | ||
115 | 64 Bit 33MHz PCI (backward compatible with 32 Bit PCI slots) | ||
116 | 32MB/64MB ECC SDRAM Memory | ||
117 | |||
118 | AcceleRAID 170 | ||
119 | 1 Wide Ultra-160 LVD SCSI channel | ||
120 | 100MHz Intel i960RM RISC Processor | ||
121 | 16MB/32MB/64MB ECC SDRAM Memory | ||
122 | |||
123 | AcceleRAID 160 (AcceleRAID 170LP) | ||
124 | 1 Wide Ultra-160 LVD SCSI channel | ||
125 | 100MHz Intel i960RS RISC Processor | ||
126 | Built in 16M ECC SDRAM Memory | ||
127 | PCI Low Profile Form Factor - fit for 2U height | ||
128 | |||
129 | eXtremeRAID 1100 (DAC1164P) | ||
130 | 3 Wide Ultra-2/LVD SCSI channels | ||
131 | 233MHz StrongARM SA 110 Processor | ||
132 | 64 Bit 33MHz PCI (backward compatible with 32 Bit PCI slots) | ||
133 | 16MB/32MB/64MB Parity SDRAM Memory with Battery Backup | ||
134 | |||
135 | AcceleRAID 250 (DAC960PTL1) | ||
136 | Uses onboard Symbios SCSI chips on certain motherboards | ||
137 | Also includes one onboard Wide Ultra-2/LVD SCSI Channel | ||
138 | 66MHz Intel i960RD RISC Processor | ||
139 | 4MB/8MB/16MB/32MB/64MB/128MB ECC EDO Memory | ||
140 | |||
141 | AcceleRAID 200 (DAC960PTL0) | ||
142 | Uses onboard Symbios SCSI chips on certain motherboards | ||
143 | Includes no onboard SCSI Channels | ||
144 | 66MHz Intel i960RD RISC Processor | ||
145 | 4MB/8MB/16MB/32MB/64MB/128MB ECC EDO Memory | ||
146 | |||
147 | AcceleRAID 150 (DAC960PRL) | ||
148 | Uses onboard Symbios SCSI chips on certain motherboards | ||
149 | Also includes one onboard Wide Ultra-2/LVD SCSI Channel | ||
150 | 33MHz Intel i960RP RISC Processor | ||
151 | 4MB Parity EDO Memory | ||
152 | |||
153 | DAC960PJ 1/2/3 Wide Ultra SCSI-3 Channels | ||
154 | 66MHz Intel i960RD RISC Processor | ||
155 | 4MB/8MB/16MB/32MB/64MB/128MB ECC EDO Memory | ||
156 | |||
157 | DAC960PG 1/2/3 Wide Ultra SCSI-3 Channels | ||
158 | 33MHz Intel i960RP RISC Processor | ||
159 | 4MB/8MB ECC EDO Memory | ||
160 | |||
161 | DAC960PU 1/2/3 Wide Ultra SCSI-3 Channels | ||
162 | Intel i960CF RISC Processor | ||
163 | 4MB/8MB EDRAM or 2MB/4MB/8MB/16MB/32MB DRAM Memory | ||
164 | |||
165 | DAC960PD 1/2/3 Wide Fast SCSI-2 Channels | ||
166 | Intel i960CF RISC Processor | ||
167 | 4MB/8MB EDRAM or 2MB/4MB/8MB/16MB/32MB DRAM Memory | ||
168 | |||
169 | DAC960PL 1/2/3 Wide Fast SCSI-2 Channels | ||
170 | Intel i960 RISC Processor | ||
171 | 2MB/4MB/8MB/16MB/32MB DRAM Memory | ||
172 | |||
173 | DAC960P 1/2/3 Wide Fast SCSI-2 Channels | ||
174 | Intel i960 RISC Processor | ||
175 | 2MB/4MB/8MB/16MB/32MB DRAM Memory | ||
176 | |||
177 | For the eXtremeRAID 2000/3000 and AcceleRAID 352/170/160, firmware version | ||
178 | 6.00-01 or above is required. | ||
179 | |||
180 | For the eXtremeRAID 1100, firmware version 5.06-0-52 or above is required. | ||
181 | |||
182 | For the AcceleRAID 250, 200, and 150, firmware version 4.06-0-57 or above is | ||
183 | required. | ||
184 | |||
185 | For the DAC960PJ and DAC960PG, firmware version 4.06-0-00 or above is required. | ||
186 | |||
187 | For the DAC960PU, DAC960PD, DAC960PL, and DAC960P, either firmware version | ||
188 | 3.51-0-04 or above is required (for dual Flash ROM controllers), or firmware | ||
189 | version 2.73-0-00 or above is required (for single Flash ROM controllers) | ||
190 | |||
191 | Please note that not all SCSI disk drives are suitable for use with DAC960 | ||
192 | controllers, and only particular firmware versions of any given model may | ||
193 | actually function correctly. Similarly, not all motherboards have a BIOS that | ||
194 | properly initializes the AcceleRAID 250, AcceleRAID 200, AcceleRAID 150, | ||
195 | DAC960PJ, and DAC960PG because the Intel i960RD/RP is a multi-function device. | ||
196 | If in doubt, contact Mylex RAID Technical Support (mylexsup@us.ibm.com) to | ||
197 | verify compatibility. Mylex makes available a hard disk compatibility list at | ||
198 | http://www.mylex.com/support/hdcomp/hd-lists.html. | ||
199 | |||
200 | |||
201 | DRIVER INSTALLATION | ||
202 | |||
203 | This distribution was prepared for Linux kernel version 2.2.19 or 2.4.12. | ||
204 | |||
205 | To install the DAC960 RAID driver, you may use the following commands, | ||
206 | replacing "/usr/src" with wherever you keep your Linux kernel source tree: | ||
207 | |||
208 | cd /usr/src | ||
209 | tar -xvzf DAC960-2.2.11.tar.gz (or DAC960-2.4.11.tar.gz) | ||
210 | mv README.DAC960 linux/Documentation | ||
211 | mv DAC960.[ch] linux/drivers/block | ||
212 | patch -p0 < DAC960.patch (if DAC960.patch is included) | ||
213 | cd linux | ||
214 | make config | ||
215 | make bzImage (or zImage) | ||
216 | |||
217 | Then install "arch/i386/boot/bzImage" or "arch/i386/boot/zImage" as your | ||
218 | standard kernel, run lilo if appropriate, and reboot. | ||
219 | |||
220 | To create the necessary devices in /dev, the "make_rd" script included in | ||
221 | "DAC960-Utilities.tar.gz" from http://www.dandelion.com/Linux/ may be used. | ||
222 | LILO 21 and FDISK v2.9 include DAC960 support; also included in this archive | ||
223 | are patches to LILO 20 and FDISK v2.8 that add DAC960 support, along with | ||
224 | statically linked executables of LILO and FDISK. This modified version of LILO | ||
225 | will allow booting from a DAC960 controller and/or mounting the root file | ||
226 | system from a DAC960. | ||
227 | |||
228 | Red Hat Linux 6.0 and SuSE Linux 6.1 include support for Mylex PCI RAID | ||
229 | controllers. Installing directly onto a DAC960 may be problematic from other | ||
230 | Linux distributions until their installation utilities are updated. | ||
231 | |||
232 | |||
233 | INSTALLATION NOTES | ||
234 | |||
235 | Before installing Linux or adding DAC960 logical drives to an existing Linux | ||
236 | system, the controller must first be configured to provide one or more logical | ||
237 | drives using the BIOS Configuration Utility or DACCF. Please note that since | ||
238 | there are only at most 6 usable partitions on each logical drive, systems | ||
239 | requiring more partitions should subdivide a drive group into multiple logical | ||
240 | drives, each of which can have up to 6 usable partitions. Also, note that with | ||
241 | large disk arrays it is advisable to enable the 8GB BIOS Geometry (255/63) | ||
242 | rather than accepting the default 2GB BIOS Geometry (128/32); failing to so do | ||
243 | will cause the logical drive geometry to have more than 65535 cylinders which | ||
244 | will make it impossible for FDISK to be used properly. The 8GB BIOS Geometry | ||
245 | can be enabled by configuring the DAC960 BIOS, which is accessible via Alt-M | ||
246 | during the BIOS initialization sequence. | ||
247 | |||
248 | For maximum performance and the most efficient E2FSCK performance, it is | ||
249 | recommended that EXT2 file systems be built with a 4KB block size and 16 block | ||
250 | stride to match the DAC960 controller's 64KB default stripe size. The command | ||
251 | "mke2fs -b 4096 -R stride=16 <device>" is appropriate. Unless there will be a | ||
252 | large number of small files on the file systems, it is also beneficial to add | ||
253 | the "-i 16384" option to increase the bytes per inode parameter thereby | ||
254 | reducing the file system metadata. Finally, on systems that will only be run | ||
255 | with Linux 2.2 or later kernels it is beneficial to enable sparse superblocks | ||
256 | with the "-s 1" option. | ||
257 | |||
258 | |||
259 | DAC960 ANNOUNCEMENTS MAILING LIST | ||
260 | |||
261 | The DAC960 Announcements Mailing List provides a forum for informing Linux | ||
262 | users of new driver releases and other announcements regarding Linux support | ||
263 | for DAC960 PCI RAID Controllers. To join the mailing list, send a message to | ||
264 | "dac960-announce-request@dandelion.com" with the line "subscribe" in the | ||
265 | message body. | ||
266 | |||
267 | |||
268 | CONTROLLER CONFIGURATION AND STATUS MONITORING | ||
269 | |||
270 | The DAC960 RAID controllers running firmware 4.06 or above include a Background | ||
271 | Initialization facility so that system downtime is minimized both for initial | ||
272 | installation and subsequent configuration of additional storage. The BIOS | ||
273 | Configuration Utility (accessible via Alt-R during the BIOS initialization | ||
274 | sequence) is used to quickly configure the controller, and then the logical | ||
275 | drives that have been created are available for immediate use even while they | ||
276 | are still being initialized by the controller. The primary need for online | ||
277 | configuration and status monitoring is then to avoid system downtime when disk | ||
278 | drives fail and must be replaced. Mylex's online monitoring and configuration | ||
279 | utilities are being ported to Linux and will become available at some point in | ||
280 | the future. Note that with a SAF-TE (SCSI Accessed Fault-Tolerant Enclosure) | ||
281 | enclosure, the controller is able to rebuild failed drives automatically as | ||
282 | soon as a drive replacement is made available. | ||
283 | |||
284 | The primary interfaces for controller configuration and status monitoring are | ||
285 | special files created in the /proc/rd/... hierarchy along with the normal | ||
286 | system console logging mechanism. Whenever the system is operating, the DAC960 | ||
287 | driver queries each controller for status information every 10 seconds, and | ||
288 | checks for additional conditions every 60 seconds. The initial status of each | ||
289 | controller is always available for controller N in /proc/rd/cN/initial_status, | ||
290 | and the current status as of the last status monitoring query is available in | ||
291 | /proc/rd/cN/current_status. In addition, status changes are also logged by the | ||
292 | driver to the system console and will appear in the log files maintained by | ||
293 | syslog. The progress of asynchronous rebuild or consistency check operations | ||
294 | is also available in /proc/rd/cN/current_status, and progress messages are | ||
295 | logged to the system console at most every 60 seconds. | ||
296 | |||
297 | Starting with the 2.2.3/2.0.3 versions of the driver, the status information | ||
298 | available in /proc/rd/cN/initial_status and /proc/rd/cN/current_status has been | ||
299 | augmented to include the vendor, model, revision, and serial number (if | ||
300 | available) for each physical device found connected to the controller: | ||
301 | |||
302 | ***** DAC960 RAID Driver Version 2.2.3 of 19 August 1999 ***** | ||
303 | Copyright 1998-1999 by Leonard N. Zubkoff <lnz@dandelion.com> | ||
304 | Configuring Mylex DAC960PRL PCI RAID Controller | ||
305 | Firmware Version: 4.07-0-07, Channels: 1, Memory Size: 16MB | ||
306 | PCI Bus: 1, Device: 4, Function: 1, I/O Address: Unassigned | ||
307 | PCI Address: 0xFE300000 mapped at 0xA0800000, IRQ Channel: 21 | ||
308 | Controller Queue Depth: 128, Maximum Blocks per Command: 128 | ||
309 | Driver Queue Depth: 127, Maximum Scatter/Gather Segments: 33 | ||
310 | Stripe Size: 64KB, Segment Size: 8KB, BIOS Geometry: 255/63 | ||
311 | SAF-TE Enclosure Management Enabled | ||
312 | Physical Devices: | ||
313 | 0:0 Vendor: IBM Model: DRVS09D Revision: 0270 | ||
314 | Serial Number: 68016775HA | ||
315 | Disk Status: Online, 17928192 blocks | ||
316 | 0:1 Vendor: IBM Model: DRVS09D Revision: 0270 | ||
317 | Serial Number: 68004E53HA | ||
318 | Disk Status: Online, 17928192 blocks | ||
319 | 0:2 Vendor: IBM Model: DRVS09D Revision: 0270 | ||
320 | Serial Number: 13013935HA | ||
321 | Disk Status: Online, 17928192 blocks | ||
322 | 0:3 Vendor: IBM Model: DRVS09D Revision: 0270 | ||
323 | Serial Number: 13016897HA | ||
324 | Disk Status: Online, 17928192 blocks | ||
325 | 0:4 Vendor: IBM Model: DRVS09D Revision: 0270 | ||
326 | Serial Number: 68019905HA | ||
327 | Disk Status: Online, 17928192 blocks | ||
328 | 0:5 Vendor: IBM Model: DRVS09D Revision: 0270 | ||
329 | Serial Number: 68012753HA | ||
330 | Disk Status: Online, 17928192 blocks | ||
331 | 0:6 Vendor: ESG-SHV Model: SCA HSBP M6 Revision: 0.61 | ||
332 | Logical Drives: | ||
333 | /dev/rd/c0d0: RAID-5, Online, 89640960 blocks, Write Thru | ||
334 | No Rebuild or Consistency Check in Progress | ||
335 | |||
336 | To simplify the monitoring process for custom software, the special file | ||
337 | /proc/rd/status returns "OK" when all DAC960 controllers in the system are | ||
338 | operating normally and no failures have occurred, or "ALERT" if any logical | ||
339 | drives are offline or critical or any non-standby physical drives are dead. | ||
340 | |||
341 | Configuration commands for controller N are available via the special file | ||
342 | /proc/rd/cN/user_command. A human readable command can be written to this | ||
343 | special file to initiate a configuration operation, and the results of the | ||
344 | operation can then be read back from the special file in addition to being | ||
345 | logged to the system console. The shell command sequence | ||
346 | |||
347 | echo "<configuration-command>" > /proc/rd/c0/user_command | ||
348 | cat /proc/rd/c0/user_command | ||
349 | |||
350 | is typically used to execute configuration commands. The configuration | ||
351 | commands are: | ||
352 | |||
353 | flush-cache | ||
354 | |||
355 | The "flush-cache" command flushes the controller's cache. The system | ||
356 | automatically flushes the cache at shutdown or if the driver module is | ||
357 | unloaded, so this command is only needed to be certain a write back cache | ||
358 | is flushed to disk before the system is powered off by a command to a UPS. | ||
359 | Note that the flush-cache command also stops an asynchronous rebuild or | ||
360 | consistency check, so it should not be used except when the system is being | ||
361 | halted. | ||
362 | |||
363 | kill <channel>:<target-id> | ||
364 | |||
365 | The "kill" command marks the physical drive <channel>:<target-id> as DEAD. | ||
366 | This command is provided primarily for testing, and should not be used | ||
367 | during normal system operation. | ||
368 | |||
369 | make-online <channel>:<target-id> | ||
370 | |||
371 | The "make-online" command changes the physical drive <channel>:<target-id> | ||
372 | from status DEAD to status ONLINE. In cases where multiple physical drives | ||
373 | have been killed simultaneously, this command may be used to bring all but | ||
374 | one of them back online, after which a rebuild to the final drive is | ||
375 | necessary. | ||
376 | |||
377 | Warning: make-online should only be used on a dead physical drive that is | ||
378 | an active part of a drive group, never on a standby drive. The command | ||
379 | should never be used on a dead drive that is part of a critical logical | ||
380 | drive; rebuild should be used if only a single drive is dead. | ||
381 | |||
382 | make-standby <channel>:<target-id> | ||
383 | |||
384 | The "make-standby" command changes physical drive <channel>:<target-id> | ||
385 | from status DEAD to status STANDBY. It should only be used in cases where | ||
386 | a dead drive was replaced after an automatic rebuild was performed onto a | ||
387 | standby drive. It cannot be used to add a standby drive to the controller | ||
388 | configuration if one was not created initially; the BIOS Configuration | ||
389 | Utility must be used for that currently. | ||
390 | |||
391 | rebuild <channel>:<target-id> | ||
392 | |||
393 | The "rebuild" command initiates an asynchronous rebuild onto physical drive | ||
394 | <channel>:<target-id>. It should only be used when a dead drive has been | ||
395 | replaced. | ||
396 | |||
397 | check-consistency <logical-drive-number> | ||
398 | |||
399 | The "check-consistency" command initiates an asynchronous consistency check | ||
400 | of <logical-drive-number> with automatic restoration. It can be used | ||
401 | whenever it is desired to verify the consistency of the redundancy | ||
402 | information. | ||
403 | |||
404 | cancel-rebuild | ||
405 | cancel-consistency-check | ||
406 | |||
407 | The "cancel-rebuild" and "cancel-consistency-check" commands cancel any | ||
408 | rebuild or consistency check operations previously initiated. | ||
409 | |||
410 | |||
411 | EXAMPLE I - DRIVE FAILURE WITHOUT A STANDBY DRIVE | ||
412 | |||
413 | The following annotated logs demonstrate the controller configuration and and | ||
414 | online status monitoring capabilities of the Linux DAC960 Driver. The test | ||
415 | configuration comprises 6 1GB Quantum Atlas I disk drives on two channels of a | ||
416 | DAC960PJ controller. The physical drives are configured into a single drive | ||
417 | group without a standby drive, and the drive group has been configured into two | ||
418 | logical drives, one RAID-5 and one RAID-6. Note that these logs are from an | ||
419 | earlier version of the driver and the messages have changed somewhat with newer | ||
420 | releases, but the functionality remains similar. First, here is the current | ||
421 | status of the RAID configuration: | ||
422 | |||
423 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
424 | ***** DAC960 RAID Driver Version 2.0.0 of 23 March 1999 ***** | ||
425 | Copyright 1998-1999 by Leonard N. Zubkoff <lnz@dandelion.com> | ||
426 | Configuring Mylex DAC960PJ PCI RAID Controller | ||
427 | Firmware Version: 4.06-0-08, Channels: 3, Memory Size: 8MB | ||
428 | PCI Bus: 0, Device: 19, Function: 1, I/O Address: Unassigned | ||
429 | PCI Address: 0xFD4FC000 mapped at 0x8807000, IRQ Channel: 9 | ||
430 | Controller Queue Depth: 128, Maximum Blocks per Command: 128 | ||
431 | Driver Queue Depth: 127, Maximum Scatter/Gather Segments: 33 | ||
432 | Stripe Size: 64KB, Segment Size: 8KB, BIOS Geometry: 255/63 | ||
433 | Physical Devices: | ||
434 | 0:1 - Disk: Online, 2201600 blocks | ||
435 | 0:2 - Disk: Online, 2201600 blocks | ||
436 | 0:3 - Disk: Online, 2201600 blocks | ||
437 | 1:1 - Disk: Online, 2201600 blocks | ||
438 | 1:2 - Disk: Online, 2201600 blocks | ||
439 | 1:3 - Disk: Online, 2201600 blocks | ||
440 | Logical Drives: | ||
441 | /dev/rd/c0d0: RAID-5, Online, 5498880 blocks, Write Thru | ||
442 | /dev/rd/c0d1: RAID-6, Online, 3305472 blocks, Write Thru | ||
443 | No Rebuild or Consistency Check in Progress | ||
444 | |||
445 | gwynedd:/u/lnz# cat /proc/rd/status | ||
446 | OK | ||
447 | |||
448 | The above messages indicate that everything is healthy, and /proc/rd/status | ||
449 | returns "OK" indicating that there are no problems with any DAC960 controller | ||
450 | in the system. For demonstration purposes, while I/O is active Physical Drive | ||
451 | 1:1 is now disconnected, simulating a drive failure. The failure is noted by | ||
452 | the driver within 10 seconds of the controller's having detected it, and the | ||
453 | driver logs the following console status messages indicating that Logical | ||
454 | Drives 0 and 1 are now CRITICAL as a result of Physical Drive 1:1 being DEAD: | ||
455 | |||
456 | DAC960#0: Physical Drive 1:2 Error Log: Sense Key = 6, ASC = 29, ASCQ = 02 | ||
457 | DAC960#0: Physical Drive 1:3 Error Log: Sense Key = 6, ASC = 29, ASCQ = 02 | ||
458 | DAC960#0: Physical Drive 1:1 killed because of timeout on SCSI command | ||
459 | DAC960#0: Physical Drive 1:1 is now DEAD | ||
460 | DAC960#0: Logical Drive 0 (/dev/rd/c0d0) is now CRITICAL | ||
461 | DAC960#0: Logical Drive 1 (/dev/rd/c0d1) is now CRITICAL | ||
462 | |||
463 | The Sense Keys logged here are just Check Condition / Unit Attention conditions | ||
464 | arising from a SCSI bus reset that is forced by the controller during its error | ||
465 | recovery procedures. Concurrently with the above, the driver status available | ||
466 | from /proc/rd also reflects the drive failure. The status message in | ||
467 | /proc/rd/status has changed from "OK" to "ALERT": | ||
468 | |||
469 | gwynedd:/u/lnz# cat /proc/rd/status | ||
470 | ALERT | ||
471 | |||
472 | and /proc/rd/c0/current_status has been updated: | ||
473 | |||
474 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
475 | ... | ||
476 | Physical Devices: | ||
477 | 0:1 - Disk: Online, 2201600 blocks | ||
478 | 0:2 - Disk: Online, 2201600 blocks | ||
479 | 0:3 - Disk: Online, 2201600 blocks | ||
480 | 1:1 - Disk: Dead, 2201600 blocks | ||
481 | 1:2 - Disk: Online, 2201600 blocks | ||
482 | 1:3 - Disk: Online, 2201600 blocks | ||
483 | Logical Drives: | ||
484 | /dev/rd/c0d0: RAID-5, Critical, 5498880 blocks, Write Thru | ||
485 | /dev/rd/c0d1: RAID-6, Critical, 3305472 blocks, Write Thru | ||
486 | No Rebuild or Consistency Check in Progress | ||
487 | |||
488 | Since there are no standby drives configured, the system can continue to access | ||
489 | the logical drives in a performance degraded mode until the failed drive is | ||
490 | replaced and a rebuild operation completed to restore the redundancy of the | ||
491 | logical drives. Once Physical Drive 1:1 is replaced with a properly | ||
492 | functioning drive, or if the physical drive was killed without having failed | ||
493 | (e.g., due to electrical problems on the SCSI bus), the user can instruct the | ||
494 | controller to initiate a rebuild operation onto the newly replaced drive: | ||
495 | |||
496 | gwynedd:/u/lnz# echo "rebuild 1:1" > /proc/rd/c0/user_command | ||
497 | gwynedd:/u/lnz# cat /proc/rd/c0/user_command | ||
498 | Rebuild of Physical Drive 1:1 Initiated | ||
499 | |||
500 | The echo command instructs the controller to initiate an asynchronous rebuild | ||
501 | operation onto Physical Drive 1:1, and the status message that results from the | ||
502 | operation is then available for reading from /proc/rd/c0/user_command, as well | ||
503 | as being logged to the console by the driver. | ||
504 | |||
505 | Within 10 seconds of this command the driver logs the initiation of the | ||
506 | asynchronous rebuild operation: | ||
507 | |||
508 | DAC960#0: Rebuild of Physical Drive 1:1 Initiated | ||
509 | DAC960#0: Physical Drive 1:1 Error Log: Sense Key = 6, ASC = 29, ASCQ = 01 | ||
510 | DAC960#0: Physical Drive 1:1 is now WRITE-ONLY | ||
511 | DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 1% completed | ||
512 | |||
513 | and /proc/rd/c0/current_status is updated: | ||
514 | |||
515 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
516 | ... | ||
517 | Physical Devices: | ||
518 | 0:1 - Disk: Online, 2201600 blocks | ||
519 | 0:2 - Disk: Online, 2201600 blocks | ||
520 | 0:3 - Disk: Online, 2201600 blocks | ||
521 | 1:1 - Disk: Write-Only, 2201600 blocks | ||
522 | 1:2 - Disk: Online, 2201600 blocks | ||
523 | 1:3 - Disk: Online, 2201600 blocks | ||
524 | Logical Drives: | ||
525 | /dev/rd/c0d0: RAID-5, Critical, 5498880 blocks, Write Thru | ||
526 | /dev/rd/c0d1: RAID-6, Critical, 3305472 blocks, Write Thru | ||
527 | Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 6% completed | ||
528 | |||
529 | As the rebuild progresses, the current status in /proc/rd/c0/current_status is | ||
530 | updated every 10 seconds: | ||
531 | |||
532 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
533 | ... | ||
534 | Physical Devices: | ||
535 | 0:1 - Disk: Online, 2201600 blocks | ||
536 | 0:2 - Disk: Online, 2201600 blocks | ||
537 | 0:3 - Disk: Online, 2201600 blocks | ||
538 | 1:1 - Disk: Write-Only, 2201600 blocks | ||
539 | 1:2 - Disk: Online, 2201600 blocks | ||
540 | 1:3 - Disk: Online, 2201600 blocks | ||
541 | Logical Drives: | ||
542 | /dev/rd/c0d0: RAID-5, Critical, 5498880 blocks, Write Thru | ||
543 | /dev/rd/c0d1: RAID-6, Critical, 3305472 blocks, Write Thru | ||
544 | Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 15% completed | ||
545 | |||
546 | and every minute a progress message is logged to the console by the driver: | ||
547 | |||
548 | DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 32% completed | ||
549 | DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 63% completed | ||
550 | DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 94% completed | ||
551 | DAC960#0: Rebuild in Progress: Logical Drive 1 (/dev/rd/c0d1) 94% completed | ||
552 | |||
553 | Finally, the rebuild completes successfully. The driver logs the status of the | ||
554 | logical and physical drives and the rebuild completion: | ||
555 | |||
556 | DAC960#0: Rebuild Completed Successfully | ||
557 | DAC960#0: Physical Drive 1:1 is now ONLINE | ||
558 | DAC960#0: Logical Drive 0 (/dev/rd/c0d0) is now ONLINE | ||
559 | DAC960#0: Logical Drive 1 (/dev/rd/c0d1) is now ONLINE | ||
560 | |||
561 | /proc/rd/c0/current_status is updated: | ||
562 | |||
563 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
564 | ... | ||
565 | Physical Devices: | ||
566 | 0:1 - Disk: Online, 2201600 blocks | ||
567 | 0:2 - Disk: Online, 2201600 blocks | ||
568 | 0:3 - Disk: Online, 2201600 blocks | ||
569 | 1:1 - Disk: Online, 2201600 blocks | ||
570 | 1:2 - Disk: Online, 2201600 blocks | ||
571 | 1:3 - Disk: Online, 2201600 blocks | ||
572 | Logical Drives: | ||
573 | /dev/rd/c0d0: RAID-5, Online, 5498880 blocks, Write Thru | ||
574 | /dev/rd/c0d1: RAID-6, Online, 3305472 blocks, Write Thru | ||
575 | Rebuild Completed Successfully | ||
576 | |||
577 | and /proc/rd/status indicates that everything is healthy once again: | ||
578 | |||
579 | gwynedd:/u/lnz# cat /proc/rd/status | ||
580 | OK | ||
581 | |||
582 | |||
583 | EXAMPLE II - DRIVE FAILURE WITH A STANDBY DRIVE | ||
584 | |||
585 | The following annotated logs demonstrate the controller configuration and and | ||
586 | online status monitoring capabilities of the Linux DAC960 Driver. The test | ||
587 | configuration comprises 6 1GB Quantum Atlas I disk drives on two channels of a | ||
588 | DAC960PJ controller. The physical drives are configured into a single drive | ||
589 | group with a standby drive, and the drive group has been configured into two | ||
590 | logical drives, one RAID-5 and one RAID-6. Note that these logs are from an | ||
591 | earlier version of the driver and the messages have changed somewhat with newer | ||
592 | releases, but the functionality remains similar. First, here is the current | ||
593 | status of the RAID configuration: | ||
594 | |||
595 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
596 | ***** DAC960 RAID Driver Version 2.0.0 of 23 March 1999 ***** | ||
597 | Copyright 1998-1999 by Leonard N. Zubkoff <lnz@dandelion.com> | ||
598 | Configuring Mylex DAC960PJ PCI RAID Controller | ||
599 | Firmware Version: 4.06-0-08, Channels: 3, Memory Size: 8MB | ||
600 | PCI Bus: 0, Device: 19, Function: 1, I/O Address: Unassigned | ||
601 | PCI Address: 0xFD4FC000 mapped at 0x8807000, IRQ Channel: 9 | ||
602 | Controller Queue Depth: 128, Maximum Blocks per Command: 128 | ||
603 | Driver Queue Depth: 127, Maximum Scatter/Gather Segments: 33 | ||
604 | Stripe Size: 64KB, Segment Size: 8KB, BIOS Geometry: 255/63 | ||
605 | Physical Devices: | ||
606 | 0:1 - Disk: Online, 2201600 blocks | ||
607 | 0:2 - Disk: Online, 2201600 blocks | ||
608 | 0:3 - Disk: Online, 2201600 blocks | ||
609 | 1:1 - Disk: Online, 2201600 blocks | ||
610 | 1:2 - Disk: Online, 2201600 blocks | ||
611 | 1:3 - Disk: Standby, 2201600 blocks | ||
612 | Logical Drives: | ||
613 | /dev/rd/c0d0: RAID-5, Online, 4399104 blocks, Write Thru | ||
614 | /dev/rd/c0d1: RAID-6, Online, 2754560 blocks, Write Thru | ||
615 | No Rebuild or Consistency Check in Progress | ||
616 | |||
617 | gwynedd:/u/lnz# cat /proc/rd/status | ||
618 | OK | ||
619 | |||
620 | The above messages indicate that everything is healthy, and /proc/rd/status | ||
621 | returns "OK" indicating that there are no problems with any DAC960 controller | ||
622 | in the system. For demonstration purposes, while I/O is active Physical Drive | ||
623 | 1:2 is now disconnected, simulating a drive failure. The failure is noted by | ||
624 | the driver within 10 seconds of the controller's having detected it, and the | ||
625 | driver logs the following console status messages: | ||
626 | |||
627 | DAC960#0: Physical Drive 1:1 Error Log: Sense Key = 6, ASC = 29, ASCQ = 02 | ||
628 | DAC960#0: Physical Drive 1:3 Error Log: Sense Key = 6, ASC = 29, ASCQ = 02 | ||
629 | DAC960#0: Physical Drive 1:2 killed because of timeout on SCSI command | ||
630 | DAC960#0: Physical Drive 1:2 is now DEAD | ||
631 | DAC960#0: Physical Drive 1:2 killed because it was removed | ||
632 | DAC960#0: Logical Drive 0 (/dev/rd/c0d0) is now CRITICAL | ||
633 | DAC960#0: Logical Drive 1 (/dev/rd/c0d1) is now CRITICAL | ||
634 | |||
635 | Since a standby drive is configured, the controller automatically begins | ||
636 | rebuilding onto the standby drive: | ||
637 | |||
638 | DAC960#0: Physical Drive 1:3 is now WRITE-ONLY | ||
639 | DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 4% completed | ||
640 | |||
641 | Concurrently with the above, the driver status available from /proc/rd also | ||
642 | reflects the drive failure and automatic rebuild. The status message in | ||
643 | /proc/rd/status has changed from "OK" to "ALERT": | ||
644 | |||
645 | gwynedd:/u/lnz# cat /proc/rd/status | ||
646 | ALERT | ||
647 | |||
648 | and /proc/rd/c0/current_status has been updated: | ||
649 | |||
650 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
651 | ... | ||
652 | Physical Devices: | ||
653 | 0:1 - Disk: Online, 2201600 blocks | ||
654 | 0:2 - Disk: Online, 2201600 blocks | ||
655 | 0:3 - Disk: Online, 2201600 blocks | ||
656 | 1:1 - Disk: Online, 2201600 blocks | ||
657 | 1:2 - Disk: Dead, 2201600 blocks | ||
658 | 1:3 - Disk: Write-Only, 2201600 blocks | ||
659 | Logical Drives: | ||
660 | /dev/rd/c0d0: RAID-5, Critical, 4399104 blocks, Write Thru | ||
661 | /dev/rd/c0d1: RAID-6, Critical, 2754560 blocks, Write Thru | ||
662 | Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 4% completed | ||
663 | |||
664 | As the rebuild progresses, the current status in /proc/rd/c0/current_status is | ||
665 | updated every 10 seconds: | ||
666 | |||
667 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
668 | ... | ||
669 | Physical Devices: | ||
670 | 0:1 - Disk: Online, 2201600 blocks | ||
671 | 0:2 - Disk: Online, 2201600 blocks | ||
672 | 0:3 - Disk: Online, 2201600 blocks | ||
673 | 1:1 - Disk: Online, 2201600 blocks | ||
674 | 1:2 - Disk: Dead, 2201600 blocks | ||
675 | 1:3 - Disk: Write-Only, 2201600 blocks | ||
676 | Logical Drives: | ||
677 | /dev/rd/c0d0: RAID-5, Critical, 4399104 blocks, Write Thru | ||
678 | /dev/rd/c0d1: RAID-6, Critical, 2754560 blocks, Write Thru | ||
679 | Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 40% completed | ||
680 | |||
681 | and every minute a progress message is logged on the console by the driver: | ||
682 | |||
683 | DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 40% completed | ||
684 | DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 76% completed | ||
685 | DAC960#0: Rebuild in Progress: Logical Drive 1 (/dev/rd/c0d1) 66% completed | ||
686 | DAC960#0: Rebuild in Progress: Logical Drive 1 (/dev/rd/c0d1) 84% completed | ||
687 | |||
688 | Finally, the rebuild completes successfully. The driver logs the status of the | ||
689 | logical and physical drives and the rebuild completion: | ||
690 | |||
691 | DAC960#0: Rebuild Completed Successfully | ||
692 | DAC960#0: Physical Drive 1:3 is now ONLINE | ||
693 | DAC960#0: Logical Drive 0 (/dev/rd/c0d0) is now ONLINE | ||
694 | DAC960#0: Logical Drive 1 (/dev/rd/c0d1) is now ONLINE | ||
695 | |||
696 | /proc/rd/c0/current_status is updated: | ||
697 | |||
698 | ***** DAC960 RAID Driver Version 2.0.0 of 23 March 1999 ***** | ||
699 | Copyright 1998-1999 by Leonard N. Zubkoff <lnz@dandelion.com> | ||
700 | Configuring Mylex DAC960PJ PCI RAID Controller | ||
701 | Firmware Version: 4.06-0-08, Channels: 3, Memory Size: 8MB | ||
702 | PCI Bus: 0, Device: 19, Function: 1, I/O Address: Unassigned | ||
703 | PCI Address: 0xFD4FC000 mapped at 0x8807000, IRQ Channel: 9 | ||
704 | Controller Queue Depth: 128, Maximum Blocks per Command: 128 | ||
705 | Driver Queue Depth: 127, Maximum Scatter/Gather Segments: 33 | ||
706 | Stripe Size: 64KB, Segment Size: 8KB, BIOS Geometry: 255/63 | ||
707 | Physical Devices: | ||
708 | 0:1 - Disk: Online, 2201600 blocks | ||
709 | 0:2 - Disk: Online, 2201600 blocks | ||
710 | 0:3 - Disk: Online, 2201600 blocks | ||
711 | 1:1 - Disk: Online, 2201600 blocks | ||
712 | 1:2 - Disk: Dead, 2201600 blocks | ||
713 | 1:3 - Disk: Online, 2201600 blocks | ||
714 | Logical Drives: | ||
715 | /dev/rd/c0d0: RAID-5, Online, 4399104 blocks, Write Thru | ||
716 | /dev/rd/c0d1: RAID-6, Online, 2754560 blocks, Write Thru | ||
717 | Rebuild Completed Successfully | ||
718 | |||
719 | and /proc/rd/status indicates that everything is healthy once again: | ||
720 | |||
721 | gwynedd:/u/lnz# cat /proc/rd/status | ||
722 | OK | ||
723 | |||
724 | Note that the absence of a viable standby drive does not create an "ALERT" | ||
725 | status. Once dead Physical Drive 1:2 has been replaced, the controller must be | ||
726 | told that this has occurred and that the newly replaced drive should become the | ||
727 | new standby drive: | ||
728 | |||
729 | gwynedd:/u/lnz# echo "make-standby 1:2" > /proc/rd/c0/user_command | ||
730 | gwynedd:/u/lnz# cat /proc/rd/c0/user_command | ||
731 | Make Standby of Physical Drive 1:2 Succeeded | ||
732 | |||
733 | The echo command instructs the controller to make Physical Drive 1:2 into a | ||
734 | standby drive, and the status message that results from the operation is then | ||
735 | available for reading from /proc/rd/c0/user_command, as well as being logged to | ||
736 | the console by the driver. Within 60 seconds of this command the driver logs: | ||
737 | |||
738 | DAC960#0: Physical Drive 1:2 Error Log: Sense Key = 6, ASC = 29, ASCQ = 01 | ||
739 | DAC960#0: Physical Drive 1:2 is now STANDBY | ||
740 | DAC960#0: Make Standby of Physical Drive 1:2 Succeeded | ||
741 | |||
742 | and /proc/rd/c0/current_status is updated: | ||
743 | |||
744 | gwynedd:/u/lnz# cat /proc/rd/c0/current_status | ||
745 | ... | ||
746 | Physical Devices: | ||
747 | 0:1 - Disk: Online, 2201600 blocks | ||
748 | 0:2 - Disk: Online, 2201600 blocks | ||
749 | 0:3 - Disk: Online, 2201600 blocks | ||
750 | 1:1 - Disk: Online, 2201600 blocks | ||
751 | 1:2 - Disk: Standby, 2201600 blocks | ||
752 | 1:3 - Disk: Online, 2201600 blocks | ||
753 | Logical Drives: | ||
754 | /dev/rd/c0d0: RAID-5, Online, 4399104 blocks, Write Thru | ||
755 | /dev/rd/c0d1: RAID-6, Online, 2754560 blocks, Write Thru | ||
756 | Rebuild Completed Successfully | ||
diff --git a/Documentation/blockdev/cciss.txt b/Documentation/blockdev/cciss.txt new file mode 100644 index 000000000000..89698e8df7d4 --- /dev/null +++ b/Documentation/blockdev/cciss.txt | |||
@@ -0,0 +1,171 @@ | |||
1 | This driver is for Compaq's SMART Array Controllers. | ||
2 | |||
3 | Supported Cards: | ||
4 | ---------------- | ||
5 | |||
6 | This driver is known to work with the following cards: | ||
7 | |||
8 | * SA 5300 | ||
9 | * SA 5i | ||
10 | * SA 532 | ||
11 | * SA 5312 | ||
12 | * SA 641 | ||
13 | * SA 642 | ||
14 | * SA 6400 | ||
15 | * SA 6400 U320 Expansion Module | ||
16 | * SA 6i | ||
17 | * SA P600 | ||
18 | * SA P800 | ||
19 | * SA E400 | ||
20 | * SA P400i | ||
21 | * SA E200 | ||
22 | * SA E200i | ||
23 | * SA E500 | ||
24 | * SA P700m | ||
25 | * SA P212 | ||
26 | * SA P410 | ||
27 | * SA P410i | ||
28 | * SA P411 | ||
29 | * SA P812 | ||
30 | * SA P712m | ||
31 | * SA P711m | ||
32 | |||
33 | Detecting drive failures: | ||
34 | ------------------------- | ||
35 | |||
36 | To get the status of logical volumes and to detect physical drive | ||
37 | failures, you can use the cciss_vol_status program found here: | ||
38 | http://cciss.sourceforge.net/#cciss_utils | ||
39 | |||
40 | Device Naming: | ||
41 | -------------- | ||
42 | |||
43 | If nodes are not already created in the /dev/cciss directory, run as root: | ||
44 | |||
45 | # cd /dev | ||
46 | # ./MAKEDEV cciss | ||
47 | |||
48 | You need some entries in /dev for the cciss device. The MAKEDEV script | ||
49 | can make device nodes for you automatically. Currently the device setup | ||
50 | is as follows: | ||
51 | |||
52 | Major numbers: | ||
53 | 104 cciss0 | ||
54 | 105 cciss1 | ||
55 | 106 cciss2 | ||
56 | 105 cciss3 | ||
57 | 108 cciss4 | ||
58 | 109 cciss5 | ||
59 | 110 cciss6 | ||
60 | 111 cciss7 | ||
61 | |||
62 | Minor numbers: | ||
63 | b7 b6 b5 b4 b3 b2 b1 b0 | ||
64 | |----+----| |----+----| | ||
65 | | | | ||
66 | | +-------- Partition ID (0=wholedev, 1-15 partition) | ||
67 | | | ||
68 | +-------------------- Logical Volume number | ||
69 | |||
70 | The device naming scheme is: | ||
71 | /dev/cciss/c0d0 Controller 0, disk 0, whole device | ||
72 | /dev/cciss/c0d0p1 Controller 0, disk 0, partition 1 | ||
73 | /dev/cciss/c0d0p2 Controller 0, disk 0, partition 2 | ||
74 | /dev/cciss/c0d0p3 Controller 0, disk 0, partition 3 | ||
75 | |||
76 | /dev/cciss/c1d1 Controller 1, disk 1, whole device | ||
77 | /dev/cciss/c1d1p1 Controller 1, disk 1, partition 1 | ||
78 | /dev/cciss/c1d1p2 Controller 1, disk 1, partition 2 | ||
79 | /dev/cciss/c1d1p3 Controller 1, disk 1, partition 3 | ||
80 | |||
81 | SCSI tape drive and medium changer support | ||
82 | ------------------------------------------ | ||
83 | |||
84 | SCSI sequential access devices and medium changer devices are supported and | ||
85 | appropriate device nodes are automatically created. (e.g. | ||
86 | /dev/st0, /dev/st1, etc. See the "st" man page for more details.) | ||
87 | You must enable "SCSI tape drive support for Smart Array 5xxx" and | ||
88 | "SCSI support" in your kernel configuration to be able to use SCSI | ||
89 | tape drives with your Smart Array 5xxx controller. | ||
90 | |||
91 | Additionally, note that the driver will not engage the SCSI core at init | ||
92 | time. The driver must be directed to dynamically engage the SCSI core via | ||
93 | the /proc filesystem entry which the "block" side of the driver creates as | ||
94 | /proc/driver/cciss/cciss* at runtime. This is because at driver init time, | ||
95 | the SCSI core may not yet be initialized (because the driver is a block | ||
96 | driver) and attempting to register it with the SCSI core in such a case | ||
97 | would cause a hang. This is best done via an initialization script | ||
98 | (typically in /etc/init.d, but could vary depending on distribution). | ||
99 | For example: | ||
100 | |||
101 | for x in /proc/driver/cciss/cciss[0-9]* | ||
102 | do | ||
103 | echo "engage scsi" > $x | ||
104 | done | ||
105 | |||
106 | Once the SCSI core is engaged by the driver, it cannot be disengaged | ||
107 | (except by unloading the driver, if it happens to be linked as a module.) | ||
108 | |||
109 | Note also that if no sequential access devices or medium changers are | ||
110 | detected, the SCSI core will not be engaged by the action of the above | ||
111 | script. | ||
112 | |||
113 | Hot plug support for SCSI tape drives | ||
114 | ------------------------------------- | ||
115 | |||
116 | Hot plugging of SCSI tape drives is supported, with some caveats. | ||
117 | The cciss driver must be informed that changes to the SCSI bus | ||
118 | have been made. This may be done via the /proc filesystem. | ||
119 | For example: | ||
120 | |||
121 | echo "rescan" > /proc/scsi/cciss0/1 | ||
122 | |||
123 | This causes the driver to query the adapter about changes to the | ||
124 | physical SCSI buses and/or fibre channel arbitrated loop and the | ||
125 | driver to make note of any new or removed sequential access devices | ||
126 | or medium changers. The driver will output messages indicating what | ||
127 | devices have been added or removed and the controller, bus, target and | ||
128 | lun used to address the device. It then notifies the SCSI mid layer | ||
129 | of these changes. | ||
130 | |||
131 | Note that the naming convention of the /proc filesystem entries | ||
132 | contains a number in addition to the driver name. (E.g. "cciss0" | ||
133 | instead of just "cciss" which you might expect.) | ||
134 | |||
135 | Note: ONLY sequential access devices and medium changers are presented | ||
136 | as SCSI devices to the SCSI mid layer by the cciss driver. Specifically, | ||
137 | physical SCSI disk drives are NOT presented to the SCSI mid layer. The | ||
138 | physical SCSI disk drives are controlled directly by the array controller | ||
139 | hardware and it is important to prevent the kernel from attempting to directly | ||
140 | access these devices too, as if the array controller were merely a SCSI | ||
141 | controller in the same way that we are allowing it to access SCSI tape drives. | ||
142 | |||
143 | SCSI error handling for tape drives and medium changers | ||
144 | ------------------------------------------------------- | ||
145 | |||
146 | The linux SCSI mid layer provides an error handling protocol which | ||
147 | kicks into gear whenever a SCSI command fails to complete within a | ||
148 | certain amount of time (which can vary depending on the command). | ||
149 | The cciss driver participates in this protocol to some extent. The | ||
150 | normal protocol is a four step process. First the device is told | ||
151 | to abort the command. If that doesn't work, the device is reset. | ||
152 | If that doesn't work, the SCSI bus is reset. If that doesn't work | ||
153 | the host bus adapter is reset. Because the cciss driver is a block | ||
154 | driver as well as a SCSI driver and only the tape drives and medium | ||
155 | changers are presented to the SCSI mid layer, and unlike more | ||
156 | straightforward SCSI drivers, disk i/o continues through the block | ||
157 | side during the SCSI error recovery process, the cciss driver only | ||
158 | implements the first two of these actions, aborting the command, and | ||
159 | resetting the device. Additionally, most tape drives will not oblige | ||
160 | in aborting commands, and sometimes it appears they will not even | ||
161 | obey a reset command, though in most circumstances they will. In | ||
162 | the case that the command cannot be aborted and the device cannot be | ||
163 | reset, the device will be set offline. | ||
164 | |||
165 | In the event the error handling code is triggered and a tape drive is | ||
166 | successfully reset or the tardy command is successfully aborted, the | ||
167 | tape drive may still not allow i/o to continue until some command | ||
168 | is issued which positions the tape to a known position. Typically you | ||
169 | must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example) | ||
170 | before i/o can proceed again to a tape drive which was reset. | ||
171 | |||
diff --git a/Documentation/blockdev/cpqarray.txt b/Documentation/blockdev/cpqarray.txt new file mode 100644 index 000000000000..c7154e20ef5e --- /dev/null +++ b/Documentation/blockdev/cpqarray.txt | |||
@@ -0,0 +1,93 @@ | |||
1 | This driver is for Compaq's SMART2 Intelligent Disk Array Controllers. | ||
2 | |||
3 | Supported Cards: | ||
4 | ---------------- | ||
5 | |||
6 | This driver is known to work with the following cards: | ||
7 | |||
8 | * SMART (EISA) | ||
9 | * SMART-2/E (EISA) | ||
10 | * SMART-2/P | ||
11 | * SMART-2DH | ||
12 | * SMART-2SL | ||
13 | * SMART-221 | ||
14 | * SMART-3100ES | ||
15 | * SMART-3200 | ||
16 | * Integrated Smart Array Controller | ||
17 | * SA 4200 | ||
18 | * SA 4250ES | ||
19 | * SA 431 | ||
20 | * RAID LC2 Controller | ||
21 | |||
22 | It should also work with some really old Disk array adapters, but I am | ||
23 | unable to test against these cards: | ||
24 | |||
25 | * IDA | ||
26 | * IDA-2 | ||
27 | * IAES | ||
28 | |||
29 | |||
30 | EISA Controllers: | ||
31 | ----------------- | ||
32 | |||
33 | If you want to use an EISA controller you'll have to supply some | ||
34 | modprobe/lilo parameters. If the driver is compiled into the kernel, must | ||
35 | give it the controller's IO port address at boot time (it is not | ||
36 | necessary to specify the IRQ). For example, if you had two SMART-2/E | ||
37 | controllers, in EISA slots 1 and 2 you'd give it a boot argument like | ||
38 | this: | ||
39 | |||
40 | smart2=0x1000,0x2000 | ||
41 | |||
42 | If you were loading the driver as a module, you'd give load it like this: | ||
43 | |||
44 | modprobe cpqarray eisa=0x1000,0x2000 | ||
45 | |||
46 | You can use EISA and PCI adapters at the same time. | ||
47 | |||
48 | |||
49 | Device Naming: | ||
50 | -------------- | ||
51 | |||
52 | You need some entries in /dev for the ida device. MAKEDEV in the /dev | ||
53 | directory can make device nodes for you automatically. The device setup is | ||
54 | as follows: | ||
55 | |||
56 | Major numbers: | ||
57 | 72 ida0 | ||
58 | 73 ida1 | ||
59 | 74 ida2 | ||
60 | 75 ida3 | ||
61 | 76 ida4 | ||
62 | 77 ida5 | ||
63 | 78 ida6 | ||
64 | 79 ida7 | ||
65 | |||
66 | Minor numbers: | ||
67 | b7 b6 b5 b4 b3 b2 b1 b0 | ||
68 | |----+----| |----+----| | ||
69 | | | | ||
70 | | +-------- Partition ID (0=wholedev, 1-15 partition) | ||
71 | | | ||
72 | +-------------------- Logical Volume number | ||
73 | |||
74 | The device naming scheme is: | ||
75 | /dev/ida/c0d0 Controller 0, disk 0, whole device | ||
76 | /dev/ida/c0d0p1 Controller 0, disk 0, partition 1 | ||
77 | /dev/ida/c0d0p2 Controller 0, disk 0, partition 2 | ||
78 | /dev/ida/c0d0p3 Controller 0, disk 0, partition 3 | ||
79 | |||
80 | /dev/ida/c1d1 Controller 1, disk 1, whole device | ||
81 | /dev/ida/c1d1p1 Controller 1, disk 1, partition 1 | ||
82 | /dev/ida/c1d1p2 Controller 1, disk 1, partition 2 | ||
83 | /dev/ida/c1d1p3 Controller 1, disk 1, partition 3 | ||
84 | |||
85 | |||
86 | Changelog: | ||
87 | ========== | ||
88 | |||
89 | 10-28-2004 : General cleanup, syntax fixes for in-kernel driver version. | ||
90 | James Nelson <james4765@gmail.com> | ||
91 | |||
92 | |||
93 | 1999 : Original Document | ||
diff --git a/Documentation/blockdev/floppy.txt b/Documentation/blockdev/floppy.txt new file mode 100644 index 000000000000..6ccab88705cb --- /dev/null +++ b/Documentation/blockdev/floppy.txt | |||
@@ -0,0 +1,245 @@ | |||
1 | This file describes the floppy driver. | ||
2 | |||
3 | FAQ list: | ||
4 | ========= | ||
5 | |||
6 | A FAQ list may be found in the fdutils package (see below), and also | ||
7 | at <http://fdutils.linux.lu/faq.html>. | ||
8 | |||
9 | |||
10 | LILO configuration options (Thinkpad users, read this) | ||
11 | ====================================================== | ||
12 | |||
13 | The floppy driver is configured using the 'floppy=' option in | ||
14 | lilo. This option can be typed at the boot prompt, or entered in the | ||
15 | lilo configuration file. | ||
16 | |||
17 | Example: If your kernel is called linux-2.6.9, type the following line | ||
18 | at the lilo boot prompt (if you have a thinkpad): | ||
19 | |||
20 | linux-2.6.9 floppy=thinkpad | ||
21 | |||
22 | You may also enter the following line in /etc/lilo.conf, in the description | ||
23 | of linux-2.6.9: | ||
24 | |||
25 | append = "floppy=thinkpad" | ||
26 | |||
27 | Several floppy related options may be given, example: | ||
28 | |||
29 | linux-2.6.9 floppy=daring floppy=two_fdc | ||
30 | append = "floppy=daring floppy=two_fdc" | ||
31 | |||
32 | If you give options both in the lilo config file and on the boot | ||
33 | prompt, the option strings of both places are concatenated, the boot | ||
34 | prompt options coming last. That's why there are also options to | ||
35 | restore the default behavior. | ||
36 | |||
37 | |||
38 | Module configuration options | ||
39 | ============================ | ||
40 | |||
41 | If you use the floppy driver as a module, use the following syntax: | ||
42 | modprobe floppy <options> | ||
43 | |||
44 | Example: | ||
45 | modprobe floppy omnibook messages | ||
46 | |||
47 | If you need certain options enabled every time you load the floppy driver, | ||
48 | you can put: | ||
49 | |||
50 | options floppy omnibook messages | ||
51 | |||
52 | in /etc/modprobe.conf. | ||
53 | |||
54 | |||
55 | The floppy driver related options are: | ||
56 | |||
57 | floppy=asus_pci | ||
58 | Sets the bit mask to allow only units 0 and 1. (default) | ||
59 | |||
60 | floppy=daring | ||
61 | Tells the floppy driver that you have a well behaved floppy controller. | ||
62 | This allows more efficient and smoother operation, but may fail on | ||
63 | certain controllers. This may speed up certain operations. | ||
64 | |||
65 | floppy=0,daring | ||
66 | Tells the floppy driver that your floppy controller should be used | ||
67 | with caution. | ||
68 | |||
69 | floppy=one_fdc | ||
70 | Tells the floppy driver that you have only one floppy controller. | ||
71 | (default) | ||
72 | |||
73 | floppy=two_fdc | ||
74 | floppy=<address>,two_fdc | ||
75 | Tells the floppy driver that you have two floppy controllers. | ||
76 | The second floppy controller is assumed to be at <address>. | ||
77 | This option is not needed if the second controller is at address | ||
78 | 0x370, and if you use the 'cmos' option. | ||
79 | |||
80 | floppy=thinkpad | ||
81 | Tells the floppy driver that you have a Thinkpad. Thinkpads use an | ||
82 | inverted convention for the disk change line. | ||
83 | |||
84 | floppy=0,thinkpad | ||
85 | Tells the floppy driver that you don't have a Thinkpad. | ||
86 | |||
87 | floppy=omnibook | ||
88 | floppy=nodma | ||
89 | Tells the floppy driver not to use Dma for data transfers. | ||
90 | This is needed on HP Omnibooks, which don't have a workable | ||
91 | DMA channel for the floppy driver. This option is also useful | ||
92 | if you frequently get "Unable to allocate DMA memory" messages. | ||
93 | Indeed, dma memory needs to be continuous in physical memory, | ||
94 | and is thus harder to find, whereas non-dma buffers may be | ||
95 | allocated in virtual memory. However, I advise against this if | ||
96 | you have an FDC without a FIFO (8272A or 82072). 82072A and | ||
97 | later are OK. You also need at least a 486 to use nodma. | ||
98 | If you use nodma mode, I suggest you also set the FIFO | ||
99 | threshold to 10 or lower, in order to limit the number of data | ||
100 | transfer interrupts. | ||
101 | |||
102 | If you have a FIFO-able FDC, the floppy driver automatically | ||
103 | falls back on non DMA mode if no DMA-able memory can be found. | ||
104 | If you want to avoid this, explicitly ask for 'yesdma'. | ||
105 | |||
106 | floppy=yesdma | ||
107 | Tells the floppy driver that a workable DMA channel is available. | ||
108 | (default) | ||
109 | |||
110 | floppy=nofifo | ||
111 | Disables the FIFO entirely. This is needed if you get "Bus | ||
112 | master arbitration error" messages from your Ethernet card (or | ||
113 | from other devices) while accessing the floppy. | ||
114 | |||
115 | floppy=usefifo | ||
116 | Enables the FIFO. (default) | ||
117 | |||
118 | floppy=<threshold>,fifo_depth | ||
119 | Sets the FIFO threshold. This is mostly relevant in DMA | ||
120 | mode. If this is higher, the floppy driver tolerates more | ||
121 | interrupt latency, but it triggers more interrupts (i.e. it | ||
122 | imposes more load on the rest of the system). If this is | ||
123 | lower, the interrupt latency should be lower too (faster | ||
124 | processor). The benefit of a lower threshold is less | ||
125 | interrupts. | ||
126 | |||
127 | To tune the fifo threshold, switch on over/underrun messages | ||
128 | using 'floppycontrol --messages'. Then access a floppy | ||
129 | disk. If you get a huge amount of "Over/Underrun - retrying" | ||
130 | messages, then the fifo threshold is too low. Try with a | ||
131 | higher value, until you only get an occasional Over/Underrun. | ||
132 | It is a good idea to compile the floppy driver as a module | ||
133 | when doing this tuning. Indeed, it allows to try different | ||
134 | fifo values without rebooting the machine for each test. Note | ||
135 | that you need to do 'floppycontrol --messages' every time you | ||
136 | re-insert the module. | ||
137 | |||
138 | Usually, tuning the fifo threshold should not be needed, as | ||
139 | the default (0xa) is reasonable. | ||
140 | |||
141 | floppy=<drive>,<type>,cmos | ||
142 | Sets the CMOS type of <drive> to <type>. This is mandatory if | ||
143 | you have more than two floppy drives (only two can be | ||
144 | described in the physical CMOS), or if your BIOS uses | ||
145 | non-standard CMOS types. The CMOS types are: | ||
146 | |||
147 | 0 - Use the value of the physical CMOS | ||
148 | 1 - 5 1/4 DD | ||
149 | 2 - 5 1/4 HD | ||
150 | 3 - 3 1/2 DD | ||
151 | 4 - 3 1/2 HD | ||
152 | 5 - 3 1/2 ED | ||
153 | 6 - 3 1/2 ED | ||
154 | 16 - unknown or not installed | ||
155 | |||
156 | (Note: there are two valid types for ED drives. This is because 5 was | ||
157 | initially chosen to represent floppy *tapes*, and 6 for ED drives. | ||
158 | AMI ignored this, and used 5 for ED drives. That's why the floppy | ||
159 | driver handles both.) | ||
160 | |||
161 | floppy=unexpected_interrupts | ||
162 | Print a warning message when an unexpected interrupt is received. | ||
163 | (default) | ||
164 | |||
165 | floppy=no_unexpected_interrupts | ||
166 | floppy=L40SX | ||
167 | Don't print a message when an unexpected interrupt is received. This | ||
168 | is needed on IBM L40SX laptops in certain video modes. (There seems | ||
169 | to be an interaction between video and floppy. The unexpected | ||
170 | interrupts affect only performance, and can be safely ignored.) | ||
171 | |||
172 | floppy=broken_dcl | ||
173 | Don't use the disk change line, but assume that the disk was | ||
174 | changed whenever the device node is reopened. Needed on some | ||
175 | boxes where the disk change line is broken or unsupported. | ||
176 | This should be regarded as a stopgap measure, indeed it makes | ||
177 | floppy operation less efficient due to unneeded cache | ||
178 | flushings, and slightly more unreliable. Please verify your | ||
179 | cable, connection and jumper settings if you have any DCL | ||
180 | problems. However, some older drives, and also some laptops | ||
181 | are known not to have a DCL. | ||
182 | |||
183 | floppy=debug | ||
184 | Print debugging messages. | ||
185 | |||
186 | floppy=messages | ||
187 | Print informational messages for some operations (disk change | ||
188 | notifications, warnings about over and underruns, and about | ||
189 | autodetection). | ||
190 | |||
191 | floppy=silent_dcl_clear | ||
192 | Uses a less noisy way to clear the disk change line (which | ||
193 | doesn't involve seeks). Implied by 'daring' option. | ||
194 | |||
195 | floppy=<nr>,irq | ||
196 | Sets the floppy IRQ to <nr> instead of 6. | ||
197 | |||
198 | floppy=<nr>,dma | ||
199 | Sets the floppy DMA channel to <nr> instead of 2. | ||
200 | |||
201 | floppy=slow | ||
202 | Use PS/2 stepping rate: | ||
203 | " PS/2 floppies have much slower step rates than regular floppies. | ||
204 | It's been recommended that take about 1/4 of the default speed | ||
205 | in some more extreme cases." | ||
206 | |||
207 | |||
208 | Supporting utilities and additional documentation: | ||
209 | ================================================== | ||
210 | |||
211 | Additional parameters of the floppy driver can be configured at | ||
212 | runtime. Utilities which do this can be found in the fdutils package. | ||
213 | This package also contains a new version of mtools which allows to | ||
214 | access high capacity disks (up to 1992K on a high density 3 1/2 disk!). | ||
215 | It also contains additional documentation about the floppy driver. | ||
216 | |||
217 | The latest version can be found at fdutils homepage: | ||
218 | http://fdutils.linux.lu | ||
219 | |||
220 | The fdutils releases can be found at: | ||
221 | http://fdutils.linux.lu/download.html | ||
222 | http://www.tux.org/pub/knaff/fdutils/ | ||
223 | ftp://metalab.unc.edu/pub/Linux/utils/disk-management/ | ||
224 | |||
225 | Reporting problems about the floppy driver | ||
226 | ========================================== | ||
227 | |||
228 | If you have a question or a bug report about the floppy driver, mail | ||
229 | me at Alain.Knaff@poboxes.com . If you post to Usenet, preferably use | ||
230 | comp.os.linux.hardware. As the volume in these groups is rather high, | ||
231 | be sure to include the word "floppy" (or "FLOPPY") in the subject | ||
232 | line. If the reported problem happens when mounting floppy disks, be | ||
233 | sure to mention also the type of the filesystem in the subject line. | ||
234 | |||
235 | Be sure to read the FAQ before mailing/posting any bug reports! | ||
236 | |||
237 | Alain | ||
238 | |||
239 | Changelog | ||
240 | ========= | ||
241 | |||
242 | 10-30-2004 : Cleanup, updating, add reference to module configuration. | ||
243 | James Nelson <james4765@gmail.com> | ||
244 | |||
245 | 6-3-2000 : Original Document | ||
diff --git a/Documentation/blockdev/nbd.txt b/Documentation/blockdev/nbd.txt new file mode 100644 index 000000000000..aeb93ffe6416 --- /dev/null +++ b/Documentation/blockdev/nbd.txt | |||
@@ -0,0 +1,47 @@ | |||
1 | Network Block Device (TCP version) | ||
2 | |||
3 | What is it: With this compiled in the kernel (or as a module), Linux | ||
4 | can use a remote server as one of its block devices. So every time | ||
5 | the client computer wants to read, e.g., /dev/nb0, it sends a | ||
6 | request over TCP to the server, which will reply with the data read. | ||
7 | This can be used for stations with low disk space (or even diskless - | ||
8 | if you boot from floppy) to borrow disk space from another computer. | ||
9 | Unlike NFS, it is possible to put any filesystem on it, etc. It should | ||
10 | even be possible to use NBD as a root filesystem (I've never tried), | ||
11 | but it requires a user-level program to be in the initrd to start. | ||
12 | It also allows you to run block-device in user land (making server | ||
13 | and client physically the same computer, communicating using loopback). | ||
14 | |||
15 | Current state: It currently works. Network block device is stable. | ||
16 | I originally thought that it was impossible to swap over TCP. It | ||
17 | turned out not to be true - swapping over TCP now works and seems | ||
18 | to be deadlock-free, but it requires heavy patches into Linux's | ||
19 | network layer. | ||
20 | |||
21 | For more information, or to download the nbd-client and nbd-server | ||
22 | tools, go to http://nbd.sf.net/. | ||
23 | |||
24 | Howto: To setup nbd, you can simply do the following: | ||
25 | |||
26 | First, serve a device or file from a remote server: | ||
27 | |||
28 | nbd-server <port-number> <device-or-file-to-serve-to-client> | ||
29 | |||
30 | e.g., | ||
31 | root@server1 # nbd-server 1234 /dev/sdb1 | ||
32 | |||
33 | (serves sdb1 partition on TCP port 1234) | ||
34 | |||
35 | Then, on the local (client) system: | ||
36 | |||
37 | nbd-client <server-name-or-IP> <server-port-number> /dev/nb[0-n] | ||
38 | |||
39 | e.g., | ||
40 | root@client1 # nbd-client server1 1234 /dev/nb0 | ||
41 | |||
42 | (creates the nb0 device on client1) | ||
43 | |||
44 | The nbd kernel module need only be installed on the client | ||
45 | system, as the nbd-server is completely in userspace. In fact, | ||
46 | the nbd-server has been successfully ported to other operating | ||
47 | systems, including Windows. | ||
diff --git a/Documentation/blockdev/paride.txt b/Documentation/blockdev/paride.txt new file mode 100644 index 000000000000..e4312676bdda --- /dev/null +++ b/Documentation/blockdev/paride.txt | |||
@@ -0,0 +1,417 @@ | |||
1 | |||
2 | Linux and parallel port IDE devices | ||
3 | |||
4 | PARIDE v1.03 (c) 1997-8 Grant Guenther <grant@torque.net> | ||
5 | |||
6 | 1. Introduction | ||
7 | |||
8 | Owing to the simplicity and near universality of the parallel port interface | ||
9 | to personal computers, many external devices such as portable hard-disk, | ||
10 | CD-ROM, LS-120 and tape drives use the parallel port to connect to their | ||
11 | host computer. While some devices (notably scanners) use ad-hoc methods | ||
12 | to pass commands and data through the parallel port interface, most | ||
13 | external devices are actually identical to an internal model, but with | ||
14 | a parallel-port adapter chip added in. Some of the original parallel port | ||
15 | adapters were little more than mechanisms for multiplexing a SCSI bus. | ||
16 | (The Iomega PPA-3 adapter used in the ZIP drives is an example of this | ||
17 | approach). Most current designs, however, take a different approach. | ||
18 | The adapter chip reproduces a small ISA or IDE bus in the external device | ||
19 | and the communication protocol provides operations for reading and writing | ||
20 | device registers, as well as data block transfer functions. Sometimes, | ||
21 | the device being addressed via the parallel cable is a standard SCSI | ||
22 | controller like an NCR 5380. The "ditto" family of external tape | ||
23 | drives use the ISA replicator to interface a floppy disk controller, | ||
24 | which is then connected to a floppy-tape mechanism. The vast majority | ||
25 | of external parallel port devices, however, are now based on standard | ||
26 | IDE type devices, which require no intermediate controller. If one | ||
27 | were to open up a parallel port CD-ROM drive, for instance, one would | ||
28 | find a standard ATAPI CD-ROM drive, a power supply, and a single adapter | ||
29 | that interconnected a standard PC parallel port cable and a standard | ||
30 | IDE cable. It is usually possible to exchange the CD-ROM device with | ||
31 | any other device using the IDE interface. | ||
32 | |||
33 | The document describes the support in Linux for parallel port IDE | ||
34 | devices. It does not cover parallel port SCSI devices, "ditto" tape | ||
35 | drives or scanners. Many different devices are supported by the | ||
36 | parallel port IDE subsystem, including: | ||
37 | |||
38 | MicroSolutions backpack CD-ROM | ||
39 | MicroSolutions backpack PD/CD | ||
40 | MicroSolutions backpack hard-drives | ||
41 | MicroSolutions backpack 8000t tape drive | ||
42 | SyQuest EZ-135, EZ-230 & SparQ drives | ||
43 | Avatar Shark | ||
44 | Imation Superdisk LS-120 | ||
45 | Maxell Superdisk LS-120 | ||
46 | FreeCom Power CD | ||
47 | Hewlett-Packard 5GB and 8GB tape drives | ||
48 | Hewlett-Packard 7100 and 7200 CD-RW drives | ||
49 | |||
50 | as well as most of the clone and no-name products on the market. | ||
51 | |||
52 | To support such a wide range of devices, PARIDE, the parallel port IDE | ||
53 | subsystem, is actually structured in three parts. There is a base | ||
54 | paride module which provides a registry and some common methods for | ||
55 | accessing the parallel ports. The second component is a set of | ||
56 | high-level drivers for each of the different types of supported devices: | ||
57 | |||
58 | pd IDE disk | ||
59 | pcd ATAPI CD-ROM | ||
60 | pf ATAPI disk | ||
61 | pt ATAPI tape | ||
62 | pg ATAPI generic | ||
63 | |||
64 | (Currently, the pg driver is only used with CD-R drives). | ||
65 | |||
66 | The high-level drivers function according to the relevant standards. | ||
67 | The third component of PARIDE is a set of low-level protocol drivers | ||
68 | for each of the parallel port IDE adapter chips. Thanks to the interest | ||
69 | and encouragement of Linux users from many parts of the world, | ||
70 | support is available for almost all known adapter protocols: | ||
71 | |||
72 | aten ATEN EH-100 (HK) | ||
73 | bpck Microsolutions backpack (US) | ||
74 | comm DataStor (old-type) "commuter" adapter (TW) | ||
75 | dstr DataStor EP-2000 (TW) | ||
76 | epat Shuttle EPAT (UK) | ||
77 | epia Shuttle EPIA (UK) | ||
78 | fit2 FIT TD-2000 (US) | ||
79 | fit3 FIT TD-3000 (US) | ||
80 | friq Freecom IQ cable (DE) | ||
81 | frpw Freecom Power (DE) | ||
82 | kbic KingByte KBIC-951A and KBIC-971A (TW) | ||
83 | ktti KT Technology PHd adapter (SG) | ||
84 | on20 OnSpec 90c20 (US) | ||
85 | on26 OnSpec 90c26 (US) | ||
86 | |||
87 | |||
88 | 2. Using the PARIDE subsystem | ||
89 | |||
90 | While configuring the Linux kernel, you may choose either to build | ||
91 | the PARIDE drivers into your kernel, or to build them as modules. | ||
92 | |||
93 | In either case, you will need to select "Parallel port IDE device support" | ||
94 | as well as at least one of the high-level drivers and at least one | ||
95 | of the parallel port communication protocols. If you do not know | ||
96 | what kind of parallel port adapter is used in your drive, you could | ||
97 | begin by checking the file names and any text files on your DOS | ||
98 | installation floppy. Alternatively, you can look at the markings on | ||
99 | the adapter chip itself. That's usually sufficient to identify the | ||
100 | correct device. | ||
101 | |||
102 | You can actually select all the protocol modules, and allow the PARIDE | ||
103 | subsystem to try them all for you. | ||
104 | |||
105 | For the "brand-name" products listed above, here are the protocol | ||
106 | and high-level drivers that you would use: | ||
107 | |||
108 | Manufacturer Model Driver Protocol | ||
109 | |||
110 | MicroSolutions CD-ROM pcd bpck | ||
111 | MicroSolutions PD drive pf bpck | ||
112 | MicroSolutions hard-drive pd bpck | ||
113 | MicroSolutions 8000t tape pt bpck | ||
114 | SyQuest EZ, SparQ pd epat | ||
115 | Imation Superdisk pf epat | ||
116 | Maxell Superdisk pf friq | ||
117 | Avatar Shark pd epat | ||
118 | FreeCom CD-ROM pcd frpw | ||
119 | Hewlett-Packard 5GB Tape pt epat | ||
120 | Hewlett-Packard 7200e (CD) pcd epat | ||
121 | Hewlett-Packard 7200e (CD-R) pg epat | ||
122 | |||
123 | 2.1 Configuring built-in drivers | ||
124 | |||
125 | We recommend that you get to know how the drivers work and how to | ||
126 | configure them as loadable modules, before attempting to compile a | ||
127 | kernel with the drivers built-in. | ||
128 | |||
129 | If you built all of your PARIDE support directly into your kernel, | ||
130 | and you have just a single parallel port IDE device, your kernel should | ||
131 | locate it automatically for you. If you have more than one device, | ||
132 | you may need to give some command line options to your bootloader | ||
133 | (eg: LILO), how to do that is beyond the scope of this document. | ||
134 | |||
135 | The high-level drivers accept a number of command line parameters, all | ||
136 | of which are documented in the source files in linux/drivers/block/paride. | ||
137 | By default, each driver will automatically try all parallel ports it | ||
138 | can find, and all protocol types that have been installed, until it finds | ||
139 | a parallel port IDE adapter. Once it finds one, the probe stops. So, | ||
140 | if you have more than one device, you will need to tell the drivers | ||
141 | how to identify them. This requires specifying the port address, the | ||
142 | protocol identification number and, for some devices, the drive's | ||
143 | chain ID. While your system is booting, a number of messages are | ||
144 | displayed on the console. Like all such messages, they can be | ||
145 | reviewed with the 'dmesg' command. Among those messages will be | ||
146 | some lines like: | ||
147 | |||
148 | paride: bpck registered as protocol 0 | ||
149 | paride: epat registered as protocol 1 | ||
150 | |||
151 | The numbers will always be the same until you build a new kernel with | ||
152 | different protocol selections. You should note these numbers as you | ||
153 | will need them to identify the devices. | ||
154 | |||
155 | If you happen to be using a MicroSolutions backpack device, you will | ||
156 | also need to know the unit ID number for each drive. This is usually | ||
157 | the last two digits of the drive's serial number (but read MicroSolutions' | ||
158 | documentation about this). | ||
159 | |||
160 | As an example, let's assume that you have a MicroSolutions PD/CD drive | ||
161 | with unit ID number 36 connected to the parallel port at 0x378, a SyQuest | ||
162 | EZ-135 connected to the chained port on the PD/CD drive and also an | ||
163 | Imation Superdisk connected to port 0x278. You could give the following | ||
164 | options on your boot command: | ||
165 | |||
166 | pd.drive0=0x378,1 pf.drive0=0x278,1 pf.drive1=0x378,0,36 | ||
167 | |||
168 | In the last option, pf.drive1 configures device /dev/pf1, the 0x378 | ||
169 | is the parallel port base address, the 0 is the protocol registration | ||
170 | number and 36 is the chain ID. | ||
171 | |||
172 | Please note: while PARIDE will work both with and without the | ||
173 | PARPORT parallel port sharing system that is included by the | ||
174 | "Parallel port support" option, PARPORT must be included and enabled | ||
175 | if you want to use chains of devices on the same parallel port. | ||
176 | |||
177 | 2.2 Loading and configuring PARIDE as modules | ||
178 | |||
179 | It is much faster and simpler to get to understand the PARIDE drivers | ||
180 | if you use them as loadable kernel modules. | ||
181 | |||
182 | Note 1: using these drivers with the "kerneld" automatic module loading | ||
183 | system is not recommended for beginners, and is not documented here. | ||
184 | |||
185 | Note 2: if you build PARPORT support as a loadable module, PARIDE must | ||
186 | also be built as loadable modules, and PARPORT must be loaded before the | ||
187 | PARIDE modules. | ||
188 | |||
189 | To use PARIDE, you must begin by | ||
190 | |||
191 | insmod paride | ||
192 | |||
193 | this loads a base module which provides a registry for the protocols, | ||
194 | among other tasks. | ||
195 | |||
196 | Then, load as many of the protocol modules as you think you might need. | ||
197 | As you load each module, it will register the protocols that it supports, | ||
198 | and print a log message to your kernel log file and your console. For | ||
199 | example: | ||
200 | |||
201 | # insmod epat | ||
202 | paride: epat registered as protocol 0 | ||
203 | # insmod kbic | ||
204 | paride: k951 registered as protocol 1 | ||
205 | paride: k971 registered as protocol 2 | ||
206 | |||
207 | Finally, you can load high-level drivers for each kind of device that | ||
208 | you have connected. By default, each driver will autoprobe for a single | ||
209 | device, but you can support up to four similar devices by giving their | ||
210 | individual co-ordinates when you load the driver. | ||
211 | |||
212 | For example, if you had two no-name CD-ROM drives both using the | ||
213 | KingByte KBIC-951A adapter, one on port 0x378 and the other on 0x3bc | ||
214 | you could give the following command: | ||
215 | |||
216 | # insmod pcd drive0=0x378,1 drive1=0x3bc,1 | ||
217 | |||
218 | For most adapters, giving a port address and protocol number is sufficient, | ||
219 | but check the source files in linux/drivers/block/paride for more | ||
220 | information. (Hopefully someone will write some man pages one day !). | ||
221 | |||
222 | As another example, here's what happens when PARPORT is installed, and | ||
223 | a SyQuest EZ-135 is attached to port 0x378: | ||
224 | |||
225 | # insmod paride | ||
226 | paride: version 1.0 installed | ||
227 | # insmod epat | ||
228 | paride: epat registered as protocol 0 | ||
229 | # insmod pd | ||
230 | pd: pd version 1.0, major 45, cluster 64, nice 0 | ||
231 | pda: Sharing parport1 at 0x378 | ||
232 | pda: epat 1.0, Shuttle EPAT chip c3 at 0x378, mode 5 (EPP-32), delay 1 | ||
233 | pda: SyQuest EZ135A, 262144 blocks [128M], (512/16/32), removable media | ||
234 | pda: pda1 | ||
235 | |||
236 | Note that the last line is the output from the generic partition table | ||
237 | scanner - in this case it reports that it has found a disk with one partition. | ||
238 | |||
239 | 2.3 Using a PARIDE device | ||
240 | |||
241 | Once the drivers have been loaded, you can access PARIDE devices in the | ||
242 | same way as their traditional counterparts. You will probably need to | ||
243 | create the device "special files". Here is a simple script that you can | ||
244 | cut to a file and execute: | ||
245 | |||
246 | #!/bin/bash | ||
247 | # | ||
248 | # mkd -- a script to create the device special files for the PARIDE subsystem | ||
249 | # | ||
250 | function mkdev { | ||
251 | mknod $1 $2 $3 $4 ; chmod 0660 $1 ; chown root:disk $1 | ||
252 | } | ||
253 | # | ||
254 | function pd { | ||
255 | D=$( printf \\$( printf "x%03x" $[ $1 + 97 ] ) ) | ||
256 | mkdev pd$D b 45 $[ $1 * 16 ] | ||
257 | for P in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ||
258 | do mkdev pd$D$P b 45 $[ $1 * 16 + $P ] | ||
259 | done | ||
260 | } | ||
261 | # | ||
262 | cd /dev | ||
263 | # | ||
264 | for u in 0 1 2 3 ; do pd $u ; done | ||
265 | for u in 0 1 2 3 ; do mkdev pcd$u b 46 $u ; done | ||
266 | for u in 0 1 2 3 ; do mkdev pf$u b 47 $u ; done | ||
267 | for u in 0 1 2 3 ; do mkdev pt$u c 96 $u ; done | ||
268 | for u in 0 1 2 3 ; do mkdev npt$u c 96 $[ $u + 128 ] ; done | ||
269 | for u in 0 1 2 3 ; do mkdev pg$u c 97 $u ; done | ||
270 | # | ||
271 | # end of mkd | ||
272 | |||
273 | With the device files and drivers in place, you can access PARIDE devices | ||
274 | like any other Linux device. For example, to mount a CD-ROM in pcd0, use: | ||
275 | |||
276 | mount /dev/pcd0 /cdrom | ||
277 | |||
278 | If you have a fresh Avatar Shark cartridge, and the drive is pda, you | ||
279 | might do something like: | ||
280 | |||
281 | fdisk /dev/pda -- make a new partition table with | ||
282 | partition 1 of type 83 | ||
283 | |||
284 | mke2fs /dev/pda1 -- to build the file system | ||
285 | |||
286 | mkdir /shark -- make a place to mount the disk | ||
287 | |||
288 | mount /dev/pda1 /shark | ||
289 | |||
290 | Devices like the Imation superdisk work in the same way, except that | ||
291 | they do not have a partition table. For example to make a 120MB | ||
292 | floppy that you could share with a DOS system: | ||
293 | |||
294 | mkdosfs /dev/pf0 | ||
295 | mount /dev/pf0 /mnt | ||
296 | |||
297 | |||
298 | 2.4 The pf driver | ||
299 | |||
300 | The pf driver is intended for use with parallel port ATAPI disk | ||
301 | devices. The most common devices in this category are PD drives | ||
302 | and LS-120 drives. Traditionally, media for these devices are not | ||
303 | partitioned. Consequently, the pf driver does not support partitioned | ||
304 | media. This may be changed in a future version of the driver. | ||
305 | |||
306 | 2.5 Using the pt driver | ||
307 | |||
308 | The pt driver for parallel port ATAPI tape drives is a minimal driver. | ||
309 | It does not yet support many of the standard tape ioctl operations. | ||
310 | For best performance, a block size of 32KB should be used. You will | ||
311 | probably want to set the parallel port delay to 0, if you can. | ||
312 | |||
313 | 2.6 Using the pg driver | ||
314 | |||
315 | The pg driver can be used in conjunction with the cdrecord program | ||
316 | to create CD-ROMs. Please get cdrecord version 1.6.1 or later | ||
317 | from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ . To record CD-R media | ||
318 | your parallel port should ideally be set to EPP mode, and the "port delay" | ||
319 | should be set to 0. With those settings it is possible to record at 2x | ||
320 | speed without any buffer underruns. If you cannot get the driver to work | ||
321 | in EPP mode, try to use "bidirectional" or "PS/2" mode and 1x speeds only. | ||
322 | |||
323 | |||
324 | 3. Troubleshooting | ||
325 | |||
326 | 3.1 Use EPP mode if you can | ||
327 | |||
328 | The most common problems that people report with the PARIDE drivers | ||
329 | concern the parallel port CMOS settings. At this time, none of the | ||
330 | PARIDE protocol modules support ECP mode, or any ECP combination modes. | ||
331 | If you are able to do so, please set your parallel port into EPP mode | ||
332 | using your CMOS setup procedure. | ||
333 | |||
334 | 3.2 Check the port delay | ||
335 | |||
336 | Some parallel ports cannot reliably transfer data at full speed. To | ||
337 | offset the errors, the PARIDE protocol modules introduce a "port | ||
338 | delay" between each access to the i/o ports. Each protocol sets | ||
339 | a default value for this delay. In most cases, the user can override | ||
340 | the default and set it to 0 - resulting in somewhat higher transfer | ||
341 | rates. In some rare cases (especially with older 486 systems) the | ||
342 | default delays are not long enough. if you experience corrupt data | ||
343 | transfers, or unexpected failures, you may wish to increase the | ||
344 | port delay. The delay can be programmed using the "driveN" parameters | ||
345 | to each of the high-level drivers. Please see the notes above, or | ||
346 | read the comments at the beginning of the driver source files in | ||
347 | linux/drivers/block/paride. | ||
348 | |||
349 | 3.3 Some drives need a printer reset | ||
350 | |||
351 | There appear to be a number of "noname" external drives on the market | ||
352 | that do not always power up correctly. We have noticed this with some | ||
353 | drives based on OnSpec and older Freecom adapters. In these rare cases, | ||
354 | the adapter can often be reinitialised by issuing a "printer reset" on | ||
355 | the parallel port. As the reset operation is potentially disruptive in | ||
356 | multiple device environments, the PARIDE drivers will not do it | ||
357 | automatically. You can however, force a printer reset by doing: | ||
358 | |||
359 | insmod lp reset=1 | ||
360 | rmmod lp | ||
361 | |||
362 | If you have one of these marginal cases, you should probably build | ||
363 | your paride drivers as modules, and arrange to do the printer reset | ||
364 | before loading the PARIDE drivers. | ||
365 | |||
366 | 3.4 Use the verbose option and dmesg if you need help | ||
367 | |||
368 | While a lot of testing has gone into these drivers to make them work | ||
369 | as smoothly as possible, problems will arise. If you do have problems, | ||
370 | please check all the obvious things first: does the drive work in | ||
371 | DOS with the manufacturer's drivers ? If that doesn't yield any useful | ||
372 | clues, then please make sure that only one drive is hooked to your system, | ||
373 | and that either (a) PARPORT is enabled or (b) no other device driver | ||
374 | is using your parallel port (check in /proc/ioports). Then, load the | ||
375 | appropriate drivers (you can load several protocol modules if you want) | ||
376 | as in: | ||
377 | |||
378 | # insmod paride | ||
379 | # insmod epat | ||
380 | # insmod bpck | ||
381 | # insmod kbic | ||
382 | ... | ||
383 | # insmod pd verbose=1 | ||
384 | |||
385 | (using the correct driver for the type of device you have, of course). | ||
386 | The verbose=1 parameter will cause the drivers to log a trace of their | ||
387 | activity as they attempt to locate your drive. | ||
388 | |||
389 | Use 'dmesg' to capture a log of all the PARIDE messages (any messages | ||
390 | beginning with paride:, a protocol module's name or a driver's name) and | ||
391 | include that with your bug report. You can submit a bug report in one | ||
392 | of two ways. Either send it directly to the author of the PARIDE suite, | ||
393 | by e-mail to grant@torque.net, or join the linux-parport mailing list | ||
394 | and post your report there. | ||
395 | |||
396 | 3.5 For more information or help | ||
397 | |||
398 | You can join the linux-parport mailing list by sending a mail message | ||
399 | to | ||
400 | linux-parport-request@torque.net | ||
401 | |||
402 | with the single word | ||
403 | |||
404 | subscribe | ||
405 | |||
406 | in the body of the mail message (not in the subject line). Please be | ||
407 | sure that your mail program is correctly set up when you do this, as | ||
408 | the list manager is a robot that will subscribe you using the reply | ||
409 | address in your mail headers. REMOVE any anti-spam gimmicks you may | ||
410 | have in your mail headers, when sending mail to the list server. | ||
411 | |||
412 | You might also find some useful information on the linux-parport | ||
413 | web pages (although they are not always up to date) at | ||
414 | |||
415 | http://www.torque.net/parport/ | ||
416 | |||
417 | |||
diff --git a/Documentation/blockdev/ramdisk.txt b/Documentation/blockdev/ramdisk.txt new file mode 100644 index 000000000000..6c820baa19a6 --- /dev/null +++ b/Documentation/blockdev/ramdisk.txt | |||
@@ -0,0 +1,165 @@ | |||
1 | Using the RAM disk block device with Linux | ||
2 | ------------------------------------------ | ||
3 | |||
4 | Contents: | ||
5 | |||
6 | 1) Overview | ||
7 | 2) Kernel Command Line Parameters | ||
8 | 3) Using "rdev -r" | ||
9 | 4) An Example of Creating a Compressed RAM Disk | ||
10 | |||
11 | |||
12 | 1) Overview | ||
13 | ----------- | ||
14 | |||
15 | The RAM disk driver is a way to use main system memory as a block device. It | ||
16 | is required for initrd, an initial filesystem used if you need to load modules | ||
17 | in order to access the root filesystem (see Documentation/initrd.txt). It can | ||
18 | also be used for a temporary filesystem for crypto work, since the contents | ||
19 | are erased on reboot. | ||
20 | |||
21 | The RAM disk dynamically grows as more space is required. It does this by using | ||
22 | RAM from the buffer cache. The driver marks the buffers it is using as dirty | ||
23 | so that the VM subsystem does not try to reclaim them later. | ||
24 | |||
25 | The RAM disk supports up to 16 RAM disks by default, and can be reconfigured | ||
26 | to support an unlimited number of RAM disks (at your own risk). Just change | ||
27 | the configuration symbol BLK_DEV_RAM_COUNT in the Block drivers config menu | ||
28 | and (re)build the kernel. | ||
29 | |||
30 | To use RAM disk support with your system, run './MAKEDEV ram' from the /dev | ||
31 | directory. RAM disks are all major number 1, and start with minor number 0 | ||
32 | for /dev/ram0, etc. If used, modern kernels use /dev/ram0 for an initrd. | ||
33 | |||
34 | The new RAM disk also has the ability to load compressed RAM disk images, | ||
35 | allowing one to squeeze more programs onto an average installation or | ||
36 | rescue floppy disk. | ||
37 | |||
38 | |||
39 | 2) Kernel Command Line Parameters | ||
40 | --------------------------------- | ||
41 | |||
42 | ramdisk_size=N | ||
43 | ============== | ||
44 | |||
45 | This parameter tells the RAM disk driver to set up RAM disks of N k size. The | ||
46 | default is 4096 (4 MB) (8192 (8 MB) on S390). | ||
47 | |||
48 | ramdisk_blocksize=N | ||
49 | =================== | ||
50 | |||
51 | This parameter tells the RAM disk driver how many bytes to use per block. The | ||
52 | default is 1024 (BLOCK_SIZE). | ||
53 | |||
54 | |||
55 | 3) Using "rdev -r" | ||
56 | ------------------ | ||
57 | |||
58 | The usage of the word (two bytes) that "rdev -r" sets in the kernel image is | ||
59 | as follows. The low 11 bits (0 -> 10) specify an offset (in 1 k blocks) of up | ||
60 | to 2 MB (2^11) of where to find the RAM disk (this used to be the size). Bit | ||
61 | 14 indicates that a RAM disk is to be loaded, and bit 15 indicates whether a | ||
62 | prompt/wait sequence is to be given before trying to read the RAM disk. Since | ||
63 | the RAM disk dynamically grows as data is being written into it, a size field | ||
64 | is not required. Bits 11 to 13 are not currently used and may as well be zero. | ||
65 | These numbers are no magical secrets, as seen below: | ||
66 | |||
67 | ./arch/i386/kernel/setup.c:#define RAMDISK_IMAGE_START_MASK 0x07FF | ||
68 | ./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000 | ||
69 | ./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000 | ||
70 | |||
71 | Consider a typical two floppy disk setup, where you will have the | ||
72 | kernel on disk one, and have already put a RAM disk image onto disk #2. | ||
73 | |||
74 | Hence you want to set bits 0 to 13 as 0, meaning that your RAM disk | ||
75 | starts at an offset of 0 kB from the beginning of the floppy. | ||
76 | The command line equivalent is: "ramdisk_start=0" | ||
77 | |||
78 | You want bit 14 as one, indicating that a RAM disk is to be loaded. | ||
79 | The command line equivalent is: "load_ramdisk=1" | ||
80 | |||
81 | You want bit 15 as one, indicating that you want a prompt/keypress | ||
82 | sequence so that you have a chance to switch floppy disks. | ||
83 | The command line equivalent is: "prompt_ramdisk=1" | ||
84 | |||
85 | Putting that together gives 2^15 + 2^14 + 0 = 49152 for an rdev word. | ||
86 | So to create disk one of the set, you would do: | ||
87 | |||
88 | /usr/src/linux# cat arch/i386/boot/zImage > /dev/fd0 | ||
89 | /usr/src/linux# rdev /dev/fd0 /dev/fd0 | ||
90 | /usr/src/linux# rdev -r /dev/fd0 49152 | ||
91 | |||
92 | If you make a boot disk that has LILO, then for the above, you would use: | ||
93 | append = "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1" | ||
94 | Since the default start = 0 and the default prompt = 1, you could use: | ||
95 | append = "load_ramdisk=1" | ||
96 | |||
97 | |||
98 | 4) An Example of Creating a Compressed RAM Disk | ||
99 | ---------------------------------------------- | ||
100 | |||
101 | To create a RAM disk image, you will need a spare block device to | ||
102 | construct it on. This can be the RAM disk device itself, or an | ||
103 | unused disk partition (such as an unmounted swap partition). For this | ||
104 | example, we will use the RAM disk device, "/dev/ram0". | ||
105 | |||
106 | Note: This technique should not be done on a machine with less than 8 MB | ||
107 | of RAM. If using a spare disk partition instead of /dev/ram0, then this | ||
108 | restriction does not apply. | ||
109 | |||
110 | a) Decide on the RAM disk size that you want. Say 2 MB for this example. | ||
111 | Create it by writing to the RAM disk device. (This step is not currently | ||
112 | required, but may be in the future.) It is wise to zero out the | ||
113 | area (esp. for disks) so that maximal compression is achieved for | ||
114 | the unused blocks of the image that you are about to create. | ||
115 | |||
116 | dd if=/dev/zero of=/dev/ram0 bs=1k count=2048 | ||
117 | |||
118 | b) Make a filesystem on it. Say ext2fs for this example. | ||
119 | |||
120 | mke2fs -vm0 /dev/ram0 2048 | ||
121 | |||
122 | c) Mount it, copy the files you want to it (eg: /etc/* /dev/* ...) | ||
123 | and unmount it again. | ||
124 | |||
125 | d) Compress the contents of the RAM disk. The level of compression | ||
126 | will be approximately 50% of the space used by the files. Unused | ||
127 | space on the RAM disk will compress to almost nothing. | ||
128 | |||
129 | dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz | ||
130 | |||
131 | e) Put the kernel onto the floppy | ||
132 | |||
133 | dd if=zImage of=/dev/fd0 bs=1k | ||
134 | |||
135 | f) Put the RAM disk image onto the floppy, after the kernel. Use an offset | ||
136 | that is slightly larger than the kernel, so that you can put another | ||
137 | (possibly larger) kernel onto the same floppy later without overlapping | ||
138 | the RAM disk image. An offset of 400 kB for kernels about 350 kB in | ||
139 | size would be reasonable. Make sure offset+size of ram_image.gz is | ||
140 | not larger than the total space on your floppy (usually 1440 kB). | ||
141 | |||
142 | dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400 | ||
143 | |||
144 | g) Use "rdev" to set the boot device, RAM disk offset, prompt flag, etc. | ||
145 | For prompt_ramdisk=1, load_ramdisk=1, ramdisk_start=400, one would | ||
146 | have 2^15 + 2^14 + 400 = 49552. | ||
147 | |||
148 | rdev /dev/fd0 /dev/fd0 | ||
149 | rdev -r /dev/fd0 49552 | ||
150 | |||
151 | That is it. You now have your boot/root compressed RAM disk floppy. Some | ||
152 | users may wish to combine steps (d) and (f) by using a pipe. | ||
153 | |||
154 | -------------------------------------------------------------------------- | ||
155 | Paul Gortmaker 12/95 | ||
156 | |||
157 | Changelog: | ||
158 | ---------- | ||
159 | |||
160 | 10-22-04 : Updated to reflect changes in command line options, remove | ||
161 | obsolete references, general cleanup. | ||
162 | James Nelson (james4765@gmail.com) | ||
163 | |||
164 | |||
165 | 12-95 : Original Document | ||