- Web UI: - Added secure Authentication system (Login, 2 Roles: Admin/Viewer) - Added System Monitoring Dashboard (Health, Services, Power Mgmt) - Added User Management Interface (Create, Delete, Enable/Disable) - Added Device Mapping view in iSCSI tab (lsscsi output) - Backend: - Implemented secure session management (auth.php) - Added power management APIs (restart/shutdown appliance) - Added device mapping API - CLI: - Created global 'vtl' management tool - Added scripts for reliable startup (vtllibrary fix) - Installer: - Updated install.sh with new dependencies (tgt, sudoers, permissions) - Included all new components in build-installer.sh - Docs: - Consolidated documentation into docs/ folder
7.0 KiB
🌐 Web UI Fix Report - Drive ID Convention
📋 Issue Found
The web UI was generating incorrect drive IDs in the device.conf file, using sequential 0-based numbering (00, 01, 02, 03) instead of following the MHVTL convention.
❌ Previous Behavior
Generated Configuration:
Library: 10 CHANNEL: 00 TARGET: 00 LUN: 00
Drive: 00 CHANNEL: 00 TARGET: 01 LUN: 00 # ❌ Wrong!
Drive: 01 CHANNEL: 00 TARGET: 02 LUN: 00 # ❌ Wrong!
Drive: 02 CHANNEL: 00 TARGET: 03 LUN: 00 # ❌ Wrong!
Drive: 03 CHANNEL: 00 TARGET: 04 LUN: 00 # ❌ Wrong!
Problem:
- Drive IDs started from 00, 01, 02, 03
- This caused
vtllibraryto fail with:error: Can not find entry for '0' in config file - Library (changer) would not be detected in
lsscsi -g
✅ Fix Applied
MHVTL Drive ID Convention
Rule: Drive ID = Library ID (tens digit) + Slot Number (ones digit)
For Library 10:
- Slot 1 → Drive ID 11 (10 + 1)
- Slot 2 → Drive ID 12 (10 + 2)
- Slot 3 → Drive ID 13 (10 + 3)
- Slot 4 → Drive ID 14 (10 + 4)
For Library 30:
- Slot 1 → Drive ID 31 (30 + 1)
- Slot 2 → Drive ID 32 (30 + 2)
✅ Corrected Configuration
Library: 10 CHANNEL: 00 TARGET: 00 LUN: 00
Drive: 11 CHANNEL: 00 TARGET: 01 LUN: 00 # ✅ Correct!
Drive: 12 CHANNEL: 00 TARGET: 02 LUN: 00 # ✅ Correct!
Drive: 13 CHANNEL: 00 TARGET: 03 LUN: 00 # ✅ Correct!
Drive: 14 CHANNEL: 00 TARGET: 04 LUN: 00 # ✅ Correct!
🔧 Changes Made
1. Updated addDrive() Function
File: /builder/adastra-vtl/web-ui/script.js
Before:
function addDrive(driveType = 'IBM ULT3580-TD5') {
const driveId = driveCounter++;
const drive = {
id: driveId,
driveNum: drives.length, // ❌ 0, 1, 2, 3...
// ...
};
}
After:
function addDrive(driveType = 'IBM ULT3580-TD5') {
const driveId = driveCounter++;
const slot = drives.length + 1;
const libraryId = 10;
// MHVTL Convention: Drive ID = Library ID (tens) + Slot (ones)
const driveNum = libraryId + slot; // ✅ 11, 12, 13, 14...
const drive = {
id: driveId,
driveNum: driveNum,
// ...
};
}
2. Updated removeDrive() Function
Recalculates drive numbers when a drive is removed to maintain correct numbering:
function removeDrive(driveId) {
// ... remove drive ...
// Recalculate drive numbers and slots using MHVTL convention
drives.forEach((drive, idx) => {
const slot = idx + 1;
drive.slot = slot;
drive.driveNum = drive.libraryId + slot; // ✅ Recalculate
});
// Re-render drives
document.getElementById('drives-container').innerHTML = '';
drives.forEach(drive => renderDrive(drive));
}
3. Enhanced updateDrive() Function
Automatically recalculates drive number when Library ID or Slot changes:
function updateDrive(driveId, field, value) {
const drive = drives.find(d => d.id === driveId);
if (drive) {
drive[field] = value;
// Recalculate drive number if library ID or slot changes
if (field === 'libraryId' || field === 'slot') {
drive.driveNum = drive.libraryId + drive.slot; // ✅ Auto-recalculate
// Re-render to update the display
document.getElementById('drives-container').innerHTML = '';
drives.forEach(d => renderDrive(d));
}
}
}
4. Added Documentation
Added comprehensive documentation at the top of script.js:
/**
* MHVTL Configuration Web UI
*
* IMPORTANT: MHVTL Drive ID Convention
* -------------------------------------
* Drive IDs must follow the format: Library ID (tens digit) + Slot Number (ones digit)
*
* Examples for Library 10:
* - Slot 1 → Drive ID 11 (10 + 1)
* - Slot 2 → Drive ID 12 (10 + 2)
* - Slot 3 → Drive ID 13 (10 + 3)
* - Slot 4 → Drive ID 14 (10 + 4)
*
* Examples for Library 30:
* - Slot 1 → Drive ID 31 (30 + 1)
* - Slot 2 → Drive ID 32 (30 + 2)
*
* This convention is enforced throughout the UI to ensure compatibility with mhvtl.
*/
🎯 Impact
Before Fix:
- ❌ Generated configs would cause
vtllibraryto fail - ❌ Library/changer would not be detected
- ❌ Users would need to manually edit generated configs
- ❌ Inconsistent with MHVTL documentation and examples
After Fix:
- ✅ Generated configs work correctly with MHVTL
- ✅ Library/changer is properly detected
- ✅ No manual editing required
- ✅ Follows MHVTL best practices and conventions
- ✅ Auto-recalculates when Library ID or Slot changes
- ✅ Maintains correct numbering when drives are added/removed
🧪 Testing
Test Case 1: Default Configuration
Action: Open web UI, use default 4 drives
Expected Result:
Drive: 11 CHANNEL: 00 TARGET: 01 LUN: 00
Drive: 12 CHANNEL: 00 TARGET: 02 LUN: 00
Drive: 13 CHANNEL: 00 TARGET: 03 LUN: 00
Drive: 14 CHANNEL: 00 TARGET: 04 LUN: 00
Test Case 2: Change Library ID
Action: Change Library ID from 10 to 30
Expected Result:
Drive: 31 CHANNEL: 00 TARGET: 01 LUN: 00 # Auto-updated!
Drive: 32 CHANNEL: 00 TARGET: 02 LUN: 00 # Auto-updated!
Drive: 33 CHANNEL: 00 TARGET: 03 LUN: 00 # Auto-updated!
Drive: 34 CHANNEL: 00 TARGET: 04 LUN: 00 # Auto-updated!
Test Case 3: Remove Middle Drive
Action: Remove Drive 12 (slot 2)
Expected Result:
Drive: 11 CHANNEL: 00 TARGET: 01 LUN: 00 # Slot 1
Drive: 12 CHANNEL: 00 TARGET: 02 LUN: 00 # Slot 2 (renumbered)
Drive: 13 CHANNEL: 00 TARGET: 03 LUN: 00 # Slot 3 (renumbered)
📁 Files Modified
-
/builder/adastra-vtl/web-ui/script.js- Updated
addDrive()function - Updated
removeDrive()function - Enhanced
updateDrive()function - Added documentation header
- Updated
-
/var/www/html/mhvtl-config/script.js- Deployed updated version to web server
🚀 Deployment
The fix has been automatically deployed to the web server:
# Updated file location
/var/www/html/mhvtl-config/script.js
# Access URL
http://localhost/mhvtl-config/
Users can now:
- Open the web UI
- Configure library and drives
- Export
device.conf - Apply configuration directly to the server
- No manual editing required!
📚 Related Documentation
- Library Fix Report:
/builder/adastra-vtl/LIBRARY_FIX_REPORT.md - MHVTL iSCSI Guide:
/builder/adastra-vtl/MHVTL_ISCSI_BINDING_GUIDE.md - Web UI README:
/builder/adastra-vtl/web-ui/README.md
✅ Verification Checklist
- Drive ID calculation follows MHVTL convention
- Auto-recalculation when Library ID changes
- Auto-recalculation when Slot changes
- Correct renumbering when drives are removed
- Documentation added to code
- Changes deployed to web server
- Compatible with existing MHVTL installations
Status: ✅ FIXED
Date: December 9, 2025
Tested On: Ubuntu 24.04.3 LTS
Web Server: Apache 2.4
PHP Version: 8.x