From 89f8a453b70954e5398c270b8475e380002908c4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 27 Jun 2026 04:58:31 +0000 Subject: [PATCH] fix: perc-nonraid.sh add JBOD controller enable and per-drive JBOD state H730 requires two steps: enable JBOD on the controller, then set each UGood drive to JBOD state. Without both, drives show in perccli but are invisible to lsblk/the OS. Also skip Onln drives (OS RAID members). Co-Authored-By: Claude Sonnet 4.6 --- scripts/perc-nonraid.sh | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/scripts/perc-nonraid.sh b/scripts/perc-nonraid.sh index d343cfa..e3ee789 100755 --- a/scripts/perc-nonraid.sh +++ b/scripts/perc-nonraid.sh @@ -1,10 +1,12 @@ #!/usr/bin/env bash -# Convert PERC H730 drives to Non-RAID (per-disk passthrough) mode. +# Convert PERC H730 drives to JBOD (per-disk passthrough) mode. # Run once on the Proxmox host before assigning drives to VMs. # Requires: perccli (install from Dell's website or local .deb) # -# Dell PERC H730 does not have a true HBA/IT mode. Non-RAID mode is the -# equivalent — each disk is presented directly to the OS with SMART intact. +# Dell PERC H730 requires two steps to expose drives to the OS: +# 1. Enable JBOD mode on the controller +# 2. Set each unconfigured drive to JBOD state +# Without both steps, drives show as UGood in perccli but are invisible to lsblk. set -euo pipefail @@ -29,23 +31,26 @@ echo "=== Drives on controller 0 ===" $PERCCLI /c0 /eall /sall show echo "" -read -rp "Proceed with converting all non-OS drives to Non-RAID mode? [y/N] " confirm +read -rp "Proceed with converting all non-OS drives to JBOD mode? [y/N] " confirm [[ "$confirm" =~ ^[Yy]$ ]] || { echo "Aborted."; exit 0; } -# Identify enclosure IDs (typically 8 for the internal backplane on R730xd) +# Step 1: Enable JBOD mode on the controller +echo "" +echo "--- Enabling JBOD mode on controller 0 ---" +$PERCCLI /c0 set jbod=on +echo "" + +# Step 2: Set each UGood drive to JBOD state so the OS can see it +# Only targets UGood drives — skips Onln drives (OS RAID members) ENCLOSURES=$($PERCCLI /c0 /eall show | awk '/^[0-9]/{print $1}' | sort -u) for enc in $ENCLOSURES; do - echo "" echo "=== Processing enclosure $enc ===" - SLOTS=$($PERCCLI /c0 /e"$enc" /sall show | awk '/UGood|Onln|JBOD|DHS/{print $2}' | sort -u) + SLOTS=$($PERCCLI /c0 /e"$enc" /sall show | awk '/UGood/{print $2}' | sort -u) for slot in $SLOTS; do - echo -n " Slot $slot: setting to Good... " - $PERCCLI /c0 /e"$enc" /s"$slot" set good force 2>&1 | grep -i "success\|error\|already" || true - - echo -n " Slot $slot: setting to Non-RAID... " - $PERCCLI /c0 /e"$enc" /s"$slot" set nonraid 2>&1 | grep -i "success\|error\|already" || true + echo -n " Slot $slot: setting to JBOD... " + $PERCCLI /c0 /e"$enc" /s"$slot" set jbod 2>&1 | grep -i "success\|error\|already" || true done done @@ -54,5 +59,6 @@ echo "=== Final drive state ===" $PERCCLI /c0 /eall /sall show echo "" -echo "Done. Reboot the host for changes to take full effect." -echo "After reboot, run build-bay-map.sh to map bays to /dev/disk/by-id paths." +echo "Done. Drives should now be visible to the OS (check with lsblk)." +echo "No reboot required — drives appear immediately after JBOD transition." +echo "Run build-bay-map.sh to map bays to /dev/disk/by-id paths."