Impact of Enabling JBOD Mode on Existing RAID Arrays in LSI 2208 Controllers: Technical Deep Dive


5 views

When working with LSI 2208-based RAID controllers (like the integrated solution in Supermicro X9DRH boards), the JBOD mode toggle is indeed a controller-wide setting. The critical command:

megacli -AdpSetProp EnableJBOD 1 -a0

This fundamentally changes how the controller presents unused physical disks to the operating system. However, the behavior differs significantly between unconfigured disks and existing logical drives.

Through extensive testing across multiple LSI controller generations (2208, 3108, 3408), we've confirmed that:

  • Existing logical disks (RAID 0/1/5/6) remain fully operational
  • Array metadata and configuration are preserved
  • The controller maintains complete management of configured arrays
  • Only unconfigured physical disks become JBOD devices

Here's how to safely implement this in a production environment while monitoring array status:

# First check current array status
megacli -LDInfo -Lall -a0

# Enable JBOD mode (non-destructive)
megacli -AdpSetProp EnableJBOD 1 -a0

# Verify new JBOD disks appear in OS
lsblk

# Confirm original array remains intact
megacli -LDInfo -Lall -a0 | grep "State"

While the operation is non-destructive, consider these technical nuances:

  • Some older LSI firmware versions (before 12.12.0-0219) may show erratic behavior
  • JBOD disks won't appear in the MegaCLI configuration output
  • Always verify controller logs after the change: megacli -AdpEventLog -GetEvents -f events.log -a0

For systems requiring both RAID and direct disk access, consider creating single-disk RAID 0 volumes instead of using JBOD:

# For each disk you want as passthrough:
megacli -CfgLdAdd -r0 [32:5] -a0
# Where [32:5] represents Enclosure:Slot

This provides similar functionality while keeping all disks under controller management.


When working with LSI-based RAID controllers like the 2208 chipset, administrators often face a critical decision when needing to mix traditional RAID arrays with direct-attached JBOD disks. The core question revolves around whether enabling JBOD mode will:

  • Destroy existing RAID configurations
  • Impact currently configured logical drives (LDs)
  • Change the controller's fundamental behavior

Through extensive testing across multiple LSI controller generations (including 2208, 3108, and newer models), we've verified the behavior when executing:

# Enable JBOD mode on controller 0
megacli -AdpSetProp EnableJBOD 1 -a0

# Verify JBOD status
megacli -AdpGetProp -a0 | grep JBOD

The key findings:

  • Non-destructive operation: Existing RAID arrays remain intact and operational
  • Selective visibility: Only unconfigured disks become visible to the OS as JBOD
  • Controller persistence: The setting survives reboots but may reset during firmware updates

Consider this scenario with 6 physical disks:

# Current configuration (before JBOD enable):
Disk 0-3: RAID5 array (Logical Drive 1)
Disk 4-5: Unconfigured

# After JBOD enable:
Disk 0-3: Still RAID5 (LD1)
Disk 4-5: Now visible as /dev/sde and /dev/sdf to OS

Here's how to properly verify the configuration:

# List all physical disks
megacli -PDList -aAll | grep -E 'Enclosure|Slot|Firmware state'

# Check logical drive status
megacli -LDInfo -Lall -aAll

While the operation is non-destructive, these factors deserve attention:

  • Controller cache behavior: JBOD disks won't benefit from the controller's cache
  • Performance impact: Mixed mode may slightly reduce overall throughput
  • Monitoring implications: JBOD disks won't appear in RAID health checks

For automated environments, consider this Python snippet using the MegaCLI wrapper:

import subprocess

def toggle_jbod(controller, enable=True):
    state = 1 if enable else 0
    cmd = f"megacli -AdpSetProp EnableJBOD {state} -a{controller}"
    result = subprocess.run(cmd, shell=True, capture_output=True)
    
    if result.returncode != 0:
        raise Exception(f"JBOD toggle failed: {result.stderr.decode()}")
    
    return f"JBOD {'enabled' if enable else 'disabled'} successfully"

# Example usage
print(toggle_jbod(0, True))

Remember to always maintain current backups before making controller-level changes, regardless of the expected non-destructive nature of the operation.