1 |
1275 |
phoenix |
ide.txt -- Information regarding the Enhanced IDE drive in Linux 2.2/2.3/2.4
|
2 |
|
|
===============================================================================
|
3 |
|
|
|
4 |
|
|
+-----------------------------------------------------------------+
|
5 |
|
|
| The hdparm utility for controlling various IDE features is |
|
6 |
|
|
| packaged separately. Look for it on popular linux FTP sites. |
|
7 |
|
|
+-----------------------------------------------------------------+
|
8 |
|
|
|
9 |
|
|
See description later on below for handling BIG IDE drives with >1024 cyls.
|
10 |
|
|
|
11 |
|
|
Major features of the 2.1/2.2 IDE driver ("NEW!" marks changes since 2.0.xx):
|
12 |
|
|
|
13 |
|
|
NEW! - support for IDE ATAPI *floppy* drives
|
14 |
|
|
- support for IDE ATAPI *tape* drives, courtesy of Gadi Oxman
|
15 |
|
|
(re-run MAKEDEV.ide to create the tape device entries in /dev/)
|
16 |
|
|
- support for up to *four* IDE interfaces on one or more IRQs
|
17 |
|
|
- support for any mix of up to *eight* IDE drives
|
18 |
|
|
- support for reading IDE ATAPI cdrom drives (NEC,MITSUMI,VERTOS,SONY)
|
19 |
|
|
- support for audio functions
|
20 |
|
|
- auto-detection of interfaces, drives, IRQs, and disk geometries
|
21 |
|
|
- "single" drives should be jumpered as "master", not "slave"
|
22 |
|
|
(both are now probed for)
|
23 |
|
|
- support for BIOSs which report "more than 16 heads" on disk drives
|
24 |
|
|
- uses LBA (slightly faster) on disk drives which support it
|
25 |
|
|
- support for lots of fancy (E)IDE drive functions with hdparm utility
|
26 |
|
|
- optional (compile time) support for 32-bit VLB data transfers
|
27 |
|
|
- support for IDE multiple (block) mode (same as hd.c)
|
28 |
|
|
- support for interrupt unmasking during I/O (better than hd.c)
|
29 |
|
|
- improved handshaking and error detection/recovery
|
30 |
|
|
- can co-exist with hd.c controlling the first interface
|
31 |
|
|
- run-time selectable 32bit interface support (using hdparm-2.3)
|
32 |
|
|
- support for reliable operation of buggy RZ1000 interfaces
|
33 |
|
|
- PCI support is automatic when rz1000 support is configured
|
34 |
|
|
- support for reliable operation of buggy CMD-640 interfaces
|
35 |
|
|
- PCI support is automatic when cmd640 support is configured
|
36 |
|
|
- for VLB, use kernel command line option: ide0=cmd640_vlb
|
37 |
|
|
- this support also enables the secondary i/f when needed
|
38 |
|
|
- interface PIO timing & prefetch parameter support
|
39 |
|
|
- experimental support for UMC 8672 interfaces
|
40 |
|
|
- support for secondary interface on the FGI/Holtek HT-6560B VLB i/f
|
41 |
|
|
- use kernel command line option: ide0=ht6560b
|
42 |
|
|
- experimental support for various IDE chipsets
|
43 |
|
|
- use appropriate kernel command line option from list below
|
44 |
|
|
- support for drives with a stuck WRERR_STAT bit
|
45 |
|
|
- support for removable devices, including door lock/unlock
|
46 |
|
|
- transparent support for DiskManager 6.0x and "Dynamic Disk Overlay"
|
47 |
|
|
- works with Linux fdisk, LILO, loadlin, bootln, etc..
|
48 |
|
|
- mostly transparent support for EZ-Drive disk translation software
|
49 |
|
|
- to use LILO with EZ, install LILO on the linux partition
|
50 |
|
|
rather than on the master boot record, and then mark the
|
51 |
|
|
linux partition as "bootable" or "active" using fdisk.
|
52 |
|
|
(courtesy of Juha Laiho ).
|
53 |
|
|
- auto-detect of disk translations by examining partition table
|
54 |
|
|
- ide-cd.c now compiles separate from ide.c
|
55 |
|
|
- ide-cd.c now supports door locking and auto-loading.
|
56 |
|
|
- Also preliminary support for multisession
|
57 |
|
|
and direct reads of audio data.
|
58 |
|
|
- experimental support for Promise DC4030VL caching interface card
|
59 |
|
|
- email thanks/problems to: peterd@pnd-pc.demon.co.uk
|
60 |
|
|
- the hdparm-3.1 package can be used to set PIO modes for some chipsets.
|
61 |
|
|
NEW! - support for setting PIO modes with the OPTi 82C621, courtesy of Jaromir Koutek.
|
62 |
|
|
NEW! - support for loadable modules
|
63 |
|
|
NEW! - optional SCSI host adapter emulation for ATAPI devices
|
64 |
|
|
NEW! - generic PCI Bus-Master DMA support
|
65 |
|
|
NEW! - works with most Pentium PCI systems, chipsets, add-on cards
|
66 |
|
|
NEW! - works with regular DMA as well as Ultra DMA
|
67 |
|
|
NEW! - automatically probes for all PCI IDE interfaces
|
68 |
|
|
NEW! - generic support for using BIOS-configured Ultra-DMA (UDMA) transfers
|
69 |
|
|
|
70 |
|
|
|
71 |
|
|
*** IMPORTANT NOTICES: BUGGY IDE CHIPSETS CAN CORRUPT DATA!!
|
72 |
|
|
*** =================
|
73 |
|
|
*** PCI versions of the CMD640 and RZ1000 interfaces are now detected
|
74 |
|
|
*** automatically at startup when PCI BIOS support is configured.
|
75 |
|
|
***
|
76 |
|
|
*** Linux disables the "prefetch" ("readahead") mode of the RZ1000
|
77 |
|
|
*** to prevent data corruption possible due to hardware design flaws.
|
78 |
|
|
***
|
79 |
|
|
*** For the CMD640, linux disables "IRQ unmasking" (hdparm -u1) on any
|
80 |
|
|
*** drive for which the "prefetch" mode of the CMD640 is turned on.
|
81 |
|
|
*** If "prefetch" is disabled (hdparm -p8), then "IRQ unmasking" can be
|
82 |
|
|
*** used again.
|
83 |
|
|
***
|
84 |
|
|
*** For the CMD640, linux disables "32bit I/O" (hdparm -c1) on any drive
|
85 |
|
|
*** for which the "prefetch" mode of the CMD640 is turned off.
|
86 |
|
|
*** If "prefetch" is enabled (hdparm -p9), then "32bit I/O" can be
|
87 |
|
|
*** used again.
|
88 |
|
|
***
|
89 |
|
|
*** The CMD640 is also used on some Vesa Local Bus (VLB) cards, and is *NOT*
|
90 |
|
|
*** automatically detected by Linux. For safe, reliable operation with such
|
91 |
|
|
*** interfaces, one *MUST* use the "ide0=cmd640_vlb" kernel option.
|
92 |
|
|
***
|
93 |
|
|
*** Use of the "serialize" option is no longer necessary.
|
94 |
|
|
|
95 |
|
|
This is the multiple IDE interface driver, as evolved from hd.c.
|
96 |
|
|
It supports up to six IDE interfaces, on one or more IRQs (usually 14 & 15).
|
97 |
|
|
There can be up to two drives per interface, as per the ATA-2 spec.
|
98 |
|
|
|
99 |
|
|
Primary: ide0, port 0x1f0; major=3; hda is minor=0; hdb is minor=64
|
100 |
|
|
Secondary: ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64
|
101 |
|
|
Tertiary: ide2, port 0x1e8; major=33; hde is minor=0; hdf is minor=64
|
102 |
|
|
Quaternary: ide3, port 0x168; major=34; hdg is minor=0; hdh is minor=64
|
103 |
|
|
fifth.. ide4, usually PCI, probed
|
104 |
|
|
sixth.. ide5, usually PCI, probed
|
105 |
|
|
|
106 |
|
|
To access devices on interfaces > ide0, device entries must first be
|
107 |
|
|
created in /dev for them. To create such entries, simply run the included
|
108 |
|
|
shell script: /usr/src/linux/scripts/MAKEDEV.ide
|
109 |
|
|
|
110 |
|
|
Apparently many older releases of Slackware had incorrect entries
|
111 |
|
|
in /dev for hdc* and hdd* -- this can also be corrected by running MAKEDEV.ide
|
112 |
|
|
|
113 |
|
|
ide.c automatically probes for most IDE interfaces (including all PCI ones),
|
114 |
|
|
for the drives/geometries attached to those interfaces, and for the
|
115 |
|
|
IRQ numbers being used by the interfaces (normally 14, 15 for ide0/ide1).
|
116 |
|
|
|
117 |
|
|
For special cases, interfaces may be specified using kernel "command line"
|
118 |
|
|
options. For example,
|
119 |
|
|
|
120 |
|
|
ide3=0x168,0x36e,10 /* ioports 0x168-0x16f,0x36e, irq 10 */
|
121 |
|
|
|
122 |
|
|
Normally the irq number need not be specified, as ide.c will probe for it:
|
123 |
|
|
|
124 |
|
|
ide3=0x168,0x36e /* ioports 0x168-0x16f,0x36e */
|
125 |
|
|
|
126 |
|
|
The standard port, and irq values are these:
|
127 |
|
|
|
128 |
|
|
ide0=0x1f0,0x3f6,14
|
129 |
|
|
ide1=0x170,0x376,15
|
130 |
|
|
ide2=0x1e8,0x3ee,11
|
131 |
|
|
ide3=0x168,0x36e,10
|
132 |
|
|
|
133 |
|
|
Note that the first parameter reserves 8 contiguous ioports, whereas the
|
134 |
|
|
second value denotes a single ioport. If in doubt, do a 'cat /proc/ioports'.
|
135 |
|
|
|
136 |
|
|
In all probability the device uses these ports and IRQs if it is attached
|
137 |
|
|
to the appropriate ide channel. Pass the parameter for the correct ide
|
138 |
|
|
channel to the kernel, as explained above.
|
139 |
|
|
|
140 |
|
|
Any number of interfaces may share a single IRQ if necessary, at a slight
|
141 |
|
|
performance penalty, whether on separate cards or a single VLB card.
|
142 |
|
|
The IDE driver automatically detects and handles this. However, this may
|
143 |
|
|
or may not be harmful to your hardware.. two or more cards driving the same IRQ
|
144 |
|
|
can potentially burn each other's bus driver, though in practice this
|
145 |
|
|
seldom occurs. Be careful, and if in doubt, don't do it!
|
146 |
|
|
|
147 |
|
|
Drives are normally found by auto-probing and/or examining the CMOS/BIOS data.
|
148 |
|
|
For really weird situations, the apparent (fdisk) geometry can also be specified
|
149 |
|
|
on the kernel "command line" using LILO. The format of such lines is:
|
150 |
|
|
|
151 |
|
|
hdx=cyls,heads,sects,wpcom,irq
|
152 |
|
|
or hdx=cdrom
|
153 |
|
|
|
154 |
|
|
where hdx can be any of hda through hdh, Three values are required
|
155 |
|
|
(cyls,heads,sects). For example:
|
156 |
|
|
|
157 |
|
|
hdc=1050,32,64 hdd=cdrom
|
158 |
|
|
|
159 |
|
|
either {hda,hdb} or {hdc,hdd}. The results of successful auto-probing may
|
160 |
|
|
override the physical geometry/irq specified, though the "original" geometry
|
161 |
|
|
may be retained as the "logical" geometry for partitioning purposes (fdisk).
|
162 |
|
|
|
163 |
|
|
If the auto-probing during boot time confuses a drive (ie. the drive works
|
164 |
|
|
with hd.c but not with ide.c), then an command line option may be specified
|
165 |
|
|
for each drive for which you'd like the drive to skip the hardware
|
166 |
|
|
probe/identification sequence. For example:
|
167 |
|
|
|
168 |
|
|
hdb=noprobe
|
169 |
|
|
or
|
170 |
|
|
hdc=768,16,32
|
171 |
|
|
hdc=noprobe
|
172 |
|
|
|
173 |
|
|
Note that when only one IDE device is attached to an interface,
|
174 |
|
|
it should be jumpered as "single" or "master", *not* "slave".
|
175 |
|
|
Many folks have had "trouble" with cdroms because of this requirement,
|
176 |
|
|
so ide.c now probes for both units, though success is more likely
|
177 |
|
|
when the drive is jumpered correctly.
|
178 |
|
|
|
179 |
|
|
Courtesy of Scott Snyder and others, the driver supports ATAPI cdrom drives
|
180 |
|
|
such as the NEC-260 and the new MITSUMI triple/quad speed drives.
|
181 |
|
|
Such drives will be identified at boot time, just like a hard disk.
|
182 |
|
|
|
183 |
|
|
If for some reason your cdrom drive is *not* found at boot time, you can force
|
184 |
|
|
the probe to look harder by supplying a kernel command line parameter
|
185 |
|
|
via LILO, such as:
|
186 |
|
|
|
187 |
|
|
hdc=cdrom /* hdc = "master" on second interface */
|
188 |
|
|
or
|
189 |
|
|
hdd=cdrom /* hdd = "slave" on second interface */
|
190 |
|
|
|
191 |
|
|
For example, a GW2000 system might have a hard drive on the primary
|
192 |
|
|
interface (/dev/hda) and an IDE cdrom drive on the secondary interface
|
193 |
|
|
(/dev/hdc). To mount a CD in the cdrom drive, one would use something like:
|
194 |
|
|
|
195 |
|
|
ln -sf /dev/hdc /dev/cdrom
|
196 |
|
|
mkdir /cd
|
197 |
|
|
mount /dev/cdrom /cd -t iso9660 -o ro
|
198 |
|
|
|
199 |
|
|
If, after doing all of the above, mount doesn't work and you see
|
200 |
|
|
errors from the driver (with dmesg) complaining about `status=0xff',
|
201 |
|
|
this means that the hardware is not responding to the driver's attempts
|
202 |
|
|
to read it. One of the following is probably the problem:
|
203 |
|
|
|
204 |
|
|
- Your hardware is broken.
|
205 |
|
|
|
206 |
|
|
- You are using the wrong address for the device, or you have the
|
207 |
|
|
drive jumpered wrong. Review the configuration instructions above.
|
208 |
|
|
|
209 |
|
|
- Your IDE controller requires some nonstandard initialization sequence
|
210 |
|
|
before it will work properly. If this is the case, there will often
|
211 |
|
|
be a separate MS-DOS driver just for the controller. IDE interfaces
|
212 |
|
|
on sound cards usually fall into this category. Such configurations
|
213 |
|
|
can often be made to work by first booting MS-DOS, loading the
|
214 |
|
|
appropriate drivers, and then warm-booting linux (without powering
|
215 |
|
|
off). This can be automated using loadlin in the MS-DOS autoexec.
|
216 |
|
|
|
217 |
|
|
If you always get timeout errors, interrupts from the drive are probably
|
218 |
|
|
not making it to the host. Check how you have the hardware jumpered
|
219 |
|
|
and make sure it matches what the driver expects (see the configuration
|
220 |
|
|
instructions above). If you have a PCI system, also check the BIOS
|
221 |
|
|
setup; I've had one report of a system which was shipped with IRQ 15
|
222 |
|
|
disabled by the BIOS.
|
223 |
|
|
|
224 |
|
|
The kernel is able to execute binaries directly off of the cdrom,
|
225 |
|
|
provided it is mounted with the default block size of 1024 (as above).
|
226 |
|
|
|
227 |
|
|
Please pass on any feedback on any of this stuff to the maintainer,
|
228 |
|
|
whose address can be found in linux/MAINTAINERS.
|
229 |
|
|
|
230 |
|
|
Note that if BOTH hd.c and ide.c are configured into the kernel,
|
231 |
|
|
hd.c will normally be allowed to control the primary IDE interface.
|
232 |
|
|
This is useful for older hardware that may be incompatible with ide.c,
|
233 |
|
|
and still allows newer hardware to run on the 2nd/3rd/4th IDE ports
|
234 |
|
|
under control of ide.c. To have ide.c also "take over" the primary
|
235 |
|
|
IDE port in this situation, use the "command line" parameter: ide0=0x1f0
|
236 |
|
|
|
237 |
|
|
The IDE driver is partly modularized. The high level disk/cdrom/tape/floppy
|
238 |
|
|
drivers can always be compiled as loadable modules, the chipset drivers
|
239 |
|
|
can only be compiled into the kernel, and the core code (ide.c) can be
|
240 |
|
|
compiled as a loadable module provided no chipset support and no special
|
241 |
|
|
partition table translations are needed.
|
242 |
|
|
|
243 |
|
|
When using ide.c/ide-tape.c as modules in combination with kerneld, add:
|
244 |
|
|
|
245 |
|
|
alias block-major-3 ide-probe
|
246 |
|
|
alias char-major-37 ide-tape
|
247 |
|
|
|
248 |
|
|
respectively to /etc/modules.conf.
|
249 |
|
|
|
250 |
|
|
When ide.c is used as a module, you can pass command line parameters to the
|
251 |
|
|
driver using the "options=" keyword to insmod, while replacing any ',' with
|
252 |
|
|
';'. For example:
|
253 |
|
|
|
254 |
|
|
insmod ide.o options="ide0=serialize ide2=0x1e8;0x3ee;11"
|
255 |
|
|
|
256 |
|
|
|
257 |
|
|
================================================================================
|
258 |
|
|
|
259 |
|
|
Summary of ide driver parameters for kernel "command line":
|
260 |
|
|
----------------------------------------------------------
|
261 |
|
|
"hdx=" is recognized for all "x" from "a" to "h", such as "hdc".
|
262 |
|
|
"idex=" is recognized for all "x" from "0" to "3", such as "ide1".
|
263 |
|
|
|
264 |
|
|
"hdx=noprobe" : drive may be present, but do not probe for it
|
265 |
|
|
"hdx=none" : drive is NOT present, ignore cmos and do not probe
|
266 |
|
|
"hdx=nowerr" : ignore the WRERR_STAT bit on this drive
|
267 |
|
|
"hdx=cdrom" : drive is present, and is a cdrom drive
|
268 |
|
|
"hdx=cyl,head,sect" : disk drive is present, with specified geometry
|
269 |
|
|
"hdx=autotune" : driver will attempt to tune interface speed
|
270 |
|
|
to the fastest PIO mode supported,
|
271 |
|
|
if possible for this drive only.
|
272 |
|
|
Not fully supported by all chipset types,
|
273 |
|
|
and quite likely to cause trouble with
|
274 |
|
|
older/odd IDE drives.
|
275 |
|
|
"hdx=slow" : insert a huge pause after each access to the data
|
276 |
|
|
port. Should be used only as a last resort.
|
277 |
|
|
"hdx=swapdata" : when the drive is a disk, byte swap all data
|
278 |
|
|
|
279 |
|
|
"hdxlun=xx" : set the drive last logical unit
|
280 |
|
|
|
281 |
|
|
"idebus=xx" : inform IDE driver of VESA/PCI bus speed in MHz,
|
282 |
|
|
where "xx" is between 20 and 66 inclusive,
|
283 |
|
|
used when tuning chipset PIO modes.
|
284 |
|
|
For PCI bus, 25 is correct for a P75 system,
|
285 |
|
|
30 is correct for P90,P120,P180 systems,
|
286 |
|
|
and 33 is used for P100,P133,P166 systems.
|
287 |
|
|
If in doubt, use idebus=33 for PCI.
|
288 |
|
|
As for VLB, it is safest to not specify it.
|
289 |
|
|
Bigger values are safer than smaller ones.
|
290 |
|
|
|
291 |
|
|
"idex=noprobe" : do not attempt to access/use this interface
|
292 |
|
|
"idex=base" : probe for an interface at the addr specified,
|
293 |
|
|
where "base" is usually 0x1f0 or 0x170
|
294 |
|
|
and "ctl" is assumed to be "base"+0x206
|
295 |
|
|
"idex=base,ctl" : specify both base and ctl
|
296 |
|
|
"idex=base,ctl,irq" : specify base, ctl, and irq number
|
297 |
|
|
"idex=autotune" : driver will attempt to tune interface speed
|
298 |
|
|
to the fastest PIO mode supported,
|
299 |
|
|
for all drives on this interface.
|
300 |
|
|
Not fully supported by all chipset types,
|
301 |
|
|
and quite likely to cause trouble with
|
302 |
|
|
older/odd IDE drives.
|
303 |
|
|
"idex=noautotune" : driver will NOT attempt to tune interface speed
|
304 |
|
|
This is the default for most chipsets,
|
305 |
|
|
except the cmd640.
|
306 |
|
|
"idex=serialize" : do not overlap operations on idex and ide(x^1)
|
307 |
|
|
"idex=reset" : reset interface after probe
|
308 |
|
|
"idex=dma" : automatically configure/use DMA if possible.
|
309 |
|
|
"idex=nohighio" : don't use i/o to high memory addresses on this
|
310 |
|
|
interface. i/o to memory locations higher
|
311 |
|
|
than ~860MiB will be bounced.
|
312 |
|
|
|
313 |
|
|
The following are valid ONLY on ide0,
|
314 |
|
|
and the defaults for the base,ctl ports must not be altered.
|
315 |
|
|
|
316 |
|
|
"ide0=dtc2278" : probe/support DTC2278 interface
|
317 |
|
|
"ide0=ht6560b" : probe/support HT6560B interface
|
318 |
|
|
"ide0=cmd640_vlb" : *REQUIRED* for VLB cards with the CMD640 chip
|
319 |
|
|
(not for PCI -- automatically detected)
|
320 |
|
|
"ide0=qd65xx" : probe/support qd65xx interface
|
321 |
|
|
"ide0=ali14xx" : probe/support ali14xx chipsets (ALI M1439/M1445)
|
322 |
|
|
"ide0=umc8672" : probe/support umc8672 chipsets
|
323 |
|
|
|
324 |
|
|
There may be more options than shown -- use the source, Luke!
|
325 |
|
|
|
326 |
|
|
Everything else is rejected with a "BAD OPTION" message.
|
327 |
|
|
|
328 |
|
|
================================================================================
|
329 |
|
|
|
330 |
|
|
Some Terminology
|
331 |
|
|
----------------
|
332 |
|
|
IDE = Integrated Drive Electronics, meaning that each drive has a built-in
|
333 |
|
|
controller, which is why an "IDE interface card" is not a "controller card".
|
334 |
|
|
|
335 |
|
|
IDE drives are designed to attach almost directly to the ISA bus of an AT-style
|
336 |
|
|
computer. The typical IDE interface card merely provides I/O port address
|
337 |
|
|
decoding and tri-state buffers, although several newer localbus cards go much
|
338 |
|
|
beyond the basics. When purchasing a localbus IDE interface, avoid cards with
|
339 |
|
|
an onboard BIOS and those which require special drivers. Instead, look for a
|
340 |
|
|
card which uses hardware switches/jumpers to select the interface timing speed,
|
341 |
|
|
to allow much faster data transfers than the original 8MHz ISA bus allows.
|
342 |
|
|
|
343 |
|
|
ATA = AT (the old IBM 286 computer) Attachment Interface, a draft American
|
344 |
|
|
National Standard for connecting hard drives to PCs. This is the official
|
345 |
|
|
name for "IDE".
|
346 |
|
|
|
347 |
|
|
The latest standards define some enhancements, known as the ATA-2 spec,
|
348 |
|
|
which grew out of vendor-specific "Enhanced IDE" (EIDE) implementations.
|
349 |
|
|
|
350 |
|
|
ATAPI = ATA Packet Interface, a new protocol for controlling the drives,
|
351 |
|
|
similar to SCSI protocols, created at the same time as the ATA2 standard.
|
352 |
|
|
ATAPI is currently used for controlling CDROM and TAPE devices, and will
|
353 |
|
|
likely also soon be used for Floppy drives, removable R/W cartridges,
|
354 |
|
|
and for high capacity hard disk drives.
|
355 |
|
|
|
356 |
|
|
How To Use *Big* ATA/IDE drives with Linux
|
357 |
|
|
------------------------------------------
|
358 |
|
|
The ATA Interface spec for IDE disk drives allows a total of 28 bits
|
359 |
|
|
(8 bits for sector, 16 bits for cylinder, and 4 bits for head) for addressing
|
360 |
|
|
individual disk sectors of 512 bytes each (in "Linear Block Address" (LBA)
|
361 |
|
|
mode, there is still only a total of 28 bits available in the hardware).
|
362 |
|
|
This "limits" the capacity of an IDE drive to no more than 128GB (Giga-bytes).
|
363 |
|
|
All current day IDE drives are somewhat smaller than this upper limit, and
|
364 |
|
|
within a few years, ATAPI disk drives will raise the limit considerably.
|
365 |
|
|
|
366 |
|
|
All IDE disk drives "suffer" from a "16-heads" limitation: the hardware has
|
367 |
|
|
only a four bit field for head selection, restricting the number of "physical"
|
368 |
|
|
heads to 16 or less. Since the BIOS usually has a 63 sectors/track limit,
|
369 |
|
|
this means that all IDE drivers larger than 504MB (528Meg) must use a "physical"
|
370 |
|
|
geometry with more than 1024 cylinders.
|
371 |
|
|
|
372 |
|
|
(1024cyls * 16heads * 63sects * 512bytes/sector) / (1024 * 1024) == 504MB
|
373 |
|
|
|
374 |
|
|
(Some BIOSs (and controllers with onboard BIOS) pretend to allow "32" or "64"
|
375 |
|
|
heads per drive (discussed below), but can only do so by playing games with
|
376 |
|
|
the real (hidden) geometry, which is always limited to 16 or fewer heads).
|
377 |
|
|
|
378 |
|
|
This presents two problems to most systems:
|
379 |
|
|
|
380 |
|
|
1. The INT13 interface to the BIOS only allows 10-bits for cylinder
|
381 |
|
|
addresses, giving a limit of 1024cyls for programs which use it.
|
382 |
|
|
|
383 |
|
|
2. The physical geometry fields of the disk partition table only
|
384 |
|
|
allow 10-bits for cylinder addresses, giving a similar limit of 1024
|
385 |
|
|
cyls for operating systems that do not use the "sector count" fields
|
386 |
|
|
instead of the physical Cyl/Head/Sect (CHS) geometry fields.
|
387 |
|
|
|
388 |
|
|
Neither of these limitations affects Linux itself, as it (1) does not use the
|
389 |
|
|
BIOS for disk access, and it (2) is clever enough to use the "sector count"
|
390 |
|
|
fields of the partition table instead of the physical CHS geometry fields.
|
391 |
|
|
|
392 |
|
|
a) Most folks use LILO to load linux. LILO uses the INT13 interface
|
393 |
|
|
to the BIOS to load the kernel at boot time. Therefore, LILO can only
|
394 |
|
|
load linux if the files it needs (usually just the kernel images) are
|
395 |
|
|
located below the magic 1024 cylinder "boundary" (more on this later).
|
396 |
|
|
|
397 |
|
|
b) Many folks also like to have bootable DOS partitions on their
|
398 |
|
|
drive(s). DOS also uses the INT13 interface to the BIOS, not only
|
399 |
|
|
for booting, but also for operation after booting. Therefore, DOS
|
400 |
|
|
can normally only access partitions which are contained entirely below
|
401 |
|
|
the magic 1024 cylinder "boundary".
|
402 |
|
|
|
403 |
|
|
There are at least seven commonly used schemes for kludging DOS to work
|
404 |
|
|
around this "limitation". In the long term, the problem is being solved
|
405 |
|
|
by introduction of an alternative BIOS interface that does not have the
|
406 |
|
|
same limitations as the INT13 interface. New versions of DOS are expected
|
407 |
|
|
to detect and use this interface in systems whose BIOS provides it.
|
408 |
|
|
|
409 |
|
|
But in the present day, alternative solutions are necessary.
|
410 |
|
|
|
411 |
|
|
The most popular solution in newer systems is to have the BIOS shift bits
|
412 |
|
|
between the cylinder and head number fields. This is activated by entering
|
413 |
|
|
a translated logical geometry into the BIOS/CMOS setup for the drive.
|
414 |
|
|
Thus, if the drive has a geometry of 2100/16/63 (CHS), then the BIOS could
|
415 |
|
|
present a "logical" geometry of 525/64/63 by "shifting" two bits from the
|
416 |
|
|
cylinder number into the head number field for purposes of the partition table,
|
417 |
|
|
CMOS setup, and INT13 interfaces. Linux kernels 1.1.39 and higher detect and
|
418 |
|
|
"handle" this translation automatically, making this a rather painless solution
|
419 |
|
|
for the 1024 cyls problem. If for some reason Linux gets confused (unlikely),
|
420 |
|
|
then use the kernel command line parameters to pass the *logical* geometry,
|
421 |
|
|
as in: hda=525,64,63
|
422 |
|
|
|
423 |
|
|
If the BIOS does not support this form of drive translation, then several
|
424 |
|
|
options remain, listed below in order of popularity:
|
425 |
|
|
|
426 |
|
|
- use a partition below the 1024 cyl boundary to hold the linux
|
427 |
|
|
boot files (kernel images and /boot directory), and place the rest
|
428 |
|
|
of linux anywhere else on the drive. These files can reside in a DOS
|
429 |
|
|
partition, or in a tailor-made linux boot partition.
|
430 |
|
|
- use DiskManager software from OnTrack, supplied free with
|
431 |
|
|
many new hard drive purchases.
|
432 |
|
|
- use EZ-Drive software (similar to DiskManager). Note though,
|
433 |
|
|
that LILO must *not* use the MBR when EZ-Drive is present.
|
434 |
|
|
Instead, install LILO on the first sector of your linux partition,
|
435 |
|
|
and mark it as "active" or "bootable" with fdisk.
|
436 |
|
|
- boot from a floppy disk instead of the hard drive (takes 10 seconds).
|
437 |
|
|
|
438 |
|
|
If you cannot use drive translation, *and* your BIOS also restricts you to
|
439 |
|
|
entering no more than 1024 cylinders in the geometry field in the CMOS setup,
|
440 |
|
|
then just set it to 1024. As of v3.5 of this driver, Linux automatically
|
441 |
|
|
determines the *real* number of cylinders for fdisk to use, allowing easy
|
442 |
|
|
access to the full disk capacity without having to fiddle around.
|
443 |
|
|
|
444 |
|
|
Regardless of what you do, all DOS partitions *must* be contained entirely
|
445 |
|
|
within the first 1024 logical cylinders. For a 1Gig WD disk drive, here's
|
446 |
|
|
a good "half and half" partitioning scheme to start with:
|
447 |
|
|
|
448 |
|
|
geometry = 2100/16/63
|
449 |
|
|
/dev/hda1 from cyl 1 to 992 dos
|
450 |
|
|
/dev/hda2 from cyl 993 to 1023 swap
|
451 |
|
|
/dev/hda3 from cyl 1024 to 2100 linux
|
452 |
|
|
|
453 |
|
|
To ensure that LILO can boot linux, the boot files (kernel and /boot/*)
|
454 |
|
|
must reside within the first 1024 cylinders of the drive. If your linux
|
455 |
|
|
root partition is *not* completely within the first 1024 cyls (quite common),
|
456 |
|
|
then you can use LILO to boot linux from files on your DOS partition
|
457 |
|
|
by doing the following after installing Slackware (or whatever):
|
458 |
|
|
|
459 |
|
|
0. Boot from the "boot floppy" created during the installation
|
460 |
|
|
1. Mount your DOS partition as /dos (and stick it in /etc/fstab)
|
461 |
|
|
2. Move /boot to /dos/boot with: cp -a /boot /dos ; rm -r /boot
|
462 |
|
|
3. Create a symlink for LILO to use with: ln -s /dos/boot /boot
|
463 |
|
|
4. Move your kernel (/vmlinuz) to /boot/vmlinuz: mv /vmlinuz /boot
|
464 |
|
|
5. Edit /etc/lilo.conf to change /vmlinuz to /boot/vmlinuz
|
465 |
|
|
6. Re-run LILO with: lilo
|
466 |
|
|
|
467 |
|
|
A danger with this approach is that whenever an MS-DOS "defragmentation"
|
468 |
|
|
program is run (like Norton "speeddisk"), it may move the Linux boot
|
469 |
|
|
files around, confusing LILO and making the (Linux) system unbootable.
|
470 |
|
|
Be sure to keep a kernel "boot floppy" at hand for such circumstances.
|
471 |
|
|
A possible workaround is to mark the Linux files as S+H+R (System,
|
472 |
|
|
Hidden, Readonly), to prevent most defragmentation programs from
|
473 |
|
|
moving the files around.
|
474 |
|
|
|
475 |
|
|
If you "don't do DOS", then partition as you please, but remember to create
|
476 |
|
|
a small partition to hold the /boot directory (and vmlinuz) as described above
|
477 |
|
|
such that they stay within the first 1024 cylinders.
|
478 |
|
|
|
479 |
|
|
Note that when creating partitions that span beyond cylinder 1024,
|
480 |
|
|
Linux fdisk will complain about "Partition X has different physical/logical
|
481 |
|
|
endings" and emit messages such as "This is larger than 1024, and may cause
|
482 |
|
|
problems with some software". Ignore this for linux partitions. The "some
|
483 |
|
|
software" refers to DOS, the BIOS, and LILO, as described previously.
|
484 |
|
|
|
485 |
|
|
Western Digital ships a "DiskManager 6.03" diskette with all of their big
|
486 |
|
|
hard drives. Use BIOS translation instead of this if possible, as it is a
|
487 |
|
|
more generally compatible method of achieving the same results (DOS access
|
488 |
|
|
to the entire disk). However, if you must use DiskManager, it now works
|
489 |
|
|
with Linux 1.3.x in most cases. Let me know if you still have trouble.
|
490 |
|
|
|
491 |
|
|
My recommendations to anyone who asks about NEW systems are:
|
492 |
|
|
|
493 |
|
|
- buy a motherboard that uses the Intel Triton chipset -- very common.
|
494 |
|
|
- use IDE for the first two drives, placing them on separate interfaces.
|
495 |
|
|
- very fast 7200rpm drives are now available
|
496 |
|
|
(though many problems have been reported with Seagate ones).
|
497 |
|
|
- place the IDE cdrom drive as slave on either interface.
|
498 |
|
|
- if additional disks are to be connected, consider your needs:
|
499 |
|
|
- fileserver? Buy a SC200 SCSI adaptor for the next few drives.
|
500 |
|
|
- personal system? Use IDE for the next two drives.
|
501 |
|
|
- still not enough? Keep adding SC200 SCSI cards as needed.
|
502 |
|
|
|
503 |
|
|
Most manufacturers make both IDE and SCSI versions of each of their drives.
|
504 |
|
|
The IDE ones are usually as fast and cheaper, due to lower command overhead
|
505 |
|
|
and the higher data transfer speed of UDMA2. But fast/ultrawide/superlative
|
506 |
|
|
SCSI is still king of the heap, especially for servers, if you've got the bucks.
|
507 |
|
|
|
508 |
|
|
mlord@pobox.com
|
509 |
|
|
--
|
510 |
|
|
For current maintainers of this stuff, see the linux/MAINTAINERS file.
|