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.