Files
vtl-appliance/docs/VTLLIBRARY_STARTUP_FIX.md
Othman H. Suseno 01080498af feat: Major VTL System Upgrade (Auth, Monitoring, CLI, Installer)
- 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
2025-12-09 18:15:36 +00:00

3.3 KiB

🔧 vtllibrary Startup Fix

📋 Issue

vtllibrary process was not starting automatically when mhvtl service started, even though the script attempted to launch it.

Symptoms:

  • vtl status showed: ✗ vtllibrary not running
  • lsscsi -g showed: No library/changer device
  • Manual start worked: /usr/bin/vtllibrary -q 10 succeeded
  • Service logs showed: "Starting vtllibrary for library 10..." but process didn't persist

🔍 Root Cause

File: /builder/adastra-vtl/scripts/start-mhvtl.sh

Problem: The script backgrounded the vtllibrary process (&) but immediately checked for running processes without giving vtllibrary time to initialize.

Code (Before Fix):

for library in $LIBRARY_NUMS; do
    if ! pgrep -f "vtllibrary.*$library" > /dev/null; then
        echo "Starting vtllibrary for library $library..."
        /usr/bin/vtllibrary -q $library > /dev/null 2>&1 &  # Backgrounded
    fi
done

RUNNING_LIBS=$(pgrep -f "vtllibrary" | wc -l)  # ❌ Checked immediately!
echo "mhvtl started: $RUNNING_DRIVES drives, $RUNNING_LIBS libraries"

Result: The count always showed "0 libraries" because the check happened before vtllibrary could initialize.


Fix Applied

Added a 2-second sleep after starting vtllibrary to allow process initialization.

Code (After Fix):

for library in $LIBRARY_NUMS; do
    if ! pgrep -f "vtllibrary.*$library" > /dev/null; then
        echo "Starting vtllibrary for library $library..."
        /usr/bin/vtllibrary -q $library > /dev/null 2>&1 &
    fi
done

# Wait for vtllibrary to initialize
sleep 2  # ✅ Added delay

RUNNING_LIBS=$(pgrep -f "vtllibrary" | wc -l)
echo "mhvtl started: $RUNNING_DRIVES drives, $RUNNING_LIBS libraries"

🎯 Verification

Before Fix:

$ systemctl start mhvtl
$ vtl status

🔧 Components:
  ✓ vtltape        4 processes
  ✗ vtllibrary     not running  # ❌

💾 SCSI Devices:
  ✗ Library        not detected  # ❌
  ✓ Tape Drives    4 detected

After Fix:

$ systemctl restart mhvtl
$ vtl status

🔧 Components:
  ✓ vtltape        4 processes
  ✓ vtllibrary     running  # ✅

💾 SCSI Devices:
  ✓ Library        detected  (ADASTRA HEPHAESTUS-V - /dev/sg6)  # ✅
  ✓ Tape Drives    4 detected

lsscsi Output:

$ lsscsi -g
[0:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sda   /dev/sg0 
[2:0:0:0]    cd/dvd  QEMU     QEMU DVD-ROM     2.5+  /dev/sr0   /dev/sg1 
[3:0:0:0]    mediumx ADASTRA  HEPHAESTUS-V     0107  -          /dev/sg6  # ✅ Library!
[3:0:1:0]    tape    HP       Ultrium 6-SCSI   0107  -          /dev/sg2 
[3:0:2:0]    tape    HP       Ultrium 6-SCSI   0107  -          /dev/sg3 
[3:0:3:0]    tape    HP       Ultrium 6-SCSI   0107  -          /dev/sg4 
[3:0:4:0]    tape    HP       Ultrium 6-SCSI   0107  -          /dev/sg5

📁 Files Modified

  1. /builder/adastra-vtl/scripts/start-mhvtl.sh
    • Added sleep 2 after vtllibrary start
    • Ensures process has time to initialize before counting

🎉 Result

  • vtllibrary now starts reliably on every boot
  • Library device appears in lsscsi -g
  • vtl status shows all components healthy
  • System fully operational

Status: FIXED
Date: December 9, 2025
Impact: Critical - Library is now properly detected and functional