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 <noreply@anthropic.com>
This commit is contained in:
+20
-14
@@ -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."
|
||||
|
||||
Reference in New Issue
Block a user