Index
License:
GPL v2
Q. Why GPL license.
A. Because I like the idea of sharing.
I don't profess to know everything (not even close). Having something I can share and allow others to share back is a good idea.
Virtual Tape Library consists of several components.
- LLD - A low level driver implemented as a kernel module - mhvtl
- Target devices - Daemons vtltape(1) and vtllibrary(1) which implement SCSI target device(s) in user-space
- Utility commands mktape(1), vtlcmd(1)
- And startup scripts build_library_config(1), make_vtl_devices(1)
The kernel module is based on the scsi_debug kernel module (http://sg.danny.cz/sg/sdebug26.html). mhvtl.ko is a pseudo HBA (LLD). Note: As of 0.16, there are no default devices.
The support scripts will add Drives (SSC devices) & library (SMC) depending on the contents of /etc/mhvtl/library_contents and /etc/mhvtl/device.conf.
A char device back-end has been included with the vtl LLD driver This allows data and SCSI commands to be passed from the LLD to user-mode daemons (SCSI targets) which constently poll the driver and process any outstanding SCSI commands.
vtltape(1) is the usermode SSC target daemon which writes/reads data to data files in the /opt/vtl directory (if a virtual tape has been loaded). The virtual tape files include a Medium Auxiliary Memory (MAM) data structure to store persistent data (number of tape loads, total data written/read, media type etc).
vtllibrary(1) is the usermode SMC target daemon which reads its configuration from the file /etc/mhvtl/library_contents(5) at startup. The number of storage slots are built dynamically when the daemon starts. Hence changing the number of storage slots and media access slots are a matter of modifying the file contents and restarting the vtllibrary(1) daemon. All 'library' commands are performed on data structures in memory ONLY.
A utility vtlcmd(1) is used to administrator the daemons vtltape(1) and vtllibrary.
Message queue (key 0x4d61726b) is used to pass messages between vtlcmd(1), vtllibrary(1) and vtltape(1)
When a SCSI 'move medium' from a storage slot to a tape drive is requested, the media location is updated in vtllibrary(1) data structures, and the barcode of the media id is passed via the message queue to the vtltape(1) daemon in question. A file open of the barcode is attempted in the /opt/vtl directory and if successful, the vtltape(1) daemon will now return a ASC/ASCQ 0x0/0x0 to any Test Unit Ready requests. An unload SCSI command to the tape drive will close the data file.
Media can be moved out of the VTL via the Media Access Port. Once media is logically moved into the MAP slots, the MAP entries can be cleared using the vxcmd:
# vtlcmd library empty map
The media can be 'moved back again' by re-starting the VTL user-space daemons:
Media can be loaded into the MAP via a :
# vtlcmd library load map <barcode>
or restart the vtl
# /etc/init.d/mhvtl restart
TapeAlert
TapeAlert flags can be set using the vtlcmd(1)
e.g. vtlcmd [index] TapeAlert [flags]
Where index is the message Q offset associated with the drive (or the string 'library').
e.g. To set flag 14h (Clean now) the 20th bit (14h) needs to be set:
Pull out the binary to decimal calculator
1000 0000 0000 0000 0000 (20 bits) => hex => 80000
# vtlcmd 1 TapeAlert 80000
A listing of TapeAlert flags can be found at t10 home page for SSC devices Annex A.
Examples
mhvtl is registered as HBA #3:
# lsscsi -g
[0:0:0:0] disk MAXTOR ATLAS10K4_36SCA DFM0 /dev/sda /dev/sg0
[0:0:6:0] process PE/PV 1x3 SCSI BP 1.1 - /dev/sg1
[2:0:0:0] disk SEAGATE ST336607FC 0003 /dev/sdb /dev/sg2
[2:0:1:0] disk SEAGATE ST336607FC 0003 /dev/sdc /dev/sg3
[2:0:2:0] mediumx ATL 1500 6.0 - /dev/sg4
[2:0:2:1] tape QUANTUM SuperDLT1 2323 /dev/st0 /dev/sg5
[2:0:2:2] tape QUANTUM SuperDLT1 2323 /dev/st1 /dev/sg6
[2:0:2:3] process ATTO 310-LV 1.42 - /dev/sg7
[3:0:0:0] mediumx STK L700 vtl0 - /dev/sg8
[3:0:0:1] tape SONY SDX-900V 5400 /dev/st2 /dev/sg9
[3:0:0:2] tape SONY SDX-900V 5400 /dev/st3 /dev/sg10
[3:0:0:3] tape QUANTUM SDLT600 5400 /dev/st4 /dev/sg11
[3:0:0:4] tape QUANTUM SDLT600 5400 /dev/st5 /dev/sg12
[3:0:0:5] tape QUANTUM SDLT600 5400 /dev/st6 /dev/sg13
[3:0:0:6] tape IBM ULT3580-TD3 5400 /dev/st7 /dev/sg14
[3:0:0:7] tape IBM ULT3580-TD3 5400 /dev/st8 /dev/sg15
[3:0:0:8] tape IBM ULT3580-TD3 5400 /dev/st9 /dev/sg16
Long term goals
Eventually, the functionality will be moved across to the SCSI Target Framework (stgt) http://stgt.berlios.de/
The stgt is a very nicely designed SCSI taret framwork which can support all target types along with multiple SCSI transports in a very structured way.
However, until time permits (and my c coding standards improve), features and improvements on this code base will continue.
Howto get help
Somebody has put up a discussion board (and has lots of great documentation on working with different backup software)
http://mhvtl-community-forums.966029.n3.nabble.com/ - Community Forums
Howto help out
There are many way of providing assistance
- Testing with backup software X and reporting success/failure. If possible, test any patches that may result of testing.
- If you are willing, patches are very welcome.
Please read the Linux Documentation/CodingStyle
Note: I only discovered this documentation guide recently, so patches to update old code style to the CodingStyle are also welcome.
Please run any patches thru the Linux 'mhvtl-<version>/scripts/checkpatch.pl' for coding style sanity check before sending. - Pull the source from git repository (github).. Tinker till your hearts content :)
Downloads
Old vers:
Change log:
mhvtl-2010-05-09 / mhvtl-0.16-13
*** Happy Mothers Day ***
- Allow media sizes larger than 2G on 32bit platforms
- Implement STK vendor specific 'LOAD DISPLAY' (Logs info via syslog)
- Fix core dump on invalid NAA strings
- Support VENDOR ID strings with embedded spaces
- Return LOG SENSE 'Tape Capacity' in OEM format (Bytes/KB/MB values)
- Limit SMC op codes when in offline state
mhvtl-2010-03-10 / mhvtl-0.16-12
- Introduce multiple library support. Device.conf format had to change.
- Introduce script to convert old device.conf to new format
- Test media loaded on 'REZERO' op code
- Fix MAM struct size to be 1024 bytes
- Fix SPR RESERVATION bug.
- Dynamic change of device queue depth (kernel module change)
- Improve SCSI OP code logging
mhvtl-2009-12-16 / mhvtl-0.16-11
New and improved Compression: entry in device.conf (Thanks Kevan)
- Compression: factor [1-9] enabled [0|1]
Factor 1 == Fastest compression -> 9 == Best compression (zlib)
- Add tests to only allow LTO media to be mounted in LTO drives. If media is 'unknown', then the mount will succeed.
mhvtl-2009-12-02 / mhvtl-0.16-10
Fix silent data corruption (Thanks Kevan)
Increase max LUNs from 7 to 32
mhvtl-2009-11-29 / mhvtl-0.16-9
Check string length of definitions within device.conf
Compression now set/resetable via MODE SELECT. (Thanks Kevan)
- Default compression set in device.conf
Compression: X (where X is a value from 0 [off], 1 [ Fastest compression], => 9 [Best compression]
Default library INQUIRY string changed from STK/L700 to SPECTRA/PYTHON
Fix kernel compile on Ubuntu 9.10 (2.6.31+)
Fix max block size on x86_64 (Thanks Kevan)
SPIN/SPOUT: Return correct list of supported pages.
mhvtl-2009-11-10 / mhvtl-0.16-8
Add ability to compress data written to backing storage file.
Overhaul READ ELEMENT STATUS. Thanks Kevan Rehm.
Makefile overhaul.
- DESTDIR understood.
- Ability to define default location for media files & config file parent directories
- Ability to define default user/group account for mhvtl daemons.
mhvtl-2009-10-09 / mhvtl-0.16-7
Fix READ ELEMENT STATUS for All element types. Many thanks to Bernardo Clavijo for the report and fix. This bug caused TSM to core dump.
Improve (make more life like) Media Access Port access.
Added 'map open' and 'map close' options to the vtlcmd syntax.
If the MAP is open, then the 'Medium Transport Element' fails to move media to/from a MAP port.
If the MAP is closed, then the user (via vtlcmd) can not empty MAP or place new media into the MAP.
mhvtl-2009-10-01 / mhvtl-0.16-6
Fix test comparison within MHVTL_DBG macro
Fix output of the dump_tape utility
mhvtl-2009-09-15 / mhvtl-0.16-4
Bug fix only - no functionality changes. No need to rebuild kernel module from 0.16-3
Fix up VERBOSE testing with MHVTL_DBG macro
Clean up more logging message(s)
mhvtl-2009-09-02 / mhvtl-0.16-3
Increased max block size from 256k to kernel default (kernel module needs to be rebuilt)
Re-worked logging to use a single macro 'MHVTL_DBG' which will
either use syslog in verbose mode or printf if started in debug mode.
mhvtl-2009-08-15 / mhvtl-0.16-2
Changed/updated load MAP() functionality.
Previous implementation re-read config file and parsed the MAP slots.
This is 'interactive' using the vtlcmd command.
e.g. vtlcmd library load map <BARCODE>
Corrected NAA field in VPD page 0x83. This was a hard coded string.
Now reads entry from /etc/mhvtl/device.conf
' NAA: 11:22:33:44:ab:cd:ef:03' (8 octet value)
Remove dependency on sg3_utils
mhvtl-2009-08-05 / mhvtl-0.16-1
- Fix kernel module oops with logical unit removal (Many thanks to Jean-François CHALARD for the fix)
- Fill in loadMap() routine within vtllibrary (Many thanks to Jean-François CHALARD for the code)
- Fix compile issue on SLES 9
mhvtl-2009-06-09 / mhvtl-0.16-0:
- Renamed final pieces from 'vtl' to 'mhvtl' (e.g. /etc/mhvtl/ instead of /etc/vtl)
- Almost everything is handled in user-space now. As daemons start, the new logical unit is added to the pseduo hba driver. As the daemon(s) are terminated, the logical unit is removed from the pseudo hba driver.
- kernel module 'oops' if unloaded and re-loaded. It is stable otherwise. Root cause unknown at this point in time.
Stable version:
Download :
Using 'git' https://github.com/markh794/mhvtl.git
e.g. Create a directory where you are going to store the source code.
$ mkdir mhvtl
Initialise the directory as a git repository
$ git init
Pull the source code (it's only a few hundred k)
$ git pull https://github.com/markh794/mhvtl.git
From time to time, check for any updates.
$ git pull https://github.com/markh794/mhvtl.git
mhvtl-2011-05-04.tgz (builds mhvtl-0.18-15)
mhvtl-0.18-15.x86_64.rpm
mhvtl-0.18-15.i586.rpm
mhvtl-0.18-15.src.rpm
Kevan Rehm has re-written the on-disk data structure.
(It's amazing how much effort can be rolled up in one simple sentence).
Each 'tape' is now stored under its own subdirectory /opt/mhvtl/<barcode>
A tape consists of three files.
- Data file => Container of data
- Index file => Contains an array of header structures (pointers into the data file)
- Meta file => Contains the MAM structure, followed by a meta data header, followed by a variable-length array of filemark block numbers.
mhvtl-2011-05-04.tgz / mhvtl-0.18-15:
Improvements
- Implemented 'Personality Module' for each drive type
(many cleanups due to 'PM' change fallout thanks to Sebastian)
- Increase max barcode length to 16 chars
Fixes
- Inquiry no longer incorrectly reports support for TrmIOP and CmdQue
- Fixed block read/writes corruption if 'multiple blocks' specified
- Fix Device Capabilities mode page - Don't advertise EXCHANGE MEDIUM support
mhvtl-2011-03-17.tgz / mhvtl-0.18-14:
Fixes:
- kernel module build fixes for Linux kernel 2.6.37 and greater
Improvements
- Add STK T10000C media/drive support
- Always log 'fatal' errors
- Cleanup to mhvtl.spec
- Catch signals to prevent daemon terminating early.
mhvtl-2011-01-11.tgz / mhvtl-0.18-13:
Fix:
- READ ELEMENT STATUS when initiator does not allocate enough memory for full list
- Return ILLEGAL REQUEST for SCSI OP codes which are not supported.
Improvements:
- Increase SENSE buffer from 38 to 96 bytes
mhvtl-2010-11-07.tgz / mhvtl-0.18-12:
Fix:
- Positioning error if space 0 blocks/filemarks - Reported & fix thanks to Doug Charnley
- Only support SECURITY PROTOCOL IN/OUT op codes on IBM LTO4 / IBM 03592E06 and STK T10000 drive types
- Fix REQUEST SENSE. - Many thanks to Andreas Piesk
- Reworked vtllibrary SCSI OP code processing.
- Yet another round of WORM media handling issues - Thanks Albert Pauw
- Fix kernel module compile error with 2.6.34 kernels
mhvtl-2010-09-23.tgz / mhvtl-0.18-11:
Fix:
- Potential core dump where SENSE data pointer incorrectly set to NULL
- Positioning to filemark, followed by write failed to remove cached 'filemark pointer'.
This caused errors with TSM & HP Dataprotector when writing multiple sequential backups on the same piece of media.
Many thanks to Nai for testing on TSM
Many thanks to Philip for testing with HP Dataprotector
- VPD page 0x83 length incorrect (Thanks Gaetan)
- VPD NAA data field incorrect (Thanks Gaetan)
Improvements:
- Remove references to /proc
- Daemons now create their own device nodes, so no external scripts need to be run. (Note: This required assistance from the kernel module - hence the kernel module from this release needs to be compiled and used - Sorry)
- Gentoo ebuild file (Thanks Gaetan)
- RedHat/CentOS kernel module SPEC file (Thanks Dag)
- Use 'setuidgid' to start daemons if available instead of specified user account.
mhvtl-2010-09-01.tgz / mhvtl-0.18-10:
- Fix TapeAlert
- Added more descriptive logging around SPACE OP code attempting to track down problem with HP Dataprotector
- Added (undocumented) utility 'tapeexerciser' which is a simple utility to test tape read/writes and positioning. WARNING: This will overwrite your media..
- Fix 'is vtl running' logic in rc script. Failed test if 'vtl user' is root (not a recommended config)
mhvtl-2010-07-09.tgz / mhvtl-0.18-9:
- Fix WORM handling - Reported by Albert Pauw
- Fix (finished) LTO5 drive & media handling introduced in 0.18-8
mhvtl-2010-06-23.tgz / mhvtl-0.18-8:
- Several Security Protocol IN updates - thanks Albert Pauw
* Return certificate data
* Correct length for 'KEY FORMATS'
* Correct length for SPIN SUPPORTED PAGES
- Fix kernel compile on RedHat AS4
- Media/drive matching now 'dynamic' and defined in device.conf
- Added man page for device.conf
- Fix media corruption when media is 'formatted'
- Add LTO5 & SDLT-S4 drive/media types
- Handle INQUIRY correctly after media change (return SAM_STAT_GOOD)
- Updated rc script so all devices created on Target & LUN. i.e. Don't use
channel. Some application software has trouble if only the channel is unique.
mhvtl-2010-05-08.tgz / mhvtl-0.18-7:
Fix: 32bit platforms - Allow media size to be greater than 2G
Fix: core dump on invalid defined NAA strings
Fix: Support SMC devices with embedded space chars in VENDOR ID
Implement STK Vendor unique LOAD DISPLAY SCSI op code. (Logs display info via syslog)
mhvtl-2010-05-02.tgz / mhvtl-0.18-6:
Fix: vtlcmd command line parsing. Fix 'list map' option
Fix: import of media via MAP (off-by-one)
Fix: TapeCapacity LOG SENSE data.
Now returns bytes/KB/MB as per OEM (Thanks 'kamy')
Support VENDOR ID with embedded spaces. i.e. "HP Ultrium"
Honour MAP status: Fail attempts for robot to move media in CAP if CAP is open.
Relax dependencies on /proc in favour of /sys (note: Work in progress)
mhvtl-2010-04-01.tgz / mhvtl-0.18-5:
Fix: vtlcmd command line parsing. Thanks Herbert Stadler
Fix: Silence local_irq_save(). Normally seen on fedora. Thanks Norm Lunda
Fix: URLs to this homepage.
mhvtl-2010-03-05.tgz / mhvtl-0.18-4:
Fix: ELEMENT STATUS - found and fixed by Norm Lunde (many thanks)
- This was preventing TSM to work with mhvtl
Add queue depth() callback in kernel module (module date string 20100303)
Test for media mounted before returning status on 'REWIND' op code.
Fix typos in rc script
mhvtl-2010-01-28.tgz / mhvtl-0.18-2...rpm:
The ability to support multiple libraries on the one host !! Thanks once again to Kevan.
Note: There is no conversion of existing configuration file(s) to the new device.conf/library_contents format. Please remove all files under /etc/mhvtl/ before installing mhvtl-2010-01-28 (mhvtl-0.18-2)
Development version:
mhvtl-2010-11-29.tgz (builds mhvtl-0.19.1)
mhvtl-0.19-1.i586.rpm
mhvtl-0.19-1.x86_64.rpm
mhvtl-0.19-1.src.rpm
This should be functionally equivalent with 0.18-12
Sorry, no git version yet. I keep 'rebasing' the 0.19 release on top of the 0.18. This makes a very poor public git repository.
mhvtl-2010-11-29.tgz / mhvtl-0.19-1:
- Fix MODE SELECT
- Fix End of Data detection.
- Add '-v' switch to 'vtlcmd' which will return version of mhvtl
NOTE: The next release will use xml format for the configuration file. Please join us at the forum to have your say in the process.
http://mhvtl-community-forums.966029.n3.nabble.com/
mhvtl-0.19 release:
This version is being re-organized so device types will have their own private functions/routines via a plugin interface. Rather than a sprinkling of 'if (drive_type == ult3580TD4)' tests spread through out the code.
Functionality like:
- Encryption support
- Supported mode pages
- WORM support
- set/clear compression
The plugin flow is something like:
main()
-> config_lu() {
if ULT3580-TD4
-> init_ult3580_td4()
else if ULT3580-TD5
-> init_ult3580_td5()
else if STK T10000
-> init_t10k()
......
else
-> init_default_ssc()
}
The init_ult3580_td4() registers a 'personality module template' which is a big jump table with (in this example) ult3580_td4 specific routines and it's own list of mode pages.
What hardware does the mhvtl code base work with:
Tested and developed on Pentium x86 (32bit) and Pentium / AMD x86_64
New: IBM Z-Series. To quote:
"
We just fired up the VTL on our z series IBM mainframe. Works like a charm."
What software does it work with:
Symantec NetBackup.
- 5.1 (Recommend 5.1MP4 minimum)
- 6.0
- 6.5.x
- 7.0
- 7.1Beta
- Supports SCSI Persistent Reservation
- Encryption via KMS (NetBackup 6.5.2 and later)
Note: All mhvtl code development is tested using NetBackup
Last set of testing (0.18-8 & -9) with NetBackup 7.0, I had to revert the 'STK/L700' to 'SPECTRA/PYTHON' change made back in Nov 2009. It's just a manual edit of /etc/mhvtl/device.conf
The problem is that NetBackup 7.0 fails to extract the device serial number if SPECTRA/PYTHON is used and hence the automagic device discovery & configuration fails to place the drives within the robot.
Symantec BackupExec.
For the extraordinary writeup :
http://mhvtl.nimsa.us/viewtopic.php?f=24&t=37
Includes how to setup the scst (
http://mhvtl.nimsa.us/viewtopic.php?f=23&t=32) to present the vtl via iSCSI
I've receive updates from a anonymous contributor identified as 'nia':
EMC/Legato NetWorker
Is no longer causing headaches !
Don't use 'STK/L700' Use 'SPECTRA/PYTHON' instead.
Install at least mhvtl-2009-12-16.tgz (mhvtl-0.16-11).
Update: The latest mhvtl-2010-09-23.tgz (mhvtl-0.18-11) is a smoother ride when configuring the library using jbconfig.
Build kernel module from source (Note: /usr/src/packages/ is a SuSE RPM home dir. If you building on RedHat, then this will be /usr/src/redhat/)
# rpm -Uvh mhvtl-0.18-11.src.rpm
# cd /usr/src/packages/BUILD
# tar xvfz ../SOURCES/mhvtl-2009-11-23.tgz
# cd mhvtl-0.18/kernel
# make
# make install
Start the daemons
/etc/init.d/mhvtl start
Configure NetWorker as normal via jbconfig.
An ex colleague who has some very useful/helpful tips with NetWorker (If your interested in NetWorker, his blogs & tips are well worth following)
A detailed setup of CentOS + NetWorker, see:
http://nsrd.info/blog/2010/10/14/new-micromanual-linuxvtl-and-networker/
Bakbone Netvault
(2010-01-09) Thanks to Nick Couchman who has reported NetVault 8.x and mhvtl-2009-12-16 (mhvtl-0.16-11) do indeed work together.
To quote Nick "
I have a NetVault 8.x installation here that I'm using, and I just installed LinuxVTL2 and am successfully backing up data from NetVault to LinuxVTL2. I'm not sure if any issues exist for restores and the link, but I'll let you know if I run into anything. All appears to be working fine at this point! FWIW I'm running my NetVault server on RHEL5."
TSM
Thanks to Bernardo Clavijo, TSM now works with mhvtl - Need at least 0.18-4 release.
Bacular
A report from Beat Rubischon to advise Bacular works also.
Two changes were needed on Bacula's
bacula-sd.conf:
Device {
Name = Drive-1
Drive Index = 0
Media Type = LTO-4
Archive Device = /dev/nst0
AutomaticMount = yes;
AlwaysOpen = yes;
RemovableMedia = yes;
RandomAccess = no;
AutoChanger = yes
Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
# Needed for mhvtl tape drives
Hardware End of Medium = No
Fast Forward Space File = No
}
Multiple tape drives are supported too.
New: 2010-05-21
Report by Albert Pauw.. Many thanks.
# Needed for mhvtl tape drives
Hardware End of Medium = No
Fast Forward Space File = No
I have used it this way for the last two months, but due to some questions on the mhvtl forum I tried
bacula without these additions. Seems the latest versions of mhvtl work out of the box with bacula,
so these additions are not needed anymore.
Getting Started
RPM based Linux distributions:
To install and get the package running:
1. Install both src.rpm & x86/x86_64 (depending on your CPU/OS version - check using uname -p)
2. Build kernel module from source you just installed:
Note: The directory in the example below is a SuSE RPM home dir (/usr/src/packages)
If you are installing on RedHat, this will be /usr/src/redhat instead. Other RPM distributions
may have different default RPM home directories.
cd /usr/src/packages/BUILD
tar xvfz ../SOURCES/mhvtl-2010-09-23.tgz
cd mhvtl-0.18/kernel
make
make install
3. Start the package using the rc script.
/etc/init.d/mhvtl start
4. Check it's all running:
lsscsi -g
ps -ef|grep vtl (default with 10 daemons - 2 vtllibrary & 8 vtltape)
5. Configure your backup software ;)
NON-RPM based Linux distributions:
To install and get the package running:
1. Download the 'mhvtl-YYYY-MM-DD.tgz
2. Extract source code
cd /some/where/safe
tar xvfz /where/you/downloaded/mhvtl-YYYY-MM-dd.tgz
3. Build user-space daemons
cd mhvtl-0.18 (or mhvtl-0.16 if you downloaded the 'stable' version)
make
4. Add a user 'vtl'
sudo useradd -c "mhvtl user" vtl
5. Install binaries
sudo make install
6. Build kernel module from source you just installed:
cd kernel
make
make install
7. Start the package using the rc script.
/etc/init.d/mhvtl start
8. Check it's all running:
lsscsi -g
ps -ef|grep vtl (default with 10 daemons - 2 vtllibrary & 8 vtltape)
9. Configure your backup software ;)
Some nice things people are saying about the mhvtl
- It's really caught on here, I've noticed that some of our developers have stopped using real tape hardware altogether, it's just easier to use the VTL. Plus our customer support has started doing customer training with the VTL instead of real tape hardware. Pretty impressive! A fine piece of software, wish I had found it a few years earlier.
- The VTL has been very helpful in my testing and for customer demos. Your hard work on this is very much appreciated by myself and others on my team.
- I am one more user of your magical software vtl here at Symantec. Just want to say that it rocks
- I finally got round to trying to get this set up and I have to say.. You are a genius ! My laptop now has NBU 6.5.1 on Redhat 4 AS (on VMware) with a VTL robot and 8 drives !! Fantastic ! Thanks for all your work on this ! This will be very useful for me.
I can be reached via mark_harvey@symantec.com or markh794@gmail.com