|
|
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.