The BusLogic auto-fix feature automatically detects and fixes VMDKs with BusLogic SCSI controllers during migration, enabling successful conversion to KVM/libvirt without requiring VMware reconfiguration.
BusLogic is a legacy SCSI controller that:
Previously, the only solution was:
Problem: Requires VMware access and VM downtime.
The auto-fix feature eliminates the need for VMware reconfiguration by:
ddb.adapterType = "buslogic" → "lsilogic"During VMDK inspection, the inspector parses the VMDK descriptor and detects:
ddb.adapterType = "buslogic"
This triggers a FATAL risk:
❌ [FATAL] Legacy controller 'buslogic' unsupported on KVM - no driver available
When BusLogic is detected, the auto-fix automatically:
with open(vmdk_path, 'r', errors='ignore') as f:
lines = f.readlines()
OLD: ddb.adapterType = "buslogic"
NEW: ddb.adapterType = "lsilogic"
workdir config)/tmp space issues{workdir}/hyper2kvm-buslogic-fix-{random}/filename-flat.vmdkThe fixed VMDK is used for the rest of the migration pipeline:
virtio_blk, virtio_scsi, virtio_netbus=virtioThe auto-fix is always enabled when BusLogic is detected. No configuration needed.
cmd: local
vmdk: /path/to/buslogic.vmdk
output_dir: /output/directory
workdir: /home/user/tmp # Use location with adequate space
# Ensure virtio drivers are injected
regen_initramfs: true
initramfs_add_drivers:
- virtio
- virtio_blk
- virtio_scsi
- virtio_net
- virtio_pci
update_grub: true
fstab_mode: stabilize-all
workdir: Set to a location with sufficient disk space
/tmp if it’s a small tmpfsregen_initramfs: Must be true (default)
🔍 Migration Risk Analysis:
❌ [FATAL] Legacy controller 'buslogic' unsupported on KVM - no driver available
======================================================================
⚠️ FATAL: 1 CRITICAL risk(s) detected!
======================================================================
❌ Legacy controller 'buslogic' unsupported on KVM - no driver available
🔧 ATTEMPTING AUTOMATIC BUSLOGIC FIX...
Rewriting VMDK descriptor: BusLogic → LSI Logic
(LSI Logic has KVM driver + virtio injection support)
🔧 Auto-fixing BusLogic controller...
Changing: ddb.adapterType = "buslogic" → "lsilogic"
Old: ddb.adapterType = "buslogic"
New: ddb.adapterType = "lsilogic"
Copied extent: filename-flat.vmdk
✅ Fixed VMDK: /workdir/hyper2kvm-buslogic-fix-xxxxx/filename.vmdk
✅ BusLogic auto-fix complete!
Using fixed VMDK: /workdir/hyper2kvm-buslogic-fix-xxxxx/filename.vmdk
💡 Recommended solutions:
✅ BusLogic auto-fixed: Descriptor rewritten to LSI Logic
Migration will continue with virtio driver injection
✅ FATAL RISK AUTO-FIXED: Continuing migration with fixed VMDK
======================================================================
📌 Using auto-fixed VMDK: /workdir/hyper2kvm-buslogic-fix-xxxxx/filename.vmdk
➡️ Offline filesystem fixes
...
Running (guestfs): dracut -f --kver 4.18.0-432.el8.x86_64 --add-drivers virtio_blk virtio_scsi virtio_net
...
✅ Conversion complete
File: Auto-esx8.0-rhel8.8-multi-same-specifications.vmdk
OS: Red Hat Enterprise Linux 8.8 Beta
Controller: BusLogic (FATAL)
sudo python -m hyper2kvm --config /path/to/config.yaml
cmd: local
vmdk: /home/ssahani/Downloads/Auto-esx8.0-rhel8.8-multi-same-specifications.vmdk
output_dir: /home/ssahani/rhel88-buslogic-autofix
to_output: rhel88-autofix.qcow2
out_format: qcow2
workdir: /home/ssahani/tmp
regen_initramfs: true
initramfs_add_drivers:
- virtio
- virtio_blk
- virtio_scsi
- virtio_net
- virtio_pci
update_grub: true
fstab_mode: stabilize-all
verbose: 2
✅ Auto-fix: SUCCESS
Descriptor rewritten: buslogic → lsilogic
Extent copied: 16 GB
✅ Conversion: SUCCESS
VMDK → qcow2: 16 GB → 7.4 GB
Virtio drivers injected
✅ Deployment: SUCCESS
VM Name: rhel88-buslogic-fixed
Status: running
VNC: vnc://localhost:0
✅ Boot: SUCCESS
Login screen visible via VNC
VM fully operational
Original (BusLogic):
# Disk DescriptorFile
version=1
CID=12345678
parentCID=ffffffff
createType="vmfs"
# Extent description
RW 33554432 VMFS "Auto-esx8.0-rhel8.8-multi-same-specifications-flat.vmdk"
# The Disk Data Base
ddb.adapterType = "buslogic"
ddb.geometry.cylinders = "2088"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
Fixed (LSI Logic):
# Disk DescriptorFile
version=1
CID=12345678
parentCID=ffffffff
createType="vmfs"
# Extent description
RW 33554432 VMFS "Auto-esx8.0-rhel8.8-multi-same-specifications-flat.vmdk"
# The Disk Data Base
ddb.adapterType = "lsilogic" # ← Changed from "buslogic"
ddb.geometry.cylinders = "2088"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
File: hyper2kvm/orchestrator/disk_processor.py
Method: _fix_buslogic_controller(vmdk_path: Path) -> Path
Location: Lines 288-345
Integration:
_inspect_vmdk() when BusLogic detected (lines 420-428)VMDKInspectionResult.fixed_vmdk_path (line 424)process_single_disk() (lines 500-503)✅ Monolithic VMDKs (descriptor + extent in same file) ✅ Split VMDKs (separate descriptor + extent files) ✅ Sparse VMDKs ✅ Flat VMDKs ✅ VMFS-backed VMDKs ✅ Thin-provisioned VMDKs
❌ Multi-disk VMs (each disk fixed independently) ❌ Snapshot chains (consolidate snapshots first) ❌ Linked clones (export as full clone first)
Error:
❌ BusLogic auto-fix failed: [Errno 28] No space left on device
Solution:
Set workdir to a location with adequate space:
workdir: /home/user/large-disk/tmp
Symptoms:
Causes:
Solution: Check conversion logs for:
Running (guestfs): dracut -f --kver <version> --add-drivers virtio_blk virtio_scsi virtio_net
If missing, ensure regen_initramfs: true in config.
Concern: “Will auto-fix modify my original VMDK?”
Answer: NO. The auto-fix:
| Original VMDK | Temporary Fixed VMDK | Total Space Needed |
|---|---|---|
| 16 GB | 16 GB | 32 GB |
| 50 GB | 50 GB | 100 GB |
| 100 GB | 100 GB | 200 GB |
Note: Temporary copy deleted after conversion completes.
1. User: "Migrate this BusLogic VMDK"
2. hyper2kvm: ❌ FATAL: BusLogic unsupported - ABORT
3. User: Must go to VMware, change controller, re-export
4. User: Retry migration with fixed VMDK
Total time: Hours (VMware access required)
1. User: "Migrate this BusLogic VMDK"
2. hyper2kvm: ⚠️ BusLogic detected → Auto-fixing...
3. hyper2kvm: ✅ Fixed → Continuing migration
4. User: VM boots successfully
Total time: Minutes (no VMware access needed)
The auto-fix only modifies:
ddb.adapterType field (single line change)workdir location--no-cleanup to preserve for debugging (future feature)buslogic_auto_fix: true/false)A: No. The auto-fix operates on the exported VMDK file, not the VMware VM. Your VMware VM remains completely unchanged.
A: Currently, auto-fix is always enabled when BusLogic is detected. To disable, use --skip-vmdk-inspection (but this skips ALL inspection, not just auto-fix).
A: Migration continues with original VMDK (non-blocking). A warning is logged:
❌ BusLogic auto-fix failed: <reason>
Migration will continue with original VMDK
VM may not boot, but you’ll get a migration report with details.
A: Yes, but Windows requires additional virtio driver injection (separate feature). For Windows:
A: Yes! The fixed VMDK has LSI Logic controller, which VMware fully supports. You can:
workdir configurationFor issues with BusLogic auto-fix:
workdir has sufficient spaceregen_initramfs: true in configFeature implemented based on user feedback:
“ok I cant see the login screen can we change the buslogic dynamically if we detected so”
Result: Automatic BusLogic detection and descriptor rewriting. VM boots successfully.