|
|
1.1 ! root 1: .TH WORM 8 "wild" ! 2: .CT 1 sa_nonmortals ! 3: .SH NAME ! 4: worm, jukebox \- optical disk utilities ! 5: .SH SYNOPSIS ! 6: .B "worm mkfs" ! 7: [ ! 8: .BI -f device ! 9: ] [ ! 10: .BI -c comments ! 11: ] [ ! 12: .BI -b blksz ! 13: ] [ ! 14: .BI -n nblks ! 15: ] [ ! 16: .BI -v newvol_id ! 17: ] ! 18: .I vol_id ! 19: .PP ! 20: .B "worm stat" ! 21: [ ! 22: .BI -f device ! 23: ] [ ! 24: .BI -F n ! 25: ] [ ! 26: .B -v ! 27: ] [ ! 28: .I vol_id ! 29: ] ! 30: .PP ! 31: .B "worm ls" ! 32: [ ! 33: .BI -f device ! 34: ] [ ! 35: .B -l ! 36: ] [ ! 37: .I file ... ! 38: ] ! 39: .PP ! 40: .B "worm rm" ! 41: [ ! 42: .BI -f device ! 43: ] ! 44: .I vol_id ! 45: [ ! 46: .I file ... ! 47: ] ! 48: .PP ! 49: .B "worm mv" ! 50: [ ! 51: .BI -f device ! 52: ] ! 53: .I vol_id ! 54: .I "src dest" ! 55: .PP ! 56: .B "worm write" ! 57: [ ! 58: .BI -f device ! 59: ] ! 60: .I vol_id ! 61: [ ! 62: .I file ... ! 63: ] ! 64: .PP ! 65: .B "worm read" ! 66: [ ! 67: .BI -f device ! 68: ] [ ! 69: .B -dm ! 70: ] ! 71: .I vol_id ! 72: [ ! 73: .I file ... ! 74: ] ! 75: .PP ! 76: .B "worm cat" ! 77: [ ! 78: .BI -f device ! 79: ] ! 80: .I vol_id ! 81: .I file ! 82: .PP ! 83: .B "worm copy" ! 84: [ ! 85: .B -v ! 86: ] [ ! 87: .BI -m min_free ! 88: ] [ ! 89: .BI -f src_dev ! 90: ] ! 91: .I src_vol_id ! 92: .I dest_dev ! 93: .I dest_vol_id ! 94: .PP ! 95: .B "worm offline" ! 96: [ ! 97: .BI -f device ! 98: ] ! 99: .PP ! 100: .B "worm btree" ! 101: [ ! 102: .BI -f device ! 103: ] ! 104: .I vol_id ! 105: .PP ! 106: .B "worm dir" ! 107: [ ! 108: .BI -f device ! 109: ] ! 110: .I vol_id ! 111: .PP ! 112: .B "worm tmpdir" ! 113: [ ! 114: .BI -f device ! 115: ] ! 116: .I vol_id ! 117: .PP ! 118: .B "worm mount" ! 119: [ ! 120: .BI -w secs ! 121: ] [ ! 122: .I vol_id ! 123: ] ! 124: .PP ! 125: .B "jukebox" ! 126: [ ! 127: .B -aemprsuU ! 128: ] [ ! 129: .BI -w secs ! 130: ] [ ! 131: .I vol_id ! 132: ] ! 133: .SH DESCRIPTION ! 134: The ! 135: .I worm ! 136: programs manipulate arbitrary files. ! 137: They are intended for use with the raw device associated ! 138: with a Write-Once Read-Many (WORM) optical disk. ! 139: The default device is ! 140: .FR /dev/worm0 . ! 141: Other devices are specified by ! 142: .BI -f device ! 143: and a device name of a single digit ! 144: .I n ! 145: is taken as an abbreviation for ! 146: .FR /dev/worm \f2n\fP. ! 147: Most of the commands implement a simple file system. ! 148: Programs just wanting a raw device should still use ! 149: .B "worm mkfs" ! 150: so that the disk is properly labeled. ! 151: The ! 152: .IR vol_id , ! 153: or label, ! 154: should be unique and by convention, the vol_id's ! 155: for the A and B sides of a disk should be the same string suffixed by ! 156: a lowercase ! 157: .B a ! 158: and ! 159: .B b ! 160: respectively. ! 161: .PP ! 162: .I "Worm mkfs" ! 163: labels an optical disk. ! 164: The ! 165: .I comments ! 166: field is limited to 256 chars. ! 167: It is purely descriptive and is printed by ! 168: .IR "worm stat \-v" . ! 169: The (default) blocksize is 1024 for our SONY disks. ! 170: The number of blocks on a disk can be found by ! 171: .IR ra (4) ! 172: or ! 173: .IR scsish (8); ! 174: the default size ! 175: (1,600,000 for single density, 3,250,000 for double density) ! 176: sets aside 30MB or so as a hedge against oversights. ! 177: If the disk has already been initialised, its vol_id must match ! 178: .IR vol_id . ! 179: A new vol_id can be set with ! 180: .BR -v . ! 181: .PP ! 182: .I "Worm stat" ! 183: prints out labeling information ! 184: including the amount of free space left on the disk. ! 185: Option ! 186: .I vol_id ! 187: turns off all output except exit status: zero if ! 188: .I vol_id ! 189: matches that of the disk, ! 190: one otherwise. ! 191: Option ! 192: .B -F ! 193: similarly exits with status zero if the disk has more than ! 194: .I n ! 195: free blocks, otherwise three. ! 196: Option ! 197: .B -v ! 198: produces more output. ! 199: .PP ! 200: .I "Worm ls" ! 201: simulates an emasculated ! 202: .IR ls (1). ! 203: .PP ! 204: .I "Worm rm" ! 205: makes the specifed files unavailable to the rest of the ! 206: .I worm ! 207: commands. ! 208: .PP ! 209: .I "Worm mv" ! 210: renames ! 211: .I src ! 212: to ! 213: .IR dest . ! 214: .PP ! 215: .I "Worm write" ! 216: copies files onto the WORM. ! 217: If no file arguments are given, ! 218: filenames are read one per line from standard input. ! 219: The total number of files and bytes is printed on standard output. ! 220: .PP ! 221: .I "Worm read" ! 222: restores files from the WORM. ! 223: If no file arguments are given, ! 224: filenames are read one per line from standard input. ! 225: Option ! 226: .B -d ! 227: causes directories to be created as needed. ! 228: Option ! 229: .B -m ! 230: restores the original modification times. ! 231: .PP ! 232: .I "Worm cat" ! 233: copies the named file from the WORM to the standard output. ! 234: .PP ! 235: .I "Worm copy" ! 236: copies files directly from one disk to another. ! 237: The names of the files to be copied are taken from standard input; ! 238: groups (separated by blank lines) will be kept together. ! 239: The names are typically generated by ! 240: .BR "worm ls" . ! 241: The ! 242: .B -v ! 243: option prints out progress and summary information. ! 244: The copy will terminate before copying a group that would leave the destination ! 245: volume with less than ! 246: .I minfree ! 247: (deafult value is 40000) blocks free. ! 248: .PP ! 249: .I "Worm offline" ! 250: makes the WORM go offline, ready for ejecting. ! 251: This command is harmless; ! 252: accessing an offline drive will cause it to spin up and go online ! 253: without operator intervention. ! 254: .I "Worm offline" ! 255: only takes effect after the last close of the WORM ! 256: and as a bonus, applies to any MSCP device such as an RA81. ! 257: .PP ! 258: .I "Worm tmpdir" ! 259: saves a copy of the directory in ! 260: .BI /usr/worm/tmp/ vol_id ! 261: if the directory ! 262: .F /usr/worm/tmp ! 263: exists. ! 264: This will speed up subsequent access substantially, ! 265: although it will still be slower than ! 266: .I "worm btree" ! 267: below. ! 268: On the other hand, ! 269: .I worm tmpdir ! 270: typically takes 5 minutes to run (on a VAX 11/750) ! 271: whereas ! 272: .I worm btree ! 273: takes about 45 minutes. ! 274: .PP ! 275: .I "Worm btree" ! 276: constructs a new directory for the whole disk (in the form of a ! 277: .IR cbt (1) ! 278: database). ! 279: The new superblock is at zero. ! 280: All the worm commands go faster with such an index but it is intended to be done ! 281: just once, after the disk is complete. ! 282: The directory occupies of the order of 10MB but may be more. ! 283: If you really have to add more files to the disk, ! 284: you need to write zeros on the first 1K block of the WORM before using ! 285: .IR "worm write" . ! 286: .PP ! 287: .I "Worm dir" ! 288: takes the btree directory from the disk and stores in ! 289: .FR /usr/worm/dirs . ! 290: Future uses of the disk will be much faster. ! 291: .PP ! 292: .I "Worm mount" ! 293: returns the device on which the disk labelled ! 294: .I vol_id ! 295: is mounted. ! 296: If the drive(s) are busy and you have a jukebox, the ! 297: .BI -w s ! 298: option tells how many seconds to wait before failing. ! 299: The default is wait forever. ! 300: If no ! 301: .I vol_id ! 302: is given, print the drive status. ! 303: .PP ! 304: .I "Jukebox" ! 305: manages the disks in the SONY jukebox. ! 306: There are several options (default is ! 307: .BR -s ): ! 308: .TP 10 ! 309: .B -a ! 310: Allocate a blank disk and label it ! 311: .IR vol_id . ! 312: Use ! 313: .I "worm mkfs" ! 314: to change any fields from their default value. ! 315: .TP ! 316: .B -e ! 317: Eject the disk labeled ! 318: .I vol_id. ! 319: To physically retrieve the disk, ! 320: press the ! 321: .B OUT ! 322: button (the ! 323: .B "OUT READY" ! 324: light should be on). ! 325: Repeat until the ! 326: .B "IN READY" ! 327: light goes on. ! 328: .TP ! 329: .B -m ! 330: Mount the disk labelled ! 331: .I vol_id ! 332: in some drive and print the drive number on standard output. ! 333: .TP ! 334: .B -p ! 335: Print the list of disks in the jukebox. ! 336: .TP ! 337: .B -r ! 338: Rebuild the list of disks by examining each disk in the jukebox. ! 339: Do not do this unless you are sure you need to. ! 340: If ! 341: .I vol_id ! 342: is given, it should be one of the following letters and governs ! 343: how disks are assigned shelf numbers. ! 344: The default is to leave the shelf number unchanged. ! 345: Other options (mainly useful for demos) are ! 346: .B c ! 347: (compresses the disks in the jukebox towards the bottom or lower numbered shelves), ! 348: .B r ! 349: (distributes the disks randomly), and ! 350: .B s ! 351: (sorts the disks by vol_id). ! 352: .TP ! 353: .B -s ! 354: Print the status of the jukebox. ! 355: .TP ! 356: .B -u ! 357: Unload offline disks back onto their shelves. ! 358: .TP ! 359: .B -U ! 360: Unload all disks (offline or not) back onto their shelves. ! 361: .TP ! 362: .BI -w secs ! 363: This option only affects the behavior of ! 364: .BR -m . ! 365: If all drives are busy, try again for ! 366: .I secs ! 367: seconds before failing. ! 368: .PP ! 369: To load a disk into the jukebox, press the ! 370: .B IN ! 371: button on the jukebox when the ! 372: .B "IN READY" ! 373: light is on. ! 374: After the shutter opens, push the disk in firmly. ! 375: The disk (blank or initialised) is not examined immediately but on demand. ! 376: .SS Etiquette ! 377: Vol_ids should be unique as discussed above. ! 378: The file ! 379: .F /n/wild/usr/worm/vol_ids ! 380: contains known vol_ids. ! 381: The commands for reading and writing require vol_id's ! 382: to guard against accessing the wrong disk. ! 383: .PP ! 384: The recommended protocol for changing disks is ! 385: if no one appears to be using the drive ! 386: (by using ! 387: .IR ps (1)), ! 388: execute ! 389: .I "worm offline" ! 390: and go to the drive. ! 391: If, and only if, the drive has the DRIVE OFF (middle) light on, ! 392: hit the EJECT button and change disks. ! 393: If the light is not on, then ! 394: someone is still using the disk and you should wait until they are done ! 395: before hitting EJECT. ! 396: .SS Programming considerations ! 397: Programs should not depend on writing any block more than once; however, ! 398: our SONY optical disks implement a small number of multiple writes ! 399: via bad block replacement. ! 400: A ! 401: .IR read (2) ! 402: of an unwritten block returns with an errno of ! 403: .BR ENXIO . ! 404: On Vaxes, the WORM is an MSCP device; ! 405: thus geometry information can be fetched as in ! 406: .IR ra (4). ! 407: .PP ! 408: For maximum speed, read and write in large blocks (preferably 63K) ! 409: and avoid seeks. ! 410: A seek across the whole disk takes about 1 second. ! 411: .PP ! 412: The device ! 413: .F /dev/worm? ! 414: is simply an appropriate raw ! 415: .IR ra (4) ! 416: device, partition 7 (the whole disk). ! 417: .SH EXAMPLES ! 418: .EX ! 419: worm mkfs -c"512x512x24 movies" tdmoviesa ! 420: worm write tdmoviesa < filenames ! 421: worm read -d tdmoviesa bumblebee/act2/frame1 ! 422: .EE ! 423: .SH FILES ! 424: .F /dev/worm? ! 425: .br ! 426: .F /n/wild/usr/worm/vol_ids ! 427: .br ! 428: .F /n/wild/usr/worm/jukedir ! 429: .SH SEE ALSO ! 430: .IR backup (8), ! 431: .IR scsish (8), ! 432: .IR backup (1) ! 433: .SH BUGS ! 434: The output of ! 435: .I "worm ls" ! 436: is not necessarily sorted.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.