V9.0 has the following new features: The major new feature is virtual tape support. This allows a file on disk to be used as a tape device, which can be very handy for testing. To use it substitute the LM command for LD, like this: $ @sys$startup:lm$startup $ lm create tape.dsk/size=10000 $ lm connect/log/full tape.dsk lma1: %LM-I-CONNECTED, Connected $3$LMA1: to $3$DKA100:[JUR.LD.V90.SRC]TAPE.DSK;1 -LM-I-OPTIONS, Tape unit, Tape loaded %LM-I-METADATA, Metadata available Version: 1 Creator: JUR Process name: SysDamager Account: SYSTEM UIC: [100,100] Created on system: THEBAT VMS version: V8.3 Time at creation: 8-MAY-2007 20:50:19.90 Time at last connect: 8-MAY-2007 20:50:25.49 Time at last disconnect: 8-MAY-2007 20:50:19.90 Data start: 1 Data size: 9999 Flags: tagsinuse Checksum: 3A4D74B7 $ show dev/full lma1 Magtape $3$LMA1: (THEBAT), device type (Generic SCSI tape), is online, file- oriented device. Error count 0 Operations completed 2 Owner process "" Owner UIC [JUR] Owner process ID 00000000 Dev Prot S:RWPL,O:RWPL,G:R,W Reference count 0 Default buffer size 2048 Density default Format Normal-11 Allocation class 3 Volume status: no-unload on dismount, odd parity. $ lm trace lma1/all $ init lma1 test $ mount lma1 test %MOUNT-I-MOUNTED, TEST mounted on _$3$LMA1: (THEBAT) $ lm show/trace lma1 I/O trace for device $3$LMA1: 8-MAY-2007 20:51:59.14 on node THEBAT End Time Elaps Pid Lbn Bytes Iosb Function --------------------------------------------------------------------- 20:51:49.649071 00.000005 2020042F 0 0 NORMAL PACKACK 20:51:49.649133 00.000000 2020042F 0 0 NORMAL REWIND 20:51:49.649174 00.000001 2020042F 0 0 NORMAL SETMODE|MT3_DENSITY 20:51:49.664598 00.014676 00000000 1 131072 NORMAL READPBLK 20:51:49.666553 00.001917 00000000 257 131072 NORMAL READPBLK 20:51:49.676429 00.009853 00000000 513 131072 NORMAL READPBLK 20:51:49.686808 00.010357 00000000 769 131072 NORMAL READPBLK 20:51:49.686837 00.036922 2020042F 0 80 OPINCOMPL READPBLK 20:51:49.686904 00.000001 2020042F 0 0 NORMAL REWIND 20:51:49.686945 00.000000 2020042F 0 0 NORMAL SETMODE|MT3_DENSITY 20:51:49.687029 00.000001 2020042F 0 0 NORMAL REWIND 20:51:49.687083 00.000014 2020042F 0 80 NORMAL WRITEPBLK 20:51:49.687150 00.000010 2020042F 0 80 NORMAL WRITEPBLK 20:51:49.687209 00.000010 2020042F 0 80 NORMAL WRITEPBLK 20:51:49.687261 00.000001 2020042F 0 0 NORMAL WRITEOF 20:51:49.687292 00.000001 2020042F 0 0 NORMAL WRITEOF 20:51:49.687332 00.000009 2020042F 0 80 NORMAL WRITEPBLK 20:51:49.687378 00.000009 2020042F 0 80 NORMAL WRITEPBLK 20:51:49.687412 00.000001 2020042F 0 0 NORMAL WRITEOF 20:51:49.687442 00.000001 2020042F 0 0 NORMAL WRITEOF 20:51:49.692443 00.004969 00000000 1 1024 NORMAL WRITEPBLK 20:51:49.692483 00.005014 2020042F 0 0 NORMAL REWIND 20:51:49.692533 00.000001 2020042F 0 0 NORMAL AVAILABLE 20:51:49.692586 00.000001 2020042F 0 0 NORMAL AVAILABLE 20:51:53.556264 00.000003 2020042F 0 0 NORMAL PACKACK 20:51:53.556314 00.000000 2020042F 0 0 NORMAL REWIND 20:51:53.556357 00.000000 2020042F 0 16 NORMAL SENSEMODE|MT3_DENSITY 20:51:53.556416 00.000000 2020042F 0 0 NORMAL SETMODE|MT3_DENSITY 20:51:53.556471 00.000001 2020042F 0 0 NORMAL PACKACK 20:51:53.556505 00.000001 2020042F 0 0 NORMAL REWIND 20:51:53.568662 00.012108 00000000 1 131072 NORMAL READPBLK 20:51:53.570605 00.001909 00000000 257 131072 NORMAL READPBLK 20:51:53.572169 00.001541 00000000 513 131072 NORMAL READPBLK 20:51:53.573773 00.001583 00000000 769 131072 NORMAL READPBLK 20:51:53.573811 00.017262 2020042F 0 80 NORMAL READPBLK 20:51:53.582545 00.000014 2020042F 0 80 NORMAL READPBLK 20:51:53.582615 00.000009 2020042F 0 80 NORMAL READPBLK 20:51:53.582667 00.000001 2020042F 0 80 ENDOFFILE READPBLK 20:51:53.582736 00.000001 2020042F 0 0 NORMAL REWIND There are three commands for volume switch support: LM LOAD, UNLOAD and SWITCH. Initially an LM device can be created without a connected containerfile, with LM CONNECT/NOLOAD LMAx. After that it can be unloaded with LM UNLOAD LMAx, and reloaded with LM LOAD file LMAx. Switching a volume can be done in one command with LM SWITCH file LMAx. LM SHOW/FULL will display if the tape is loaded or not. So right now DISMOUNT/UNLOAD (the default) will keep the file connected, but move it to the unload state. It is possible to reload it and keep the same file with LM LOAD LMAx (special case command). If the device is unloaded it will return SS$_MEDOFL when it's accessed. LM LOAD and SWITCH can use the same qualifiers as CONNECT, UNLOAD can use the same qualifiers as DISCONNECT. If a device is not connected to a container file it can simply be removed with LM DISCONNECT LMAx. LM SWITCH newfile.dsk LMA1 This command allows volume switching for backup. The existing virtual tapeunit is re-used with a new container file. If backup is at the end of a tape and issues an Opcom request this commands allows switching of the containerfile. One thing to notice is that a tape containerfile must be at least 5000 blocks in size. The virtual end of tape is currently fixed at 95% of the containerfile size, after writing that amount of data the driver will return SS$_ENDOFTAPE after every write. This is a warning message only, the data will be written correctly. If the physical end of data is reached an SS$_DRVERR will be returned. LM ANALYZE file.dsk [/RECORDS] [/DATA] This command will verify the integrity of the container file. It can only be used for virtual tapes, disks have their own format (ODS-2/5). The qualifier /RECORDS will show all records with their possible attributes. /DATA will dump the contents of the data records in hex and ascii: $ lm analyze tape/records %LM-I-METADATA, Metadata available Version: 1 Creator: JUR Process name: SysDamager Account: SYSTEM UIC: [100,100] Created on system: THEBAT VMS version: V8.3 Time at creation: 8-MAY-2007 20:50:19.90 Time at last connect: 8-MAY-2007 20:50:25.49 Time at last disconnect: 8-MAY-2007 20:53:23.54 Data start: 1 Data size: 9999 Flags: tagsinuse Checksum: A7C35A3F Record: 0 Offset: 0 Lbn: 1 Length: 80 Record: 1 Offset: 116 Lbn: 1 Length: 80 Record: 2 Offset: 232 Lbn: 1 Length: 80 Record: 3 Offset: 348 Lbn: 1 Length: 0 Flags: EOF Record: 4 Offset: 384 Lbn: 1 Length: 0 Flags: EOF Record: 5 Offset: 420 Lbn: 1 Length: 80 Record: 6 Offset: 536 Lbn: 2 Length: 80 Record: 7 Offset: 652 Lbn: 2 Length: 0 Flags: EOF Record: 8 Offset: 688 Lbn: 2 Length: 0 Flags: EOF Record: 0 Offset: 0 Lbn: 1 Length: 0 Flags: EOD %LM-I-ANALYZEOK, Container file structure successfully verified Bytes read: 524288 Records read: 10 Databytes read: 400 Eof count: 4 LD CREATE/ERASE This will erase the containerfile after creation. It may be used to speed up initial shadow copies, or when init has a problem initializing a virtual disk due to previous stale data and the user lacks VOLPRO privilege to override that. If creation of a containerfile is done on a disk with highwater marking enabled, a warning will be issued that it may take some time if the filesize is above 100000 blocks (VMS V8.2 and higher only). LD CONNECT/LOGICAL=(NAME=logical-name[,TABLE=table][,MODE=mode]) This allows a logical name to be associated with the connected LD device. LD SHOW/FULL This will show all attributes of the selected LD device: $ ld show/all/full %LD-I-CONNECTED, Connected _$3$LDA1: to $1$DGA100:[JUR.LD.V90.SRC]FILE.DSK;1 -LD-I-OPTIONS, Shared %LD-I-CONNECTED, Connected _$3$LDA2: to _$3$DQA0: -LD-I-OPTIONS, Replaced, Trace active, No DSE support, Not Forced Error capable LD SHOW/TRACE/TIMESTAMP=START or END This allows selection of absolute start and end time of trace data. LD SHOW/SYMBOL This will get the LD unit number in DCL symbol LD_UNIT, and the container file specification in the symbol LD_CONTAINER. For tape it will be LM_UNIT and LM_CONTAINER. There's more accurate timing in trace messages (microsecond accuracy) (Only in VMS V8.3 and higher): $ ld show/trace lda1 I/O trace for device $3$LDA1: 17-MAY-2006 09:21:15.16 on node THEBAT End Time Elaps Pid Lbn Bytes Iosb Function --------------------------------------------------------------------- 09:21:12.232269 00.000000 2060042F 0 0 NORMAL PACKACK 09:21:12.240950 00.008581 2060042F 1 512 NORMAL READPBLK 09:21:12.247513 00.006426 2060042F 1034 512 NORMAL READPBLK 09:21:12.248595 00.000959 2060042F 50033 512 NORMAL READPBLK 09:21:12.249557 00.000838 2060042F 50034 512 NORMAL READPBLK 09:21:12.255176 00.005504 2060042F 50016 512 NORMAL READPBLK 09:21:12.263548 00.008258 2060042F 50016 512 NORMAL WRITEPBLK LD SHOW/TRACE can now show the contents of the LBN and BYTECOUNT fields in decimal and hex with /LBN=[HEX,DECICMAL] or /BYTECOUNT=[HEX,DECIMAL]. Trace data for the LM device will by default not contain the data to/from disk initiated by the driver (with a PID field of 0). To enable tracing of this data use /ALL with LD TRACE. Known issues: LM SHOW/TRACE/CONTINOUS can not yet be trusted completely, it may cause invalid data to be written to tape if used together with writing to tape. Switching volumes due to tape full on a Files-11 mounted tape may get errors. The accurate timing measurements may be way off if a cpu is stopped and restarted. Disconnecting and reconnecting the LD device will fix it. Copying .OBJ files (and possibly others) may give SS$_BADATTRIB errors. This is not stricktly an error since any copy of a file on a files-11 mounted tape may generate this error for records smaller than 14 bytes. These small records are rejected by the VMS I/O system as documented in the I/O User's reference manual. A real tape device will behave the same.