|
|
1.1 root 1: .TH RA 4
2: .CT 2 sa
3: .SH NAME
4: ra \- DEC MSCP disks (RA60, RA80, RA81, RA90)
5: .SH DESCRIPTION
6: .I Ra
7: devices occupy disk drives conforming to
8: DEC's Mass Storage Control Protocol standard:
9: drives such as the RA81
10: connected via controllers such as the UDA50.
11: Files with minor device numbers 0 through 7
12: refer to different sections of drive 0,
13: minor devices 8 through 16 refer to drive 1,
14: and so on up to 63 (8 drives).
15: .PP
16: Normally the disk is accessed in 1024-byte blocks (1K).
17: If 64 is added to the minor device number,
18: 4096-byte blocks (4K) are used instead.
19: A 4K device mounted as a file system is bitmapped; see
20: .IR filsys (5).
21: .PP
22: Conventionally the files are given names like
23: .L ra37
24: for section 7 of drive 3.
25: There are no name rules distinguishing 1024-byte files
26: from 4096-byte files;
27: in practice the files are almost always the 4096-byte kind.
28: .PP
29: The start and size
30: of the sections of each drive
31: are as follows.
32: Sizes are measured in
33: 512-byte hardware sectors.
34: .PP
35: .nf
36: .ta .5i +\w'000000 'u +\w'000000 'u
37: disk start length
38: 0 0 10240
39: 1 10240 20480
40: 2 30720 249848
41: 3 280568 249848
42: 4 530416 249848
43: 5 780264 arbitrarily large
44: 6 30720 749544
45: 7 0 arbitrarily large
46: .DT
47: .fi
48: .PP
49: The `arbitrarily large'
50: sections reach to the end of the disk.
51: .I Rarct
52: will display disk sizes; see
53: .IR rarepl (8).
54: For example,
55: an RA81 has 891072 sectors,
56: so section 7 is that size,
57: and section 5 is
58: 891072\(mi780264=110808 sectors.
59: An RA90 has 2376153 sectors;
60: section 7 is that size,
61: section 5 is
62: 2376153\(mi780264=1595889 sectors.
63: For other disks,
64: run
65: .I rarct
66: and do the arithmetic.
67: .PP
68: The
69: .I ra
70: files
71: discussed above access the disk via the system's normal
72: buffering mechanism
73: and may be read and written without regard to
74: physical disk records.
75: There is also a `raw' interface
76: which provides for direct transmission between the disk
77: and the user's read or write buffer.
78: A single read or write call results in exactly one I/O operation
79: and therefore raw I/O is considerably more efficient when
80: many words are transmitted.
81: The names of the raw files
82: begin with
83: .L rra
84: and end with a number which selects the same disk
85: as the corresponding
86: .L ra
87: file.
88: .PP
89: In raw I/O the buffer must begin on a word boundary,
90: and counts should be a multiple of 512 bytes
91: (a disk block).
92: Likewise
93: .IR lseek (2)
94: calls should specify a multiple of 512 bytes.
95: .PP
96: Several
97: .IR ioctl (2)
98: calls
99: apply to the raw devices.
100: .TF UIORRCT
101: .TP
102: .B UIOCHAR
103: The third argument to
104: .I ioctl
105: points to an object
106: to be filled with drive parameters:
107: .EX
108: .ta .5i +\w'daddr_t 'u +\w'radsize 'u
109: struct ud_unit {
110: daddr_t radsize; /* disk size, sectors */
111: daddr_t rctsize; /* RCT size, including pad */
112: long medium; /* medium id */
113: short tracksz; /* sectors per track */
114: short groupsz; /* tracks per group */
115: short cylsz; /* groups per cylinder */
116: char rbns; /* RBNs per track */
117: char copies; /* number of RCT copies */
118: };
119: .EE
120: .TF UIORRCT
121: .TP
122: .B UIORRCT
123: The third argument points to an object of type
124: .EX
125: struct ud_rctbuf {
126: caddr_t buf;
127: int lbn;
128: };
129: .EE
130: .IP
131: .B buf
132: points to a 512-byte buffer,
133: into which block
134: .B lbn
135: of the replacement and caching table
136: (RCT)
137: is read.
138: As many copies of the RCT
139: as necessary
140: are examined to find a readable copy
141: of the block.
142: .TP
143: .B UIOWRCT
144: The third argument is like that of
145: .BR UIORRCT .
146: Block
147: .B lbn
148: of the RCT is written
149: in all copies.
150: .TP
151: .B UIOREPL
152: The third argument points to an object of type:
153: .EX
154: struct ud_repl {
155: daddr_t replbn; /* good block */
156: daddr_t lbn; /* bad block */
157: short prim; /* nonzero if primary replacement */
158: };
159: .EE
160: .IP
161: A `replace' command
162: is sent to the controller,
163: requesting that attempts to access logical block
164: .I lbn
165: henceforth be revectored to replacement block
166: .IR replbn .
167: .I Prim
168: should be set nonzero
169: if and only if
170: .I replbn
171: is the primary replacement block for
172: .IR lbn .
173: .TP
174: .B UIOSPDW
175: Arrange that the disk drive will spin down
176: when the last file using it is closed.
177: .TP
178: .B UIORST
179: Reset the controller
180: to which this disk is connected.
181: Any pending operations are abandoned and return an error.
182: .SH FILES
183: .F /dev/ra*
184: .br
185: .F /dev/rra*
186: .SH SEE ALSO
187: .IR rarepl (8)
188: .br
189: MSCP Basic Disk Functions Manual
190: .br
191: DEC Standard Disk Format Specification
192: .SH BUGS
193: In raw I/O
194: .IR read (2)
195: and
196: .IR write
197: truncate file offsets to 512-byte block boundaries,
198: and
199: .I write
200: scribbles on the tail of incomplete blocks.
201: Thus,
202: in programs that are likely to access raw devices,
203: .I read, write
204: and
205: .IR lseek (2)
206: should always deal in 512-byte multiples.
207: .PP
208: .B UIORRCT
209: and
210: .B UIOWRCT
211: will misbehave if invoked on a section
212: that doesn't start
213: at the beginning of the disk.
214: Section 7
215: (the whole disk)
216: is the best choice.
217: .PP
218: The 1K/4K flag bit in the device number is unfortunate.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.