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>
This commit is contained in:
16
Documentation/blockdev/00-INDEX
Normal file
16
Documentation/blockdev/00-INDEX
Normal file
@@ -0,0 +1,16 @@
|
||||
00-INDEX
|
||||
- this file
|
||||
README.DAC960
|
||||
- info on Mylex DAC960/DAC1100 PCI RAID Controller Driver for Linux.
|
||||
cciss.txt
|
||||
- info, major/minor #'s for Compaq's SMART Array Controllers.
|
||||
cpqarray.txt
|
||||
- info on using Compaq's SMART2 Intelligent Disk Array Controllers.
|
||||
floppy.txt
|
||||
- notes and driver options for the floppy disk driver.
|
||||
nbd.txt
|
||||
- info on a TCP implementation of a network block device.
|
||||
paride.txt
|
||||
- information about the parallel port IDE subsystem.
|
||||
ramdisk.txt
|
||||
- short guide on how to set up and use the RAM disk.
|
756
Documentation/blockdev/README.DAC960
Normal file
756
Documentation/blockdev/README.DAC960
Normal file
@@ -0,0 +1,756 @@
|
||||
Linux Driver for Mylex DAC960/AcceleRAID/eXtremeRAID PCI RAID Controllers
|
||||
|
||||
Version 2.2.11 for Linux 2.2.19
|
||||
Version 2.4.11 for Linux 2.4.12
|
||||
|
||||
PRODUCTION RELEASE
|
||||
|
||||
11 October 2001
|
||||
|
||||
Leonard N. Zubkoff
|
||||
Dandelion Digital
|
||||
lnz@dandelion.com
|
||||
|
||||
Copyright 1998-2001 by Leonard N. Zubkoff <lnz@dandelion.com>
|
||||
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
Mylex, Inc. designs and manufactures a variety of high performance PCI RAID
|
||||
controllers. Mylex Corporation is located at 34551 Ardenwood Blvd., Fremont,
|
||||
California 94555, USA and can be reached at 510.796.6100 or on the World Wide
|
||||
Web at http://www.mylex.com. Mylex Technical Support can be reached by
|
||||
electronic mail at mylexsup@us.ibm.com, by voice at 510.608.2400, or by FAX at
|
||||
510.745.7715. Contact information for offices in Europe and Japan is available
|
||||
on their Web site.
|
||||
|
||||
The latest information on Linux support for DAC960 PCI RAID Controllers, as
|
||||
well as the most recent release of this driver, will always be available from
|
||||
my Linux Home Page at URL "http://www.dandelion.com/Linux/". The Linux DAC960
|
||||
driver supports all current Mylex PCI RAID controllers including the new
|
||||
eXtremeRAID 2000/3000 and AcceleRAID 352/170/160 models which have an entirely
|
||||
new firmware interface from the older eXtremeRAID 1100, AcceleRAID 150/200/250,
|
||||
and DAC960PJ/PG/PU/PD/PL. See below for a complete controller list as well as
|
||||
minimum firmware version requirements. For simplicity, in most places this
|
||||
documentation refers to DAC960 generically rather than explicitly listing all
|
||||
the supported models.
|
||||
|
||||
Driver bug reports should be sent via electronic mail to "lnz@dandelion.com".
|
||||
Please include with the bug report the complete configuration messages reported
|
||||
by the driver at startup, along with any subsequent system messages relevant to
|
||||
the controller's operation, and a detailed description of your system's
|
||||
hardware configuration. Driver bugs are actually quite rare; if you encounter
|
||||
problems with disks being marked offline, for example, please contact Mylex
|
||||
Technical Support as the problem is related to the hardware configuration
|
||||
rather than the Linux driver.
|
||||
|
||||
Please consult the RAID controller documentation for detailed information
|
||||
regarding installation and configuration of the controllers. This document
|
||||
primarily provides information specific to the Linux support.
|
||||
|
||||
|
||||
DRIVER FEATURES
|
||||
|
||||
The DAC960 RAID controllers are supported solely as high performance RAID
|
||||
controllers, not as interfaces to arbitrary SCSI devices. The Linux DAC960
|
||||
driver operates at the block device level, the same level as the SCSI and IDE
|
||||
drivers. Unlike other RAID controllers currently supported on Linux, the
|
||||
DAC960 driver is not dependent on the SCSI subsystem, and hence avoids all the
|
||||
complexity and unnecessary code that would be associated with an implementation
|
||||
as a SCSI driver. The DAC960 driver is designed for as high a performance as
|
||||
possible with no compromises or extra code for compatibility with lower
|
||||
performance devices. The DAC960 driver includes extensive error logging and
|
||||
online configuration management capabilities. Except for initial configuration
|
||||
of the controller and adding new disk drives, most everything can be handled
|
||||
from Linux while the system is operational.
|
||||
|
||||
The DAC960 driver is architected to support up to 8 controllers per system.
|
||||
Each DAC960 parallel SCSI controller can support up to 15 disk drives per
|
||||
channel, for a maximum of 60 drives on a four channel controller; the fibre
|
||||
channel eXtremeRAID 3000 controller supports up to 125 disk drives per loop for
|
||||
a total of 250 drives. The drives installed on a controller are divided into
|
||||
one or more "Drive Groups", and then each Drive Group is subdivided further
|
||||
into 1 to 32 "Logical Drives". Each Logical Drive has a specific RAID Level
|
||||
and caching policy associated with it, and it appears to Linux as a single
|
||||
block device. Logical Drives are further subdivided into up to 7 partitions
|
||||
through the normal Linux and PC disk partitioning schemes. Logical Drives are
|
||||
also known as "System Drives", and Drive Groups are also called "Packs". Both
|
||||
terms are in use in the Mylex documentation; I have chosen to standardize on
|
||||
the more generic "Logical Drive" and "Drive Group".
|
||||
|
||||
DAC960 RAID disk devices are named in the style of the obsolete Device File
|
||||
System (DEVFS). The device corresponding to Logical Drive D on Controller C
|
||||
is referred to as /dev/rd/cCdD, and the partitions are called /dev/rd/cCdDp1
|
||||
through /dev/rd/cCdDp7. For example, partition 3 of Logical Drive 5 on
|
||||
Controller 2 is referred to as /dev/rd/c2d5p3. Note that unlike with SCSI
|
||||
disks the device names will not change in the event of a disk drive failure.
|
||||
The DAC960 driver is assigned major numbers 48 - 55 with one major number per
|
||||
controller. The 8 bits of minor number are divided into 5 bits for the Logical
|
||||
Drive and 3 bits for the partition.
|
||||
|
||||
|
||||
SUPPORTED DAC960/AcceleRAID/eXtremeRAID PCI RAID CONTROLLERS
|
||||
|
||||
The following list comprises the supported DAC960, AcceleRAID, and eXtremeRAID
|
||||
PCI RAID Controllers as of the date of this document. It is recommended that
|
||||
anyone purchasing a Mylex PCI RAID Controller not in the following table
|
||||
contact the author beforehand to verify that it is or will be supported.
|
||||
|
||||
eXtremeRAID 3000
|
||||
1 Wide Ultra-2/LVD SCSI channel
|
||||
2 External Fibre FC-AL channels
|
||||
233MHz StrongARM SA 110 Processor
|
||||
64 Bit 33MHz PCI (backward compatible with 32 Bit PCI slots)
|
||||
32MB/64MB ECC SDRAM Memory
|
||||
|
||||
eXtremeRAID 2000
|
||||
4 Wide Ultra-160 LVD SCSI channels
|
||||
233MHz StrongARM SA 110 Processor
|
||||
64 Bit 33MHz PCI (backward compatible with 32 Bit PCI slots)
|
||||
32MB/64MB ECC SDRAM Memory
|
||||
|
||||
AcceleRAID 352
|
||||
2 Wide Ultra-160 LVD SCSI channels
|
||||
100MHz Intel i960RN RISC Processor
|
||||
64 Bit 33MHz PCI (backward compatible with 32 Bit PCI slots)
|
||||
32MB/64MB ECC SDRAM Memory
|
||||
|
||||
AcceleRAID 170
|
||||
1 Wide Ultra-160 LVD SCSI channel
|
||||
100MHz Intel i960RM RISC Processor
|
||||
16MB/32MB/64MB ECC SDRAM Memory
|
||||
|
||||
AcceleRAID 160 (AcceleRAID 170LP)
|
||||
1 Wide Ultra-160 LVD SCSI channel
|
||||
100MHz Intel i960RS RISC Processor
|
||||
Built in 16M ECC SDRAM Memory
|
||||
PCI Low Profile Form Factor - fit for 2U height
|
||||
|
||||
eXtremeRAID 1100 (DAC1164P)
|
||||
3 Wide Ultra-2/LVD SCSI channels
|
||||
233MHz StrongARM SA 110 Processor
|
||||
64 Bit 33MHz PCI (backward compatible with 32 Bit PCI slots)
|
||||
16MB/32MB/64MB Parity SDRAM Memory with Battery Backup
|
||||
|
||||
AcceleRAID 250 (DAC960PTL1)
|
||||
Uses onboard Symbios SCSI chips on certain motherboards
|
||||
Also includes one onboard Wide Ultra-2/LVD SCSI Channel
|
||||
66MHz Intel i960RD RISC Processor
|
||||
4MB/8MB/16MB/32MB/64MB/128MB ECC EDO Memory
|
||||
|
||||
AcceleRAID 200 (DAC960PTL0)
|
||||
Uses onboard Symbios SCSI chips on certain motherboards
|
||||
Includes no onboard SCSI Channels
|
||||
66MHz Intel i960RD RISC Processor
|
||||
4MB/8MB/16MB/32MB/64MB/128MB ECC EDO Memory
|
||||
|
||||
AcceleRAID 150 (DAC960PRL)
|
||||
Uses onboard Symbios SCSI chips on certain motherboards
|
||||
Also includes one onboard Wide Ultra-2/LVD SCSI Channel
|
||||
33MHz Intel i960RP RISC Processor
|
||||
4MB Parity EDO Memory
|
||||
|
||||
DAC960PJ 1/2/3 Wide Ultra SCSI-3 Channels
|
||||
66MHz Intel i960RD RISC Processor
|
||||
4MB/8MB/16MB/32MB/64MB/128MB ECC EDO Memory
|
||||
|
||||
DAC960PG 1/2/3 Wide Ultra SCSI-3 Channels
|
||||
33MHz Intel i960RP RISC Processor
|
||||
4MB/8MB ECC EDO Memory
|
||||
|
||||
DAC960PU 1/2/3 Wide Ultra SCSI-3 Channels
|
||||
Intel i960CF RISC Processor
|
||||
4MB/8MB EDRAM or 2MB/4MB/8MB/16MB/32MB DRAM Memory
|
||||
|
||||
DAC960PD 1/2/3 Wide Fast SCSI-2 Channels
|
||||
Intel i960CF RISC Processor
|
||||
4MB/8MB EDRAM or 2MB/4MB/8MB/16MB/32MB DRAM Memory
|
||||
|
||||
DAC960PL 1/2/3 Wide Fast SCSI-2 Channels
|
||||
Intel i960 RISC Processor
|
||||
2MB/4MB/8MB/16MB/32MB DRAM Memory
|
||||
|
||||
DAC960P 1/2/3 Wide Fast SCSI-2 Channels
|
||||
Intel i960 RISC Processor
|
||||
2MB/4MB/8MB/16MB/32MB DRAM Memory
|
||||
|
||||
For the eXtremeRAID 2000/3000 and AcceleRAID 352/170/160, firmware version
|
||||
6.00-01 or above is required.
|
||||
|
||||
For the eXtremeRAID 1100, firmware version 5.06-0-52 or above is required.
|
||||
|
||||
For the AcceleRAID 250, 200, and 150, firmware version 4.06-0-57 or above is
|
||||
required.
|
||||
|
||||
For the DAC960PJ and DAC960PG, firmware version 4.06-0-00 or above is required.
|
||||
|
||||
For the DAC960PU, DAC960PD, DAC960PL, and DAC960P, either firmware version
|
||||
3.51-0-04 or above is required (for dual Flash ROM controllers), or firmware
|
||||
version 2.73-0-00 or above is required (for single Flash ROM controllers)
|
||||
|
||||
Please note that not all SCSI disk drives are suitable for use with DAC960
|
||||
controllers, and only particular firmware versions of any given model may
|
||||
actually function correctly. Similarly, not all motherboards have a BIOS that
|
||||
properly initializes the AcceleRAID 250, AcceleRAID 200, AcceleRAID 150,
|
||||
DAC960PJ, and DAC960PG because the Intel i960RD/RP is a multi-function device.
|
||||
If in doubt, contact Mylex RAID Technical Support (mylexsup@us.ibm.com) to
|
||||
verify compatibility. Mylex makes available a hard disk compatibility list at
|
||||
http://www.mylex.com/support/hdcomp/hd-lists.html.
|
||||
|
||||
|
||||
DRIVER INSTALLATION
|
||||
|
||||
This distribution was prepared for Linux kernel version 2.2.19 or 2.4.12.
|
||||
|
||||
To install the DAC960 RAID driver, you may use the following commands,
|
||||
replacing "/usr/src" with wherever you keep your Linux kernel source tree:
|
||||
|
||||
cd /usr/src
|
||||
tar -xvzf DAC960-2.2.11.tar.gz (or DAC960-2.4.11.tar.gz)
|
||||
mv README.DAC960 linux/Documentation
|
||||
mv DAC960.[ch] linux/drivers/block
|
||||
patch -p0 < DAC960.patch (if DAC960.patch is included)
|
||||
cd linux
|
||||
make config
|
||||
make bzImage (or zImage)
|
||||
|
||||
Then install "arch/i386/boot/bzImage" or "arch/i386/boot/zImage" as your
|
||||
standard kernel, run lilo if appropriate, and reboot.
|
||||
|
||||
To create the necessary devices in /dev, the "make_rd" script included in
|
||||
"DAC960-Utilities.tar.gz" from http://www.dandelion.com/Linux/ may be used.
|
||||
LILO 21 and FDISK v2.9 include DAC960 support; also included in this archive
|
||||
are patches to LILO 20 and FDISK v2.8 that add DAC960 support, along with
|
||||
statically linked executables of LILO and FDISK. This modified version of LILO
|
||||
will allow booting from a DAC960 controller and/or mounting the root file
|
||||
system from a DAC960.
|
||||
|
||||
Red Hat Linux 6.0 and SuSE Linux 6.1 include support for Mylex PCI RAID
|
||||
controllers. Installing directly onto a DAC960 may be problematic from other
|
||||
Linux distributions until their installation utilities are updated.
|
||||
|
||||
|
||||
INSTALLATION NOTES
|
||||
|
||||
Before installing Linux or adding DAC960 logical drives to an existing Linux
|
||||
system, the controller must first be configured to provide one or more logical
|
||||
drives using the BIOS Configuration Utility or DACCF. Please note that since
|
||||
there are only at most 6 usable partitions on each logical drive, systems
|
||||
requiring more partitions should subdivide a drive group into multiple logical
|
||||
drives, each of which can have up to 6 usable partitions. Also, note that with
|
||||
large disk arrays it is advisable to enable the 8GB BIOS Geometry (255/63)
|
||||
rather than accepting the default 2GB BIOS Geometry (128/32); failing to so do
|
||||
will cause the logical drive geometry to have more than 65535 cylinders which
|
||||
will make it impossible for FDISK to be used properly. The 8GB BIOS Geometry
|
||||
can be enabled by configuring the DAC960 BIOS, which is accessible via Alt-M
|
||||
during the BIOS initialization sequence.
|
||||
|
||||
For maximum performance and the most efficient E2FSCK performance, it is
|
||||
recommended that EXT2 file systems be built with a 4KB block size and 16 block
|
||||
stride to match the DAC960 controller's 64KB default stripe size. The command
|
||||
"mke2fs -b 4096 -R stride=16 <device>" is appropriate. Unless there will be a
|
||||
large number of small files on the file systems, it is also beneficial to add
|
||||
the "-i 16384" option to increase the bytes per inode parameter thereby
|
||||
reducing the file system metadata. Finally, on systems that will only be run
|
||||
with Linux 2.2 or later kernels it is beneficial to enable sparse superblocks
|
||||
with the "-s 1" option.
|
||||
|
||||
|
||||
DAC960 ANNOUNCEMENTS MAILING LIST
|
||||
|
||||
The DAC960 Announcements Mailing List provides a forum for informing Linux
|
||||
users of new driver releases and other announcements regarding Linux support
|
||||
for DAC960 PCI RAID Controllers. To join the mailing list, send a message to
|
||||
"dac960-announce-request@dandelion.com" with the line "subscribe" in the
|
||||
message body.
|
||||
|
||||
|
||||
CONTROLLER CONFIGURATION AND STATUS MONITORING
|
||||
|
||||
The DAC960 RAID controllers running firmware 4.06 or above include a Background
|
||||
Initialization facility so that system downtime is minimized both for initial
|
||||
installation and subsequent configuration of additional storage. The BIOS
|
||||
Configuration Utility (accessible via Alt-R during the BIOS initialization
|
||||
sequence) is used to quickly configure the controller, and then the logical
|
||||
drives that have been created are available for immediate use even while they
|
||||
are still being initialized by the controller. The primary need for online
|
||||
configuration and status monitoring is then to avoid system downtime when disk
|
||||
drives fail and must be replaced. Mylex's online monitoring and configuration
|
||||
utilities are being ported to Linux and will become available at some point in
|
||||
the future. Note that with a SAF-TE (SCSI Accessed Fault-Tolerant Enclosure)
|
||||
enclosure, the controller is able to rebuild failed drives automatically as
|
||||
soon as a drive replacement is made available.
|
||||
|
||||
The primary interfaces for controller configuration and status monitoring are
|
||||
special files created in the /proc/rd/... hierarchy along with the normal
|
||||
system console logging mechanism. Whenever the system is operating, the DAC960
|
||||
driver queries each controller for status information every 10 seconds, and
|
||||
checks for additional conditions every 60 seconds. The initial status of each
|
||||
controller is always available for controller N in /proc/rd/cN/initial_status,
|
||||
and the current status as of the last status monitoring query is available in
|
||||
/proc/rd/cN/current_status. In addition, status changes are also logged by the
|
||||
driver to the system console and will appear in the log files maintained by
|
||||
syslog. The progress of asynchronous rebuild or consistency check operations
|
||||
is also available in /proc/rd/cN/current_status, and progress messages are
|
||||
logged to the system console at most every 60 seconds.
|
||||
|
||||
Starting with the 2.2.3/2.0.3 versions of the driver, the status information
|
||||
available in /proc/rd/cN/initial_status and /proc/rd/cN/current_status has been
|
||||
augmented to include the vendor, model, revision, and serial number (if
|
||||
available) for each physical device found connected to the controller:
|
||||
|
||||
***** DAC960 RAID Driver Version 2.2.3 of 19 August 1999 *****
|
||||
Copyright 1998-1999 by Leonard N. Zubkoff <lnz@dandelion.com>
|
||||
Configuring Mylex DAC960PRL PCI RAID Controller
|
||||
Firmware Version: 4.07-0-07, Channels: 1, Memory Size: 16MB
|
||||
PCI Bus: 1, Device: 4, Function: 1, I/O Address: Unassigned
|
||||
PCI Address: 0xFE300000 mapped at 0xA0800000, IRQ Channel: 21
|
||||
Controller Queue Depth: 128, Maximum Blocks per Command: 128
|
||||
Driver Queue Depth: 127, Maximum Scatter/Gather Segments: 33
|
||||
Stripe Size: 64KB, Segment Size: 8KB, BIOS Geometry: 255/63
|
||||
SAF-TE Enclosure Management Enabled
|
||||
Physical Devices:
|
||||
0:0 Vendor: IBM Model: DRVS09D Revision: 0270
|
||||
Serial Number: 68016775HA
|
||||
Disk Status: Online, 17928192 blocks
|
||||
0:1 Vendor: IBM Model: DRVS09D Revision: 0270
|
||||
Serial Number: 68004E53HA
|
||||
Disk Status: Online, 17928192 blocks
|
||||
0:2 Vendor: IBM Model: DRVS09D Revision: 0270
|
||||
Serial Number: 13013935HA
|
||||
Disk Status: Online, 17928192 blocks
|
||||
0:3 Vendor: IBM Model: DRVS09D Revision: 0270
|
||||
Serial Number: 13016897HA
|
||||
Disk Status: Online, 17928192 blocks
|
||||
0:4 Vendor: IBM Model: DRVS09D Revision: 0270
|
||||
Serial Number: 68019905HA
|
||||
Disk Status: Online, 17928192 blocks
|
||||
0:5 Vendor: IBM Model: DRVS09D Revision: 0270
|
||||
Serial Number: 68012753HA
|
||||
Disk Status: Online, 17928192 blocks
|
||||
0:6 Vendor: ESG-SHV Model: SCA HSBP M6 Revision: 0.61
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Online, 89640960 blocks, Write Thru
|
||||
No Rebuild or Consistency Check in Progress
|
||||
|
||||
To simplify the monitoring process for custom software, the special file
|
||||
/proc/rd/status returns "OK" when all DAC960 controllers in the system are
|
||||
operating normally and no failures have occurred, or "ALERT" if any logical
|
||||
drives are offline or critical or any non-standby physical drives are dead.
|
||||
|
||||
Configuration commands for controller N are available via the special file
|
||||
/proc/rd/cN/user_command. A human readable command can be written to this
|
||||
special file to initiate a configuration operation, and the results of the
|
||||
operation can then be read back from the special file in addition to being
|
||||
logged to the system console. The shell command sequence
|
||||
|
||||
echo "<configuration-command>" > /proc/rd/c0/user_command
|
||||
cat /proc/rd/c0/user_command
|
||||
|
||||
is typically used to execute configuration commands. The configuration
|
||||
commands are:
|
||||
|
||||
flush-cache
|
||||
|
||||
The "flush-cache" command flushes the controller's cache. The system
|
||||
automatically flushes the cache at shutdown or if the driver module is
|
||||
unloaded, so this command is only needed to be certain a write back cache
|
||||
is flushed to disk before the system is powered off by a command to a UPS.
|
||||
Note that the flush-cache command also stops an asynchronous rebuild or
|
||||
consistency check, so it should not be used except when the system is being
|
||||
halted.
|
||||
|
||||
kill <channel>:<target-id>
|
||||
|
||||
The "kill" command marks the physical drive <channel>:<target-id> as DEAD.
|
||||
This command is provided primarily for testing, and should not be used
|
||||
during normal system operation.
|
||||
|
||||
make-online <channel>:<target-id>
|
||||
|
||||
The "make-online" command changes the physical drive <channel>:<target-id>
|
||||
from status DEAD to status ONLINE. In cases where multiple physical drives
|
||||
have been killed simultaneously, this command may be used to bring all but
|
||||
one of them back online, after which a rebuild to the final drive is
|
||||
necessary.
|
||||
|
||||
Warning: make-online should only be used on a dead physical drive that is
|
||||
an active part of a drive group, never on a standby drive. The command
|
||||
should never be used on a dead drive that is part of a critical logical
|
||||
drive; rebuild should be used if only a single drive is dead.
|
||||
|
||||
make-standby <channel>:<target-id>
|
||||
|
||||
The "make-standby" command changes physical drive <channel>:<target-id>
|
||||
from status DEAD to status STANDBY. It should only be used in cases where
|
||||
a dead drive was replaced after an automatic rebuild was performed onto a
|
||||
standby drive. It cannot be used to add a standby drive to the controller
|
||||
configuration if one was not created initially; the BIOS Configuration
|
||||
Utility must be used for that currently.
|
||||
|
||||
rebuild <channel>:<target-id>
|
||||
|
||||
The "rebuild" command initiates an asynchronous rebuild onto physical drive
|
||||
<channel>:<target-id>. It should only be used when a dead drive has been
|
||||
replaced.
|
||||
|
||||
check-consistency <logical-drive-number>
|
||||
|
||||
The "check-consistency" command initiates an asynchronous consistency check
|
||||
of <logical-drive-number> with automatic restoration. It can be used
|
||||
whenever it is desired to verify the consistency of the redundancy
|
||||
information.
|
||||
|
||||
cancel-rebuild
|
||||
cancel-consistency-check
|
||||
|
||||
The "cancel-rebuild" and "cancel-consistency-check" commands cancel any
|
||||
rebuild or consistency check operations previously initiated.
|
||||
|
||||
|
||||
EXAMPLE I - DRIVE FAILURE WITHOUT A STANDBY DRIVE
|
||||
|
||||
The following annotated logs demonstrate the controller configuration and and
|
||||
online status monitoring capabilities of the Linux DAC960 Driver. The test
|
||||
configuration comprises 6 1GB Quantum Atlas I disk drives on two channels of a
|
||||
DAC960PJ controller. The physical drives are configured into a single drive
|
||||
group without a standby drive, and the drive group has been configured into two
|
||||
logical drives, one RAID-5 and one RAID-6. Note that these logs are from an
|
||||
earlier version of the driver and the messages have changed somewhat with newer
|
||||
releases, but the functionality remains similar. First, here is the current
|
||||
status of the RAID configuration:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
***** DAC960 RAID Driver Version 2.0.0 of 23 March 1999 *****
|
||||
Copyright 1998-1999 by Leonard N. Zubkoff <lnz@dandelion.com>
|
||||
Configuring Mylex DAC960PJ PCI RAID Controller
|
||||
Firmware Version: 4.06-0-08, Channels: 3, Memory Size: 8MB
|
||||
PCI Bus: 0, Device: 19, Function: 1, I/O Address: Unassigned
|
||||
PCI Address: 0xFD4FC000 mapped at 0x8807000, IRQ Channel: 9
|
||||
Controller Queue Depth: 128, Maximum Blocks per Command: 128
|
||||
Driver Queue Depth: 127, Maximum Scatter/Gather Segments: 33
|
||||
Stripe Size: 64KB, Segment Size: 8KB, BIOS Geometry: 255/63
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Online, 2201600 blocks
|
||||
1:2 - Disk: Online, 2201600 blocks
|
||||
1:3 - Disk: Online, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Online, 5498880 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Online, 3305472 blocks, Write Thru
|
||||
No Rebuild or Consistency Check in Progress
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/status
|
||||
OK
|
||||
|
||||
The above messages indicate that everything is healthy, and /proc/rd/status
|
||||
returns "OK" indicating that there are no problems with any DAC960 controller
|
||||
in the system. For demonstration purposes, while I/O is active Physical Drive
|
||||
1:1 is now disconnected, simulating a drive failure. The failure is noted by
|
||||
the driver within 10 seconds of the controller's having detected it, and the
|
||||
driver logs the following console status messages indicating that Logical
|
||||
Drives 0 and 1 are now CRITICAL as a result of Physical Drive 1:1 being DEAD:
|
||||
|
||||
DAC960#0: Physical Drive 1:2 Error Log: Sense Key = 6, ASC = 29, ASCQ = 02
|
||||
DAC960#0: Physical Drive 1:3 Error Log: Sense Key = 6, ASC = 29, ASCQ = 02
|
||||
DAC960#0: Physical Drive 1:1 killed because of timeout on SCSI command
|
||||
DAC960#0: Physical Drive 1:1 is now DEAD
|
||||
DAC960#0: Logical Drive 0 (/dev/rd/c0d0) is now CRITICAL
|
||||
DAC960#0: Logical Drive 1 (/dev/rd/c0d1) is now CRITICAL
|
||||
|
||||
The Sense Keys logged here are just Check Condition / Unit Attention conditions
|
||||
arising from a SCSI bus reset that is forced by the controller during its error
|
||||
recovery procedures. Concurrently with the above, the driver status available
|
||||
from /proc/rd also reflects the drive failure. The status message in
|
||||
/proc/rd/status has changed from "OK" to "ALERT":
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/status
|
||||
ALERT
|
||||
|
||||
and /proc/rd/c0/current_status has been updated:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
...
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Dead, 2201600 blocks
|
||||
1:2 - Disk: Online, 2201600 blocks
|
||||
1:3 - Disk: Online, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Critical, 5498880 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Critical, 3305472 blocks, Write Thru
|
||||
No Rebuild or Consistency Check in Progress
|
||||
|
||||
Since there are no standby drives configured, the system can continue to access
|
||||
the logical drives in a performance degraded mode until the failed drive is
|
||||
replaced and a rebuild operation completed to restore the redundancy of the
|
||||
logical drives. Once Physical Drive 1:1 is replaced with a properly
|
||||
functioning drive, or if the physical drive was killed without having failed
|
||||
(e.g., due to electrical problems on the SCSI bus), the user can instruct the
|
||||
controller to initiate a rebuild operation onto the newly replaced drive:
|
||||
|
||||
gwynedd:/u/lnz# echo "rebuild 1:1" > /proc/rd/c0/user_command
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/user_command
|
||||
Rebuild of Physical Drive 1:1 Initiated
|
||||
|
||||
The echo command instructs the controller to initiate an asynchronous rebuild
|
||||
operation onto Physical Drive 1:1, and the status message that results from the
|
||||
operation is then available for reading from /proc/rd/c0/user_command, as well
|
||||
as being logged to the console by the driver.
|
||||
|
||||
Within 10 seconds of this command the driver logs the initiation of the
|
||||
asynchronous rebuild operation:
|
||||
|
||||
DAC960#0: Rebuild of Physical Drive 1:1 Initiated
|
||||
DAC960#0: Physical Drive 1:1 Error Log: Sense Key = 6, ASC = 29, ASCQ = 01
|
||||
DAC960#0: Physical Drive 1:1 is now WRITE-ONLY
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 1% completed
|
||||
|
||||
and /proc/rd/c0/current_status is updated:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
...
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Write-Only, 2201600 blocks
|
||||
1:2 - Disk: Online, 2201600 blocks
|
||||
1:3 - Disk: Online, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Critical, 5498880 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Critical, 3305472 blocks, Write Thru
|
||||
Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 6% completed
|
||||
|
||||
As the rebuild progresses, the current status in /proc/rd/c0/current_status is
|
||||
updated every 10 seconds:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
...
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Write-Only, 2201600 blocks
|
||||
1:2 - Disk: Online, 2201600 blocks
|
||||
1:3 - Disk: Online, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Critical, 5498880 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Critical, 3305472 blocks, Write Thru
|
||||
Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 15% completed
|
||||
|
||||
and every minute a progress message is logged to the console by the driver:
|
||||
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 32% completed
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 63% completed
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 94% completed
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 1 (/dev/rd/c0d1) 94% completed
|
||||
|
||||
Finally, the rebuild completes successfully. The driver logs the status of the
|
||||
logical and physical drives and the rebuild completion:
|
||||
|
||||
DAC960#0: Rebuild Completed Successfully
|
||||
DAC960#0: Physical Drive 1:1 is now ONLINE
|
||||
DAC960#0: Logical Drive 0 (/dev/rd/c0d0) is now ONLINE
|
||||
DAC960#0: Logical Drive 1 (/dev/rd/c0d1) is now ONLINE
|
||||
|
||||
/proc/rd/c0/current_status is updated:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
...
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Online, 2201600 blocks
|
||||
1:2 - Disk: Online, 2201600 blocks
|
||||
1:3 - Disk: Online, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Online, 5498880 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Online, 3305472 blocks, Write Thru
|
||||
Rebuild Completed Successfully
|
||||
|
||||
and /proc/rd/status indicates that everything is healthy once again:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/status
|
||||
OK
|
||||
|
||||
|
||||
EXAMPLE II - DRIVE FAILURE WITH A STANDBY DRIVE
|
||||
|
||||
The following annotated logs demonstrate the controller configuration and and
|
||||
online status monitoring capabilities of the Linux DAC960 Driver. The test
|
||||
configuration comprises 6 1GB Quantum Atlas I disk drives on two channels of a
|
||||
DAC960PJ controller. The physical drives are configured into a single drive
|
||||
group with a standby drive, and the drive group has been configured into two
|
||||
logical drives, one RAID-5 and one RAID-6. Note that these logs are from an
|
||||
earlier version of the driver and the messages have changed somewhat with newer
|
||||
releases, but the functionality remains similar. First, here is the current
|
||||
status of the RAID configuration:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
***** DAC960 RAID Driver Version 2.0.0 of 23 March 1999 *****
|
||||
Copyright 1998-1999 by Leonard N. Zubkoff <lnz@dandelion.com>
|
||||
Configuring Mylex DAC960PJ PCI RAID Controller
|
||||
Firmware Version: 4.06-0-08, Channels: 3, Memory Size: 8MB
|
||||
PCI Bus: 0, Device: 19, Function: 1, I/O Address: Unassigned
|
||||
PCI Address: 0xFD4FC000 mapped at 0x8807000, IRQ Channel: 9
|
||||
Controller Queue Depth: 128, Maximum Blocks per Command: 128
|
||||
Driver Queue Depth: 127, Maximum Scatter/Gather Segments: 33
|
||||
Stripe Size: 64KB, Segment Size: 8KB, BIOS Geometry: 255/63
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Online, 2201600 blocks
|
||||
1:2 - Disk: Online, 2201600 blocks
|
||||
1:3 - Disk: Standby, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Online, 4399104 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Online, 2754560 blocks, Write Thru
|
||||
No Rebuild or Consistency Check in Progress
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/status
|
||||
OK
|
||||
|
||||
The above messages indicate that everything is healthy, and /proc/rd/status
|
||||
returns "OK" indicating that there are no problems with any DAC960 controller
|
||||
in the system. For demonstration purposes, while I/O is active Physical Drive
|
||||
1:2 is now disconnected, simulating a drive failure. The failure is noted by
|
||||
the driver within 10 seconds of the controller's having detected it, and the
|
||||
driver logs the following console status messages:
|
||||
|
||||
DAC960#0: Physical Drive 1:1 Error Log: Sense Key = 6, ASC = 29, ASCQ = 02
|
||||
DAC960#0: Physical Drive 1:3 Error Log: Sense Key = 6, ASC = 29, ASCQ = 02
|
||||
DAC960#0: Physical Drive 1:2 killed because of timeout on SCSI command
|
||||
DAC960#0: Physical Drive 1:2 is now DEAD
|
||||
DAC960#0: Physical Drive 1:2 killed because it was removed
|
||||
DAC960#0: Logical Drive 0 (/dev/rd/c0d0) is now CRITICAL
|
||||
DAC960#0: Logical Drive 1 (/dev/rd/c0d1) is now CRITICAL
|
||||
|
||||
Since a standby drive is configured, the controller automatically begins
|
||||
rebuilding onto the standby drive:
|
||||
|
||||
DAC960#0: Physical Drive 1:3 is now WRITE-ONLY
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 4% completed
|
||||
|
||||
Concurrently with the above, the driver status available from /proc/rd also
|
||||
reflects the drive failure and automatic rebuild. The status message in
|
||||
/proc/rd/status has changed from "OK" to "ALERT":
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/status
|
||||
ALERT
|
||||
|
||||
and /proc/rd/c0/current_status has been updated:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
...
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Online, 2201600 blocks
|
||||
1:2 - Disk: Dead, 2201600 blocks
|
||||
1:3 - Disk: Write-Only, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Critical, 4399104 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Critical, 2754560 blocks, Write Thru
|
||||
Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 4% completed
|
||||
|
||||
As the rebuild progresses, the current status in /proc/rd/c0/current_status is
|
||||
updated every 10 seconds:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
...
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Online, 2201600 blocks
|
||||
1:2 - Disk: Dead, 2201600 blocks
|
||||
1:3 - Disk: Write-Only, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Critical, 4399104 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Critical, 2754560 blocks, Write Thru
|
||||
Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 40% completed
|
||||
|
||||
and every minute a progress message is logged on the console by the driver:
|
||||
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 40% completed
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 0 (/dev/rd/c0d0) 76% completed
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 1 (/dev/rd/c0d1) 66% completed
|
||||
DAC960#0: Rebuild in Progress: Logical Drive 1 (/dev/rd/c0d1) 84% completed
|
||||
|
||||
Finally, the rebuild completes successfully. The driver logs the status of the
|
||||
logical and physical drives and the rebuild completion:
|
||||
|
||||
DAC960#0: Rebuild Completed Successfully
|
||||
DAC960#0: Physical Drive 1:3 is now ONLINE
|
||||
DAC960#0: Logical Drive 0 (/dev/rd/c0d0) is now ONLINE
|
||||
DAC960#0: Logical Drive 1 (/dev/rd/c0d1) is now ONLINE
|
||||
|
||||
/proc/rd/c0/current_status is updated:
|
||||
|
||||
***** DAC960 RAID Driver Version 2.0.0 of 23 March 1999 *****
|
||||
Copyright 1998-1999 by Leonard N. Zubkoff <lnz@dandelion.com>
|
||||
Configuring Mylex DAC960PJ PCI RAID Controller
|
||||
Firmware Version: 4.06-0-08, Channels: 3, Memory Size: 8MB
|
||||
PCI Bus: 0, Device: 19, Function: 1, I/O Address: Unassigned
|
||||
PCI Address: 0xFD4FC000 mapped at 0x8807000, IRQ Channel: 9
|
||||
Controller Queue Depth: 128, Maximum Blocks per Command: 128
|
||||
Driver Queue Depth: 127, Maximum Scatter/Gather Segments: 33
|
||||
Stripe Size: 64KB, Segment Size: 8KB, BIOS Geometry: 255/63
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Online, 2201600 blocks
|
||||
1:2 - Disk: Dead, 2201600 blocks
|
||||
1:3 - Disk: Online, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Online, 4399104 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Online, 2754560 blocks, Write Thru
|
||||
Rebuild Completed Successfully
|
||||
|
||||
and /proc/rd/status indicates that everything is healthy once again:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/status
|
||||
OK
|
||||
|
||||
Note that the absence of a viable standby drive does not create an "ALERT"
|
||||
status. Once dead Physical Drive 1:2 has been replaced, the controller must be
|
||||
told that this has occurred and that the newly replaced drive should become the
|
||||
new standby drive:
|
||||
|
||||
gwynedd:/u/lnz# echo "make-standby 1:2" > /proc/rd/c0/user_command
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/user_command
|
||||
Make Standby of Physical Drive 1:2 Succeeded
|
||||
|
||||
The echo command instructs the controller to make Physical Drive 1:2 into a
|
||||
standby drive, and the status message that results from the operation is then
|
||||
available for reading from /proc/rd/c0/user_command, as well as being logged to
|
||||
the console by the driver. Within 60 seconds of this command the driver logs:
|
||||
|
||||
DAC960#0: Physical Drive 1:2 Error Log: Sense Key = 6, ASC = 29, ASCQ = 01
|
||||
DAC960#0: Physical Drive 1:2 is now STANDBY
|
||||
DAC960#0: Make Standby of Physical Drive 1:2 Succeeded
|
||||
|
||||
and /proc/rd/c0/current_status is updated:
|
||||
|
||||
gwynedd:/u/lnz# cat /proc/rd/c0/current_status
|
||||
...
|
||||
Physical Devices:
|
||||
0:1 - Disk: Online, 2201600 blocks
|
||||
0:2 - Disk: Online, 2201600 blocks
|
||||
0:3 - Disk: Online, 2201600 blocks
|
||||
1:1 - Disk: Online, 2201600 blocks
|
||||
1:2 - Disk: Standby, 2201600 blocks
|
||||
1:3 - Disk: Online, 2201600 blocks
|
||||
Logical Drives:
|
||||
/dev/rd/c0d0: RAID-5, Online, 4399104 blocks, Write Thru
|
||||
/dev/rd/c0d1: RAID-6, Online, 2754560 blocks, Write Thru
|
||||
Rebuild Completed Successfully
|
171
Documentation/blockdev/cciss.txt
Normal file
171
Documentation/blockdev/cciss.txt
Normal file
@@ -0,0 +1,171 @@
|
||||
This driver is for Compaq's SMART Array Controllers.
|
||||
|
||||
Supported Cards:
|
||||
----------------
|
||||
|
||||
This driver is known to work with the following cards:
|
||||
|
||||
* SA 5300
|
||||
* SA 5i
|
||||
* SA 532
|
||||
* SA 5312
|
||||
* SA 641
|
||||
* SA 642
|
||||
* SA 6400
|
||||
* SA 6400 U320 Expansion Module
|
||||
* SA 6i
|
||||
* SA P600
|
||||
* SA P800
|
||||
* SA E400
|
||||
* SA P400i
|
||||
* SA E200
|
||||
* SA E200i
|
||||
* SA E500
|
||||
* SA P700m
|
||||
* SA P212
|
||||
* SA P410
|
||||
* SA P410i
|
||||
* SA P411
|
||||
* SA P812
|
||||
* SA P712m
|
||||
* SA P711m
|
||||
|
||||
Detecting drive failures:
|
||||
-------------------------
|
||||
|
||||
To get the status of logical volumes and to detect physical drive
|
||||
failures, you can use the cciss_vol_status program found here:
|
||||
http://cciss.sourceforge.net/#cciss_utils
|
||||
|
||||
Device Naming:
|
||||
--------------
|
||||
|
||||
If nodes are not already created in the /dev/cciss directory, run as root:
|
||||
|
||||
# cd /dev
|
||||
# ./MAKEDEV cciss
|
||||
|
||||
You need some entries in /dev for the cciss device. The MAKEDEV script
|
||||
can make device nodes for you automatically. Currently the device setup
|
||||
is as follows:
|
||||
|
||||
Major numbers:
|
||||
104 cciss0
|
||||
105 cciss1
|
||||
106 cciss2
|
||||
105 cciss3
|
||||
108 cciss4
|
||||
109 cciss5
|
||||
110 cciss6
|
||||
111 cciss7
|
||||
|
||||
Minor numbers:
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
|----+----| |----+----|
|
||||
| |
|
||||
| +-------- Partition ID (0=wholedev, 1-15 partition)
|
||||
|
|
||||
+-------------------- Logical Volume number
|
||||
|
||||
The device naming scheme is:
|
||||
/dev/cciss/c0d0 Controller 0, disk 0, whole device
|
||||
/dev/cciss/c0d0p1 Controller 0, disk 0, partition 1
|
||||
/dev/cciss/c0d0p2 Controller 0, disk 0, partition 2
|
||||
/dev/cciss/c0d0p3 Controller 0, disk 0, partition 3
|
||||
|
||||
/dev/cciss/c1d1 Controller 1, disk 1, whole device
|
||||
/dev/cciss/c1d1p1 Controller 1, disk 1, partition 1
|
||||
/dev/cciss/c1d1p2 Controller 1, disk 1, partition 2
|
||||
/dev/cciss/c1d1p3 Controller 1, disk 1, partition 3
|
||||
|
||||
SCSI tape drive and medium changer support
|
||||
------------------------------------------
|
||||
|
||||
SCSI sequential access devices and medium changer devices are supported and
|
||||
appropriate device nodes are automatically created. (e.g.
|
||||
/dev/st0, /dev/st1, etc. See the "st" man page for more details.)
|
||||
You must enable "SCSI tape drive support for Smart Array 5xxx" and
|
||||
"SCSI support" in your kernel configuration to be able to use SCSI
|
||||
tape drives with your Smart Array 5xxx controller.
|
||||
|
||||
Additionally, note that the driver will not engage the SCSI core at init
|
||||
time. The driver must be directed to dynamically engage the SCSI core via
|
||||
the /proc filesystem entry which the "block" side of the driver creates as
|
||||
/proc/driver/cciss/cciss* at runtime. This is because at driver init time,
|
||||
the SCSI core may not yet be initialized (because the driver is a block
|
||||
driver) and attempting to register it with the SCSI core in such a case
|
||||
would cause a hang. This is best done via an initialization script
|
||||
(typically in /etc/init.d, but could vary depending on distribution).
|
||||
For example:
|
||||
|
||||
for x in /proc/driver/cciss/cciss[0-9]*
|
||||
do
|
||||
echo "engage scsi" > $x
|
||||
done
|
||||
|
||||
Once the SCSI core is engaged by the driver, it cannot be disengaged
|
||||
(except by unloading the driver, if it happens to be linked as a module.)
|
||||
|
||||
Note also that if no sequential access devices or medium changers are
|
||||
detected, the SCSI core will not be engaged by the action of the above
|
||||
script.
|
||||
|
||||
Hot plug support for SCSI tape drives
|
||||
-------------------------------------
|
||||
|
||||
Hot plugging of SCSI tape drives is supported, with some caveats.
|
||||
The cciss driver must be informed that changes to the SCSI bus
|
||||
have been made. This may be done via the /proc filesystem.
|
||||
For example:
|
||||
|
||||
echo "rescan" > /proc/scsi/cciss0/1
|
||||
|
||||
This causes the driver to query the adapter about changes to the
|
||||
physical SCSI buses and/or fibre channel arbitrated loop and the
|
||||
driver to make note of any new or removed sequential access devices
|
||||
or medium changers. The driver will output messages indicating what
|
||||
devices have been added or removed and the controller, bus, target and
|
||||
lun used to address the device. It then notifies the SCSI mid layer
|
||||
of these changes.
|
||||
|
||||
Note that the naming convention of the /proc filesystem entries
|
||||
contains a number in addition to the driver name. (E.g. "cciss0"
|
||||
instead of just "cciss" which you might expect.)
|
||||
|
||||
Note: ONLY sequential access devices and medium changers are presented
|
||||
as SCSI devices to the SCSI mid layer by the cciss driver. Specifically,
|
||||
physical SCSI disk drives are NOT presented to the SCSI mid layer. The
|
||||
physical SCSI disk drives are controlled directly by the array controller
|
||||
hardware and it is important to prevent the kernel from attempting to directly
|
||||
access these devices too, as if the array controller were merely a SCSI
|
||||
controller in the same way that we are allowing it to access SCSI tape drives.
|
||||
|
||||
SCSI error handling for tape drives and medium changers
|
||||
-------------------------------------------------------
|
||||
|
||||
The linux SCSI mid layer provides an error handling protocol which
|
||||
kicks into gear whenever a SCSI command fails to complete within a
|
||||
certain amount of time (which can vary depending on the command).
|
||||
The cciss driver participates in this protocol to some extent. The
|
||||
normal protocol is a four step process. First the device is told
|
||||
to abort the command. If that doesn't work, the device is reset.
|
||||
If that doesn't work, the SCSI bus is reset. If that doesn't work
|
||||
the host bus adapter is reset. Because the cciss driver is a block
|
||||
driver as well as a SCSI driver and only the tape drives and medium
|
||||
changers are presented to the SCSI mid layer, and unlike more
|
||||
straightforward SCSI drivers, disk i/o continues through the block
|
||||
side during the SCSI error recovery process, the cciss driver only
|
||||
implements the first two of these actions, aborting the command, and
|
||||
resetting the device. Additionally, most tape drives will not oblige
|
||||
in aborting commands, and sometimes it appears they will not even
|
||||
obey a reset command, though in most circumstances they will. In
|
||||
the case that the command cannot be aborted and the device cannot be
|
||||
reset, the device will be set offline.
|
||||
|
||||
In the event the error handling code is triggered and a tape drive is
|
||||
successfully reset or the tardy command is successfully aborted, the
|
||||
tape drive may still not allow i/o to continue until some command
|
||||
is issued which positions the tape to a known position. Typically you
|
||||
must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example)
|
||||
before i/o can proceed again to a tape drive which was reset.
|
||||
|
93
Documentation/blockdev/cpqarray.txt
Normal file
93
Documentation/blockdev/cpqarray.txt
Normal file
@@ -0,0 +1,93 @@
|
||||
This driver is for Compaq's SMART2 Intelligent Disk Array Controllers.
|
||||
|
||||
Supported Cards:
|
||||
----------------
|
||||
|
||||
This driver is known to work with the following cards:
|
||||
|
||||
* SMART (EISA)
|
||||
* SMART-2/E (EISA)
|
||||
* SMART-2/P
|
||||
* SMART-2DH
|
||||
* SMART-2SL
|
||||
* SMART-221
|
||||
* SMART-3100ES
|
||||
* SMART-3200
|
||||
* Integrated Smart Array Controller
|
||||
* SA 4200
|
||||
* SA 4250ES
|
||||
* SA 431
|
||||
* RAID LC2 Controller
|
||||
|
||||
It should also work with some really old Disk array adapters, but I am
|
||||
unable to test against these cards:
|
||||
|
||||
* IDA
|
||||
* IDA-2
|
||||
* IAES
|
||||
|
||||
|
||||
EISA Controllers:
|
||||
-----------------
|
||||
|
||||
If you want to use an EISA controller you'll have to supply some
|
||||
modprobe/lilo parameters. If the driver is compiled into the kernel, must
|
||||
give it the controller's IO port address at boot time (it is not
|
||||
necessary to specify the IRQ). For example, if you had two SMART-2/E
|
||||
controllers, in EISA slots 1 and 2 you'd give it a boot argument like
|
||||
this:
|
||||
|
||||
smart2=0x1000,0x2000
|
||||
|
||||
If you were loading the driver as a module, you'd give load it like this:
|
||||
|
||||
modprobe cpqarray eisa=0x1000,0x2000
|
||||
|
||||
You can use EISA and PCI adapters at the same time.
|
||||
|
||||
|
||||
Device Naming:
|
||||
--------------
|
||||
|
||||
You need some entries in /dev for the ida device. MAKEDEV in the /dev
|
||||
directory can make device nodes for you automatically. The device setup is
|
||||
as follows:
|
||||
|
||||
Major numbers:
|
||||
72 ida0
|
||||
73 ida1
|
||||
74 ida2
|
||||
75 ida3
|
||||
76 ida4
|
||||
77 ida5
|
||||
78 ida6
|
||||
79 ida7
|
||||
|
||||
Minor numbers:
|
||||
b7 b6 b5 b4 b3 b2 b1 b0
|
||||
|----+----| |----+----|
|
||||
| |
|
||||
| +-------- Partition ID (0=wholedev, 1-15 partition)
|
||||
|
|
||||
+-------------------- Logical Volume number
|
||||
|
||||
The device naming scheme is:
|
||||
/dev/ida/c0d0 Controller 0, disk 0, whole device
|
||||
/dev/ida/c0d0p1 Controller 0, disk 0, partition 1
|
||||
/dev/ida/c0d0p2 Controller 0, disk 0, partition 2
|
||||
/dev/ida/c0d0p3 Controller 0, disk 0, partition 3
|
||||
|
||||
/dev/ida/c1d1 Controller 1, disk 1, whole device
|
||||
/dev/ida/c1d1p1 Controller 1, disk 1, partition 1
|
||||
/dev/ida/c1d1p2 Controller 1, disk 1, partition 2
|
||||
/dev/ida/c1d1p3 Controller 1, disk 1, partition 3
|
||||
|
||||
|
||||
Changelog:
|
||||
==========
|
||||
|
||||
10-28-2004 : General cleanup, syntax fixes for in-kernel driver version.
|
||||
James Nelson <james4765@gmail.com>
|
||||
|
||||
|
||||
1999 : Original Document
|
245
Documentation/blockdev/floppy.txt
Normal file
245
Documentation/blockdev/floppy.txt
Normal file
@@ -0,0 +1,245 @@
|
||||
This file describes the floppy driver.
|
||||
|
||||
FAQ list:
|
||||
=========
|
||||
|
||||
A FAQ list may be found in the fdutils package (see below), and also
|
||||
at <http://fdutils.linux.lu/faq.html>.
|
||||
|
||||
|
||||
LILO configuration options (Thinkpad users, read this)
|
||||
======================================================
|
||||
|
||||
The floppy driver is configured using the 'floppy=' option in
|
||||
lilo. This option can be typed at the boot prompt, or entered in the
|
||||
lilo configuration file.
|
||||
|
||||
Example: If your kernel is called linux-2.6.9, type the following line
|
||||
at the lilo boot prompt (if you have a thinkpad):
|
||||
|
||||
linux-2.6.9 floppy=thinkpad
|
||||
|
||||
You may also enter the following line in /etc/lilo.conf, in the description
|
||||
of linux-2.6.9:
|
||||
|
||||
append = "floppy=thinkpad"
|
||||
|
||||
Several floppy related options may be given, example:
|
||||
|
||||
linux-2.6.9 floppy=daring floppy=two_fdc
|
||||
append = "floppy=daring floppy=two_fdc"
|
||||
|
||||
If you give options both in the lilo config file and on the boot
|
||||
prompt, the option strings of both places are concatenated, the boot
|
||||
prompt options coming last. That's why there are also options to
|
||||
restore the default behavior.
|
||||
|
||||
|
||||
Module configuration options
|
||||
============================
|
||||
|
||||
If you use the floppy driver as a module, use the following syntax:
|
||||
modprobe floppy <options>
|
||||
|
||||
Example:
|
||||
modprobe floppy omnibook messages
|
||||
|
||||
If you need certain options enabled every time you load the floppy driver,
|
||||
you can put:
|
||||
|
||||
options floppy omnibook messages
|
||||
|
||||
in /etc/modprobe.conf.
|
||||
|
||||
|
||||
The floppy driver related options are:
|
||||
|
||||
floppy=asus_pci
|
||||
Sets the bit mask to allow only units 0 and 1. (default)
|
||||
|
||||
floppy=daring
|
||||
Tells the floppy driver that you have a well behaved floppy controller.
|
||||
This allows more efficient and smoother operation, but may fail on
|
||||
certain controllers. This may speed up certain operations.
|
||||
|
||||
floppy=0,daring
|
||||
Tells the floppy driver that your floppy controller should be used
|
||||
with caution.
|
||||
|
||||
floppy=one_fdc
|
||||
Tells the floppy driver that you have only one floppy controller.
|
||||
(default)
|
||||
|
||||
floppy=two_fdc
|
||||
floppy=<address>,two_fdc
|
||||
Tells the floppy driver that you have two floppy controllers.
|
||||
The second floppy controller is assumed to be at <address>.
|
||||
This option is not needed if the second controller is at address
|
||||
0x370, and if you use the 'cmos' option.
|
||||
|
||||
floppy=thinkpad
|
||||
Tells the floppy driver that you have a Thinkpad. Thinkpads use an
|
||||
inverted convention for the disk change line.
|
||||
|
||||
floppy=0,thinkpad
|
||||
Tells the floppy driver that you don't have a Thinkpad.
|
||||
|
||||
floppy=omnibook
|
||||
floppy=nodma
|
||||
Tells the floppy driver not to use Dma for data transfers.
|
||||
This is needed on HP Omnibooks, which don't have a workable
|
||||
DMA channel for the floppy driver. This option is also useful
|
||||
if you frequently get "Unable to allocate DMA memory" messages.
|
||||
Indeed, dma memory needs to be continuous in physical memory,
|
||||
and is thus harder to find, whereas non-dma buffers may be
|
||||
allocated in virtual memory. However, I advise against this if
|
||||
you have an FDC without a FIFO (8272A or 82072). 82072A and
|
||||
later are OK. You also need at least a 486 to use nodma.
|
||||
If you use nodma mode, I suggest you also set the FIFO
|
||||
threshold to 10 or lower, in order to limit the number of data
|
||||
transfer interrupts.
|
||||
|
||||
If you have a FIFO-able FDC, the floppy driver automatically
|
||||
falls back on non DMA mode if no DMA-able memory can be found.
|
||||
If you want to avoid this, explicitly ask for 'yesdma'.
|
||||
|
||||
floppy=yesdma
|
||||
Tells the floppy driver that a workable DMA channel is available.
|
||||
(default)
|
||||
|
||||
floppy=nofifo
|
||||
Disables the FIFO entirely. This is needed if you get "Bus
|
||||
master arbitration error" messages from your Ethernet card (or
|
||||
from other devices) while accessing the floppy.
|
||||
|
||||
floppy=usefifo
|
||||
Enables the FIFO. (default)
|
||||
|
||||
floppy=<threshold>,fifo_depth
|
||||
Sets the FIFO threshold. This is mostly relevant in DMA
|
||||
mode. If this is higher, the floppy driver tolerates more
|
||||
interrupt latency, but it triggers more interrupts (i.e. it
|
||||
imposes more load on the rest of the system). If this is
|
||||
lower, the interrupt latency should be lower too (faster
|
||||
processor). The benefit of a lower threshold is less
|
||||
interrupts.
|
||||
|
||||
To tune the fifo threshold, switch on over/underrun messages
|
||||
using 'floppycontrol --messages'. Then access a floppy
|
||||
disk. If you get a huge amount of "Over/Underrun - retrying"
|
||||
messages, then the fifo threshold is too low. Try with a
|
||||
higher value, until you only get an occasional Over/Underrun.
|
||||
It is a good idea to compile the floppy driver as a module
|
||||
when doing this tuning. Indeed, it allows to try different
|
||||
fifo values without rebooting the machine for each test. Note
|
||||
that you need to do 'floppycontrol --messages' every time you
|
||||
re-insert the module.
|
||||
|
||||
Usually, tuning the fifo threshold should not be needed, as
|
||||
the default (0xa) is reasonable.
|
||||
|
||||
floppy=<drive>,<type>,cmos
|
||||
Sets the CMOS type of <drive> to <type>. This is mandatory if
|
||||
you have more than two floppy drives (only two can be
|
||||
described in the physical CMOS), or if your BIOS uses
|
||||
non-standard CMOS types. The CMOS types are:
|
||||
|
||||
0 - Use the value of the physical CMOS
|
||||
1 - 5 1/4 DD
|
||||
2 - 5 1/4 HD
|
||||
3 - 3 1/2 DD
|
||||
4 - 3 1/2 HD
|
||||
5 - 3 1/2 ED
|
||||
6 - 3 1/2 ED
|
||||
16 - unknown or not installed
|
||||
|
||||
(Note: there are two valid types for ED drives. This is because 5 was
|
||||
initially chosen to represent floppy *tapes*, and 6 for ED drives.
|
||||
AMI ignored this, and used 5 for ED drives. That's why the floppy
|
||||
driver handles both.)
|
||||
|
||||
floppy=unexpected_interrupts
|
||||
Print a warning message when an unexpected interrupt is received.
|
||||
(default)
|
||||
|
||||
floppy=no_unexpected_interrupts
|
||||
floppy=L40SX
|
||||
Don't print a message when an unexpected interrupt is received. This
|
||||
is needed on IBM L40SX laptops in certain video modes. (There seems
|
||||
to be an interaction between video and floppy. The unexpected
|
||||
interrupts affect only performance, and can be safely ignored.)
|
||||
|
||||
floppy=broken_dcl
|
||||
Don't use the disk change line, but assume that the disk was
|
||||
changed whenever the device node is reopened. Needed on some
|
||||
boxes where the disk change line is broken or unsupported.
|
||||
This should be regarded as a stopgap measure, indeed it makes
|
||||
floppy operation less efficient due to unneeded cache
|
||||
flushings, and slightly more unreliable. Please verify your
|
||||
cable, connection and jumper settings if you have any DCL
|
||||
problems. However, some older drives, and also some laptops
|
||||
are known not to have a DCL.
|
||||
|
||||
floppy=debug
|
||||
Print debugging messages.
|
||||
|
||||
floppy=messages
|
||||
Print informational messages for some operations (disk change
|
||||
notifications, warnings about over and underruns, and about
|
||||
autodetection).
|
||||
|
||||
floppy=silent_dcl_clear
|
||||
Uses a less noisy way to clear the disk change line (which
|
||||
doesn't involve seeks). Implied by 'daring' option.
|
||||
|
||||
floppy=<nr>,irq
|
||||
Sets the floppy IRQ to <nr> instead of 6.
|
||||
|
||||
floppy=<nr>,dma
|
||||
Sets the floppy DMA channel to <nr> instead of 2.
|
||||
|
||||
floppy=slow
|
||||
Use PS/2 stepping rate:
|
||||
" PS/2 floppies have much slower step rates than regular floppies.
|
||||
It's been recommended that take about 1/4 of the default speed
|
||||
in some more extreme cases."
|
||||
|
||||
|
||||
Supporting utilities and additional documentation:
|
||||
==================================================
|
||||
|
||||
Additional parameters of the floppy driver can be configured at
|
||||
runtime. Utilities which do this can be found in the fdutils package.
|
||||
This package also contains a new version of mtools which allows to
|
||||
access high capacity disks (up to 1992K on a high density 3 1/2 disk!).
|
||||
It also contains additional documentation about the floppy driver.
|
||||
|
||||
The latest version can be found at fdutils homepage:
|
||||
http://fdutils.linux.lu
|
||||
|
||||
The fdutils releases can be found at:
|
||||
http://fdutils.linux.lu/download.html
|
||||
http://www.tux.org/pub/knaff/fdutils/
|
||||
ftp://metalab.unc.edu/pub/Linux/utils/disk-management/
|
||||
|
||||
Reporting problems about the floppy driver
|
||||
==========================================
|
||||
|
||||
If you have a question or a bug report about the floppy driver, mail
|
||||
me at Alain.Knaff@poboxes.com . If you post to Usenet, preferably use
|
||||
comp.os.linux.hardware. As the volume in these groups is rather high,
|
||||
be sure to include the word "floppy" (or "FLOPPY") in the subject
|
||||
line. If the reported problem happens when mounting floppy disks, be
|
||||
sure to mention also the type of the filesystem in the subject line.
|
||||
|
||||
Be sure to read the FAQ before mailing/posting any bug reports!
|
||||
|
||||
Alain
|
||||
|
||||
Changelog
|
||||
=========
|
||||
|
||||
10-30-2004 : Cleanup, updating, add reference to module configuration.
|
||||
James Nelson <james4765@gmail.com>
|
||||
|
||||
6-3-2000 : Original Document
|
47
Documentation/blockdev/nbd.txt
Normal file
47
Documentation/blockdev/nbd.txt
Normal file
@@ -0,0 +1,47 @@
|
||||
Network Block Device (TCP version)
|
||||
|
||||
What is it: With this compiled in the kernel (or as a module), Linux
|
||||
can use a remote server as one of its block devices. So every time
|
||||
the client computer wants to read, e.g., /dev/nb0, it sends a
|
||||
request over TCP to the server, which will reply with the data read.
|
||||
This can be used for stations with low disk space (or even diskless -
|
||||
if you boot from floppy) to borrow disk space from another computer.
|
||||
Unlike NFS, it is possible to put any filesystem on it, etc. It should
|
||||
even be possible to use NBD as a root filesystem (I've never tried),
|
||||
but it requires a user-level program to be in the initrd to start.
|
||||
It also allows you to run block-device in user land (making server
|
||||
and client physically the same computer, communicating using loopback).
|
||||
|
||||
Current state: It currently works. Network block device is stable.
|
||||
I originally thought that it was impossible to swap over TCP. It
|
||||
turned out not to be true - swapping over TCP now works and seems
|
||||
to be deadlock-free, but it requires heavy patches into Linux's
|
||||
network layer.
|
||||
|
||||
For more information, or to download the nbd-client and nbd-server
|
||||
tools, go to http://nbd.sf.net/.
|
||||
|
||||
Howto: To setup nbd, you can simply do the following:
|
||||
|
||||
First, serve a device or file from a remote server:
|
||||
|
||||
nbd-server <port-number> <device-or-file-to-serve-to-client>
|
||||
|
||||
e.g.,
|
||||
root@server1 # nbd-server 1234 /dev/sdb1
|
||||
|
||||
(serves sdb1 partition on TCP port 1234)
|
||||
|
||||
Then, on the local (client) system:
|
||||
|
||||
nbd-client <server-name-or-IP> <server-port-number> /dev/nb[0-n]
|
||||
|
||||
e.g.,
|
||||
root@client1 # nbd-client server1 1234 /dev/nb0
|
||||
|
||||
(creates the nb0 device on client1)
|
||||
|
||||
The nbd kernel module need only be installed on the client
|
||||
system, as the nbd-server is completely in userspace. In fact,
|
||||
the nbd-server has been successfully ported to other operating
|
||||
systems, including Windows.
|
417
Documentation/blockdev/paride.txt
Normal file
417
Documentation/blockdev/paride.txt
Normal file
@@ -0,0 +1,417 @@
|
||||
|
||||
Linux and parallel port IDE devices
|
||||
|
||||
PARIDE v1.03 (c) 1997-8 Grant Guenther <grant@torque.net>
|
||||
|
||||
1. Introduction
|
||||
|
||||
Owing to the simplicity and near universality of the parallel port interface
|
||||
to personal computers, many external devices such as portable hard-disk,
|
||||
CD-ROM, LS-120 and tape drives use the parallel port to connect to their
|
||||
host computer. While some devices (notably scanners) use ad-hoc methods
|
||||
to pass commands and data through the parallel port interface, most
|
||||
external devices are actually identical to an internal model, but with
|
||||
a parallel-port adapter chip added in. Some of the original parallel port
|
||||
adapters were little more than mechanisms for multiplexing a SCSI bus.
|
||||
(The Iomega PPA-3 adapter used in the ZIP drives is an example of this
|
||||
approach). Most current designs, however, take a different approach.
|
||||
The adapter chip reproduces a small ISA or IDE bus in the external device
|
||||
and the communication protocol provides operations for reading and writing
|
||||
device registers, as well as data block transfer functions. Sometimes,
|
||||
the device being addressed via the parallel cable is a standard SCSI
|
||||
controller like an NCR 5380. The "ditto" family of external tape
|
||||
drives use the ISA replicator to interface a floppy disk controller,
|
||||
which is then connected to a floppy-tape mechanism. The vast majority
|
||||
of external parallel port devices, however, are now based on standard
|
||||
IDE type devices, which require no intermediate controller. If one
|
||||
were to open up a parallel port CD-ROM drive, for instance, one would
|
||||
find a standard ATAPI CD-ROM drive, a power supply, and a single adapter
|
||||
that interconnected a standard PC parallel port cable and a standard
|
||||
IDE cable. It is usually possible to exchange the CD-ROM device with
|
||||
any other device using the IDE interface.
|
||||
|
||||
The document describes the support in Linux for parallel port IDE
|
||||
devices. It does not cover parallel port SCSI devices, "ditto" tape
|
||||
drives or scanners. Many different devices are supported by the
|
||||
parallel port IDE subsystem, including:
|
||||
|
||||
MicroSolutions backpack CD-ROM
|
||||
MicroSolutions backpack PD/CD
|
||||
MicroSolutions backpack hard-drives
|
||||
MicroSolutions backpack 8000t tape drive
|
||||
SyQuest EZ-135, EZ-230 & SparQ drives
|
||||
Avatar Shark
|
||||
Imation Superdisk LS-120
|
||||
Maxell Superdisk LS-120
|
||||
FreeCom Power CD
|
||||
Hewlett-Packard 5GB and 8GB tape drives
|
||||
Hewlett-Packard 7100 and 7200 CD-RW drives
|
||||
|
||||
as well as most of the clone and no-name products on the market.
|
||||
|
||||
To support such a wide range of devices, PARIDE, the parallel port IDE
|
||||
subsystem, is actually structured in three parts. There is a base
|
||||
paride module which provides a registry and some common methods for
|
||||
accessing the parallel ports. The second component is a set of
|
||||
high-level drivers for each of the different types of supported devices:
|
||||
|
||||
pd IDE disk
|
||||
pcd ATAPI CD-ROM
|
||||
pf ATAPI disk
|
||||
pt ATAPI tape
|
||||
pg ATAPI generic
|
||||
|
||||
(Currently, the pg driver is only used with CD-R drives).
|
||||
|
||||
The high-level drivers function according to the relevant standards.
|
||||
The third component of PARIDE is a set of low-level protocol drivers
|
||||
for each of the parallel port IDE adapter chips. Thanks to the interest
|
||||
and encouragement of Linux users from many parts of the world,
|
||||
support is available for almost all known adapter protocols:
|
||||
|
||||
aten ATEN EH-100 (HK)
|
||||
bpck Microsolutions backpack (US)
|
||||
comm DataStor (old-type) "commuter" adapter (TW)
|
||||
dstr DataStor EP-2000 (TW)
|
||||
epat Shuttle EPAT (UK)
|
||||
epia Shuttle EPIA (UK)
|
||||
fit2 FIT TD-2000 (US)
|
||||
fit3 FIT TD-3000 (US)
|
||||
friq Freecom IQ cable (DE)
|
||||
frpw Freecom Power (DE)
|
||||
kbic KingByte KBIC-951A and KBIC-971A (TW)
|
||||
ktti KT Technology PHd adapter (SG)
|
||||
on20 OnSpec 90c20 (US)
|
||||
on26 OnSpec 90c26 (US)
|
||||
|
||||
|
||||
2. Using the PARIDE subsystem
|
||||
|
||||
While configuring the Linux kernel, you may choose either to build
|
||||
the PARIDE drivers into your kernel, or to build them as modules.
|
||||
|
||||
In either case, you will need to select "Parallel port IDE device support"
|
||||
as well as at least one of the high-level drivers and at least one
|
||||
of the parallel port communication protocols. If you do not know
|
||||
what kind of parallel port adapter is used in your drive, you could
|
||||
begin by checking the file names and any text files on your DOS
|
||||
installation floppy. Alternatively, you can look at the markings on
|
||||
the adapter chip itself. That's usually sufficient to identify the
|
||||
correct device.
|
||||
|
||||
You can actually select all the protocol modules, and allow the PARIDE
|
||||
subsystem to try them all for you.
|
||||
|
||||
For the "brand-name" products listed above, here are the protocol
|
||||
and high-level drivers that you would use:
|
||||
|
||||
Manufacturer Model Driver Protocol
|
||||
|
||||
MicroSolutions CD-ROM pcd bpck
|
||||
MicroSolutions PD drive pf bpck
|
||||
MicroSolutions hard-drive pd bpck
|
||||
MicroSolutions 8000t tape pt bpck
|
||||
SyQuest EZ, SparQ pd epat
|
||||
Imation Superdisk pf epat
|
||||
Maxell Superdisk pf friq
|
||||
Avatar Shark pd epat
|
||||
FreeCom CD-ROM pcd frpw
|
||||
Hewlett-Packard 5GB Tape pt epat
|
||||
Hewlett-Packard 7200e (CD) pcd epat
|
||||
Hewlett-Packard 7200e (CD-R) pg epat
|
||||
|
||||
2.1 Configuring built-in drivers
|
||||
|
||||
We recommend that you get to know how the drivers work and how to
|
||||
configure them as loadable modules, before attempting to compile a
|
||||
kernel with the drivers built-in.
|
||||
|
||||
If you built all of your PARIDE support directly into your kernel,
|
||||
and you have just a single parallel port IDE device, your kernel should
|
||||
locate it automatically for you. If you have more than one device,
|
||||
you may need to give some command line options to your bootloader
|
||||
(eg: LILO), how to do that is beyond the scope of this document.
|
||||
|
||||
The high-level drivers accept a number of command line parameters, all
|
||||
of which are documented in the source files in linux/drivers/block/paride.
|
||||
By default, each driver will automatically try all parallel ports it
|
||||
can find, and all protocol types that have been installed, until it finds
|
||||
a parallel port IDE adapter. Once it finds one, the probe stops. So,
|
||||
if you have more than one device, you will need to tell the drivers
|
||||
how to identify them. This requires specifying the port address, the
|
||||
protocol identification number and, for some devices, the drive's
|
||||
chain ID. While your system is booting, a number of messages are
|
||||
displayed on the console. Like all such messages, they can be
|
||||
reviewed with the 'dmesg' command. Among those messages will be
|
||||
some lines like:
|
||||
|
||||
paride: bpck registered as protocol 0
|
||||
paride: epat registered as protocol 1
|
||||
|
||||
The numbers will always be the same until you build a new kernel with
|
||||
different protocol selections. You should note these numbers as you
|
||||
will need them to identify the devices.
|
||||
|
||||
If you happen to be using a MicroSolutions backpack device, you will
|
||||
also need to know the unit ID number for each drive. This is usually
|
||||
the last two digits of the drive's serial number (but read MicroSolutions'
|
||||
documentation about this).
|
||||
|
||||
As an example, let's assume that you have a MicroSolutions PD/CD drive
|
||||
with unit ID number 36 connected to the parallel port at 0x378, a SyQuest
|
||||
EZ-135 connected to the chained port on the PD/CD drive and also an
|
||||
Imation Superdisk connected to port 0x278. You could give the following
|
||||
options on your boot command:
|
||||
|
||||
pd.drive0=0x378,1 pf.drive0=0x278,1 pf.drive1=0x378,0,36
|
||||
|
||||
In the last option, pf.drive1 configures device /dev/pf1, the 0x378
|
||||
is the parallel port base address, the 0 is the protocol registration
|
||||
number and 36 is the chain ID.
|
||||
|
||||
Please note: while PARIDE will work both with and without the
|
||||
PARPORT parallel port sharing system that is included by the
|
||||
"Parallel port support" option, PARPORT must be included and enabled
|
||||
if you want to use chains of devices on the same parallel port.
|
||||
|
||||
2.2 Loading and configuring PARIDE as modules
|
||||
|
||||
It is much faster and simpler to get to understand the PARIDE drivers
|
||||
if you use them as loadable kernel modules.
|
||||
|
||||
Note 1: using these drivers with the "kerneld" automatic module loading
|
||||
system is not recommended for beginners, and is not documented here.
|
||||
|
||||
Note 2: if you build PARPORT support as a loadable module, PARIDE must
|
||||
also be built as loadable modules, and PARPORT must be loaded before the
|
||||
PARIDE modules.
|
||||
|
||||
To use PARIDE, you must begin by
|
||||
|
||||
insmod paride
|
||||
|
||||
this loads a base module which provides a registry for the protocols,
|
||||
among other tasks.
|
||||
|
||||
Then, load as many of the protocol modules as you think you might need.
|
||||
As you load each module, it will register the protocols that it supports,
|
||||
and print a log message to your kernel log file and your console. For
|
||||
example:
|
||||
|
||||
# insmod epat
|
||||
paride: epat registered as protocol 0
|
||||
# insmod kbic
|
||||
paride: k951 registered as protocol 1
|
||||
paride: k971 registered as protocol 2
|
||||
|
||||
Finally, you can load high-level drivers for each kind of device that
|
||||
you have connected. By default, each driver will autoprobe for a single
|
||||
device, but you can support up to four similar devices by giving their
|
||||
individual co-ordinates when you load the driver.
|
||||
|
||||
For example, if you had two no-name CD-ROM drives both using the
|
||||
KingByte KBIC-951A adapter, one on port 0x378 and the other on 0x3bc
|
||||
you could give the following command:
|
||||
|
||||
# insmod pcd drive0=0x378,1 drive1=0x3bc,1
|
||||
|
||||
For most adapters, giving a port address and protocol number is sufficient,
|
||||
but check the source files in linux/drivers/block/paride for more
|
||||
information. (Hopefully someone will write some man pages one day !).
|
||||
|
||||
As another example, here's what happens when PARPORT is installed, and
|
||||
a SyQuest EZ-135 is attached to port 0x378:
|
||||
|
||||
# insmod paride
|
||||
paride: version 1.0 installed
|
||||
# insmod epat
|
||||
paride: epat registered as protocol 0
|
||||
# insmod pd
|
||||
pd: pd version 1.0, major 45, cluster 64, nice 0
|
||||
pda: Sharing parport1 at 0x378
|
||||
pda: epat 1.0, Shuttle EPAT chip c3 at 0x378, mode 5 (EPP-32), delay 1
|
||||
pda: SyQuest EZ135A, 262144 blocks [128M], (512/16/32), removable media
|
||||
pda: pda1
|
||||
|
||||
Note that the last line is the output from the generic partition table
|
||||
scanner - in this case it reports that it has found a disk with one partition.
|
||||
|
||||
2.3 Using a PARIDE device
|
||||
|
||||
Once the drivers have been loaded, you can access PARIDE devices in the
|
||||
same way as their traditional counterparts. You will probably need to
|
||||
create the device "special files". Here is a simple script that you can
|
||||
cut to a file and execute:
|
||||
|
||||
#!/bin/bash
|
||||
#
|
||||
# mkd -- a script to create the device special files for the PARIDE subsystem
|
||||
#
|
||||
function mkdev {
|
||||
mknod $1 $2 $3 $4 ; chmod 0660 $1 ; chown root:disk $1
|
||||
}
|
||||
#
|
||||
function pd {
|
||||
D=$( printf \\$( printf "x%03x" $[ $1 + 97 ] ) )
|
||||
mkdev pd$D b 45 $[ $1 * 16 ]
|
||||
for P in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
do mkdev pd$D$P b 45 $[ $1 * 16 + $P ]
|
||||
done
|
||||
}
|
||||
#
|
||||
cd /dev
|
||||
#
|
||||
for u in 0 1 2 3 ; do pd $u ; done
|
||||
for u in 0 1 2 3 ; do mkdev pcd$u b 46 $u ; done
|
||||
for u in 0 1 2 3 ; do mkdev pf$u b 47 $u ; done
|
||||
for u in 0 1 2 3 ; do mkdev pt$u c 96 $u ; done
|
||||
for u in 0 1 2 3 ; do mkdev npt$u c 96 $[ $u + 128 ] ; done
|
||||
for u in 0 1 2 3 ; do mkdev pg$u c 97 $u ; done
|
||||
#
|
||||
# end of mkd
|
||||
|
||||
With the device files and drivers in place, you can access PARIDE devices
|
||||
like any other Linux device. For example, to mount a CD-ROM in pcd0, use:
|
||||
|
||||
mount /dev/pcd0 /cdrom
|
||||
|
||||
If you have a fresh Avatar Shark cartridge, and the drive is pda, you
|
||||
might do something like:
|
||||
|
||||
fdisk /dev/pda -- make a new partition table with
|
||||
partition 1 of type 83
|
||||
|
||||
mke2fs /dev/pda1 -- to build the file system
|
||||
|
||||
mkdir /shark -- make a place to mount the disk
|
||||
|
||||
mount /dev/pda1 /shark
|
||||
|
||||
Devices like the Imation superdisk work in the same way, except that
|
||||
they do not have a partition table. For example to make a 120MB
|
||||
floppy that you could share with a DOS system:
|
||||
|
||||
mkdosfs /dev/pf0
|
||||
mount /dev/pf0 /mnt
|
||||
|
||||
|
||||
2.4 The pf driver
|
||||
|
||||
The pf driver is intended for use with parallel port ATAPI disk
|
||||
devices. The most common devices in this category are PD drives
|
||||
and LS-120 drives. Traditionally, media for these devices are not
|
||||
partitioned. Consequently, the pf driver does not support partitioned
|
||||
media. This may be changed in a future version of the driver.
|
||||
|
||||
2.5 Using the pt driver
|
||||
|
||||
The pt driver for parallel port ATAPI tape drives is a minimal driver.
|
||||
It does not yet support many of the standard tape ioctl operations.
|
||||
For best performance, a block size of 32KB should be used. You will
|
||||
probably want to set the parallel port delay to 0, if you can.
|
||||
|
||||
2.6 Using the pg driver
|
||||
|
||||
The pg driver can be used in conjunction with the cdrecord program
|
||||
to create CD-ROMs. Please get cdrecord version 1.6.1 or later
|
||||
from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ . To record CD-R media
|
||||
your parallel port should ideally be set to EPP mode, and the "port delay"
|
||||
should be set to 0. With those settings it is possible to record at 2x
|
||||
speed without any buffer underruns. If you cannot get the driver to work
|
||||
in EPP mode, try to use "bidirectional" or "PS/2" mode and 1x speeds only.
|
||||
|
||||
|
||||
3. Troubleshooting
|
||||
|
||||
3.1 Use EPP mode if you can
|
||||
|
||||
The most common problems that people report with the PARIDE drivers
|
||||
concern the parallel port CMOS settings. At this time, none of the
|
||||
PARIDE protocol modules support ECP mode, or any ECP combination modes.
|
||||
If you are able to do so, please set your parallel port into EPP mode
|
||||
using your CMOS setup procedure.
|
||||
|
||||
3.2 Check the port delay
|
||||
|
||||
Some parallel ports cannot reliably transfer data at full speed. To
|
||||
offset the errors, the PARIDE protocol modules introduce a "port
|
||||
delay" between each access to the i/o ports. Each protocol sets
|
||||
a default value for this delay. In most cases, the user can override
|
||||
the default and set it to 0 - resulting in somewhat higher transfer
|
||||
rates. In some rare cases (especially with older 486 systems) the
|
||||
default delays are not long enough. if you experience corrupt data
|
||||
transfers, or unexpected failures, you may wish to increase the
|
||||
port delay. The delay can be programmed using the "driveN" parameters
|
||||
to each of the high-level drivers. Please see the notes above, or
|
||||
read the comments at the beginning of the driver source files in
|
||||
linux/drivers/block/paride.
|
||||
|
||||
3.3 Some drives need a printer reset
|
||||
|
||||
There appear to be a number of "noname" external drives on the market
|
||||
that do not always power up correctly. We have noticed this with some
|
||||
drives based on OnSpec and older Freecom adapters. In these rare cases,
|
||||
the adapter can often be reinitialised by issuing a "printer reset" on
|
||||
the parallel port. As the reset operation is potentially disruptive in
|
||||
multiple device environments, the PARIDE drivers will not do it
|
||||
automatically. You can however, force a printer reset by doing:
|
||||
|
||||
insmod lp reset=1
|
||||
rmmod lp
|
||||
|
||||
If you have one of these marginal cases, you should probably build
|
||||
your paride drivers as modules, and arrange to do the printer reset
|
||||
before loading the PARIDE drivers.
|
||||
|
||||
3.4 Use the verbose option and dmesg if you need help
|
||||
|
||||
While a lot of testing has gone into these drivers to make them work
|
||||
as smoothly as possible, problems will arise. If you do have problems,
|
||||
please check all the obvious things first: does the drive work in
|
||||
DOS with the manufacturer's drivers ? If that doesn't yield any useful
|
||||
clues, then please make sure that only one drive is hooked to your system,
|
||||
and that either (a) PARPORT is enabled or (b) no other device driver
|
||||
is using your parallel port (check in /proc/ioports). Then, load the
|
||||
appropriate drivers (you can load several protocol modules if you want)
|
||||
as in:
|
||||
|
||||
# insmod paride
|
||||
# insmod epat
|
||||
# insmod bpck
|
||||
# insmod kbic
|
||||
...
|
||||
# insmod pd verbose=1
|
||||
|
||||
(using the correct driver for the type of device you have, of course).
|
||||
The verbose=1 parameter will cause the drivers to log a trace of their
|
||||
activity as they attempt to locate your drive.
|
||||
|
||||
Use 'dmesg' to capture a log of all the PARIDE messages (any messages
|
||||
beginning with paride:, a protocol module's name or a driver's name) and
|
||||
include that with your bug report. You can submit a bug report in one
|
||||
of two ways. Either send it directly to the author of the PARIDE suite,
|
||||
by e-mail to grant@torque.net, or join the linux-parport mailing list
|
||||
and post your report there.
|
||||
|
||||
3.5 For more information or help
|
||||
|
||||
You can join the linux-parport mailing list by sending a mail message
|
||||
to
|
||||
linux-parport-request@torque.net
|
||||
|
||||
with the single word
|
||||
|
||||
subscribe
|
||||
|
||||
in the body of the mail message (not in the subject line). Please be
|
||||
sure that your mail program is correctly set up when you do this, as
|
||||
the list manager is a robot that will subscribe you using the reply
|
||||
address in your mail headers. REMOVE any anti-spam gimmicks you may
|
||||
have in your mail headers, when sending mail to the list server.
|
||||
|
||||
You might also find some useful information on the linux-parport
|
||||
web pages (although they are not always up to date) at
|
||||
|
||||
http://www.torque.net/parport/
|
||||
|
||||
|
165
Documentation/blockdev/ramdisk.txt
Normal file
165
Documentation/blockdev/ramdisk.txt
Normal file
@@ -0,0 +1,165 @@
|
||||
Using the RAM disk block device with Linux
|
||||
------------------------------------------
|
||||
|
||||
Contents:
|
||||
|
||||
1) Overview
|
||||
2) Kernel Command Line Parameters
|
||||
3) Using "rdev -r"
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
|
||||
|
||||
1) Overview
|
||||
-----------
|
||||
|
||||
The RAM disk driver is a way to use main system memory as a block device. It
|
||||
is required for initrd, an initial filesystem used if you need to load modules
|
||||
in order to access the root filesystem (see Documentation/initrd.txt). It can
|
||||
also be used for a temporary filesystem for crypto work, since the contents
|
||||
are erased on reboot.
|
||||
|
||||
The RAM disk dynamically grows as more space is required. It does this by using
|
||||
RAM from the buffer cache. The driver marks the buffers it is using as dirty
|
||||
so that the VM subsystem does not try to reclaim them later.
|
||||
|
||||
The RAM disk supports up to 16 RAM disks by default, and can be reconfigured
|
||||
to support an unlimited number of RAM disks (at your own risk). Just change
|
||||
the configuration symbol BLK_DEV_RAM_COUNT in the Block drivers config menu
|
||||
and (re)build the kernel.
|
||||
|
||||
To use RAM disk support with your system, run './MAKEDEV ram' from the /dev
|
||||
directory. RAM disks are all major number 1, and start with minor number 0
|
||||
for /dev/ram0, etc. If used, modern kernels use /dev/ram0 for an initrd.
|
||||
|
||||
The new RAM disk also has the ability to load compressed RAM disk images,
|
||||
allowing one to squeeze more programs onto an average installation or
|
||||
rescue floppy disk.
|
||||
|
||||
|
||||
2) Kernel Command Line Parameters
|
||||
---------------------------------
|
||||
|
||||
ramdisk_size=N
|
||||
==============
|
||||
|
||||
This parameter tells the RAM disk driver to set up RAM disks of N k size. The
|
||||
default is 4096 (4 MB) (8192 (8 MB) on S390).
|
||||
|
||||
ramdisk_blocksize=N
|
||||
===================
|
||||
|
||||
This parameter tells the RAM disk driver how many bytes to use per block. The
|
||||
default is 1024 (BLOCK_SIZE).
|
||||
|
||||
|
||||
3) Using "rdev -r"
|
||||
------------------
|
||||
|
||||
The usage of the word (two bytes) that "rdev -r" sets in the kernel image is
|
||||
as follows. The low 11 bits (0 -> 10) specify an offset (in 1 k blocks) of up
|
||||
to 2 MB (2^11) of where to find the RAM disk (this used to be the size). Bit
|
||||
14 indicates that a RAM disk is to be loaded, and bit 15 indicates whether a
|
||||
prompt/wait sequence is to be given before trying to read the RAM disk. Since
|
||||
the RAM disk dynamically grows as data is being written into it, a size field
|
||||
is not required. Bits 11 to 13 are not currently used and may as well be zero.
|
||||
These numbers are no magical secrets, as seen below:
|
||||
|
||||
./arch/i386/kernel/setup.c:#define RAMDISK_IMAGE_START_MASK 0x07FF
|
||||
./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000
|
||||
./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000
|
||||
|
||||
Consider a typical two floppy disk setup, where you will have the
|
||||
kernel on disk one, and have already put a RAM disk image onto disk #2.
|
||||
|
||||
Hence you want to set bits 0 to 13 as 0, meaning that your RAM disk
|
||||
starts at an offset of 0 kB from the beginning of the floppy.
|
||||
The command line equivalent is: "ramdisk_start=0"
|
||||
|
||||
You want bit 14 as one, indicating that a RAM disk is to be loaded.
|
||||
The command line equivalent is: "load_ramdisk=1"
|
||||
|
||||
You want bit 15 as one, indicating that you want a prompt/keypress
|
||||
sequence so that you have a chance to switch floppy disks.
|
||||
The command line equivalent is: "prompt_ramdisk=1"
|
||||
|
||||
Putting that together gives 2^15 + 2^14 + 0 = 49152 for an rdev word.
|
||||
So to create disk one of the set, you would do:
|
||||
|
||||
/usr/src/linux# cat arch/i386/boot/zImage > /dev/fd0
|
||||
/usr/src/linux# rdev /dev/fd0 /dev/fd0
|
||||
/usr/src/linux# rdev -r /dev/fd0 49152
|
||||
|
||||
If you make a boot disk that has LILO, then for the above, you would use:
|
||||
append = "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1"
|
||||
Since the default start = 0 and the default prompt = 1, you could use:
|
||||
append = "load_ramdisk=1"
|
||||
|
||||
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
----------------------------------------------
|
||||
|
||||
To create a RAM disk image, you will need a spare block device to
|
||||
construct it on. This can be the RAM disk device itself, or an
|
||||
unused disk partition (such as an unmounted swap partition). For this
|
||||
example, we will use the RAM disk device, "/dev/ram0".
|
||||
|
||||
Note: This technique should not be done on a machine with less than 8 MB
|
||||
of RAM. If using a spare disk partition instead of /dev/ram0, then this
|
||||
restriction does not apply.
|
||||
|
||||
a) Decide on the RAM disk size that you want. Say 2 MB for this example.
|
||||
Create it by writing to the RAM disk device. (This step is not currently
|
||||
required, but may be in the future.) It is wise to zero out the
|
||||
area (esp. for disks) so that maximal compression is achieved for
|
||||
the unused blocks of the image that you are about to create.
|
||||
|
||||
dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
|
||||
|
||||
b) Make a filesystem on it. Say ext2fs for this example.
|
||||
|
||||
mke2fs -vm0 /dev/ram0 2048
|
||||
|
||||
c) Mount it, copy the files you want to it (eg: /etc/* /dev/* ...)
|
||||
and unmount it again.
|
||||
|
||||
d) Compress the contents of the RAM disk. The level of compression
|
||||
will be approximately 50% of the space used by the files. Unused
|
||||
space on the RAM disk will compress to almost nothing.
|
||||
|
||||
dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz
|
||||
|
||||
e) Put the kernel onto the floppy
|
||||
|
||||
dd if=zImage of=/dev/fd0 bs=1k
|
||||
|
||||
f) Put the RAM disk image onto the floppy, after the kernel. Use an offset
|
||||
that is slightly larger than the kernel, so that you can put another
|
||||
(possibly larger) kernel onto the same floppy later without overlapping
|
||||
the RAM disk image. An offset of 400 kB for kernels about 350 kB in
|
||||
size would be reasonable. Make sure offset+size of ram_image.gz is
|
||||
not larger than the total space on your floppy (usually 1440 kB).
|
||||
|
||||
dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400
|
||||
|
||||
g) Use "rdev" to set the boot device, RAM disk offset, prompt flag, etc.
|
||||
For prompt_ramdisk=1, load_ramdisk=1, ramdisk_start=400, one would
|
||||
have 2^15 + 2^14 + 400 = 49552.
|
||||
|
||||
rdev /dev/fd0 /dev/fd0
|
||||
rdev -r /dev/fd0 49552
|
||||
|
||||
That is it. You now have your boot/root compressed RAM disk floppy. Some
|
||||
users may wish to combine steps (d) and (f) by using a pipe.
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
Paul Gortmaker 12/95
|
||||
|
||||
Changelog:
|
||||
----------
|
||||
|
||||
10-22-04 : Updated to reflect changes in command line options, remove
|
||||
obsolete references, general cleanup.
|
||||
James Nelson (james4765@gmail.com)
|
||||
|
||||
|
||||
12-95 : Original Document
|
Reference in New Issue
Block a user