Merge pull request #11 from outis1one/claude/bios-vt-power-settings-mxjh0x
Claude/bios vt power settings mxjh0x
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,485 +0,0 @@
|
||||
# Dell R730xd — Proxmox VE 9.1 Setup Guide
|
||||
|
||||
Complete walkthrough from bare metal to running VMs with GPU passthrough,
|
||||
Coral USB, and per-VM disk assignments.
|
||||
|
||||
---
|
||||
|
||||
## What You Need Before Starting
|
||||
|
||||
- USB drive (8GB+) for the Proxmox installer
|
||||
- A second machine or phone to read this guide and SSH
|
||||
- The iDRAC IP or physical access to a monitor + keyboard
|
||||
- Internet connection on the server
|
||||
|
||||
---
|
||||
|
||||
## Phase 1 — Firmware Updates (do this first)
|
||||
|
||||
Outdated firmware causes mysterious IOMMU failures and fan issues. Do this
|
||||
before anything else.
|
||||
|
||||
### Option A: Lifecycle Controller (no extra tools needed)
|
||||
|
||||
1. Power on the server, press **F10** when you see the Dell splash screen
|
||||
2. Lifecycle Controller → **Firmware Update** → Check for updates
|
||||
3. Point it at downloads.dell.com or a local repo
|
||||
4. Update **iDRAC**, **BIOS**, **PERC H730**, and any NIC/HBA firmware
|
||||
5. Let it reboot as many times as it needs
|
||||
|
||||
### Option B: Dell System Update (DSU) from bootable USB
|
||||
|
||||
A faster alternative if Lifecycle Controller is slow or unavailable — Dell
|
||||
provides a bootable ISO that auto-detects and applies all updates.
|
||||
|
||||
---
|
||||
|
||||
## Phase 2 — iDRAC Setup
|
||||
|
||||
iDRAC is the out-of-band management interface. You need it configured for the
|
||||
fan control script to work later.
|
||||
|
||||
1. Power on → press **F2** to enter System Setup → **iDRAC Settings**
|
||||
2. **Network:**
|
||||
- Set a static IP (easier than DHCP for a server)
|
||||
- Note the IP — you'll use it for the fan control ipmitool commands
|
||||
3. **User configuration:**
|
||||
- Change the default `root` password
|
||||
4. **IPMI over LAN:**
|
||||
- iDRAC Settings → Network → IPMI Settings → **Enable IPMI over LAN: On**
|
||||
- This is required for `ipmitool` fan control from the Proxmox host
|
||||
|
||||
---
|
||||
|
||||
## Phase 3 — BIOS Settings
|
||||
|
||||
Still in F2 System Setup. These settings are **required** for GPU and USB
|
||||
passthrough to work.
|
||||
|
||||
| Menu path | Setting | Value |
|
||||
|-----------|---------|-------|
|
||||
| Processor Settings | Virtualization Technology | **Enabled** |
|
||||
| Processor Settings | C States | **Disabled** |
|
||||
| PCI Configuration | SR-IOV Global Enable | **Enabled** |
|
||||
| Boot Settings → BIOS Boot Settings | Boot Mode | **UEFI** (not Legacy/BIOS) |
|
||||
| System Profile Settings | System Profile | **Custom** |
|
||||
| System Profile Settings | CPU Power Management | **Maximum Performance** |
|
||||
|
||||
> **VT for Direct I/O (VT-d):** Newer R730xd BIOS versions (2.19+) removed
|
||||
> this toggle — VT-d is enabled by default. Don't worry if you can't find it.
|
||||
> Verify it's active after Proxmox is installed: `dmesg | grep -i iommu`
|
||||
> should show `DMAR: IOMMU enabled`. The kernel cmdline (`intel_iommu=on
|
||||
> iommu=pt`) in Phase 9 is still required.
|
||||
>
|
||||
> **Hard Disk Drive Sequencing** was also removed in newer BIOS — it is no
|
||||
> longer present and is not needed.
|
||||
|
||||
> **Boot Mode must be UEFI.** Proxmox's EFI boot tool (`proxmox-boot-tool`)
|
||||
> only works with UEFI. Legacy BIOS mode breaks the GPU passthrough script.
|
||||
|
||||
**Apply and exit. The server will reboot.**
|
||||
|
||||
---
|
||||
|
||||
## Phase 4 — H730 RAID Configuration (pre-Proxmox)
|
||||
|
||||
The two 2.5" rear drives are your Proxmox OS drives. You want them mirrored
|
||||
so a single drive failure doesn't take down the hypervisor.
|
||||
|
||||
The 3.5" drives will be converted to non-RAID later **from within Proxmox**
|
||||
using the `perc-nonraid.sh` script — do not touch them here.
|
||||
|
||||
### Configure the 2.5" OS drives
|
||||
|
||||
1. Reboot → press **Ctrl+R** during POST to enter the H730 configuration
|
||||
utility (or use Lifecycle Controller → RAID Configuration)
|
||||
2. Select the controller
|
||||
3. Find the two 2.5" rear drives
|
||||
4. **Create new virtual disk:**
|
||||
- RAID level: **RAID 1** (mirror)
|
||||
- Select both 2.5" drives
|
||||
- Strip size: 64KB (default)
|
||||
- Name: `OS-Mirror` (optional)
|
||||
- Initialize: **Fast Initialize**
|
||||
5. Press **Ctrl+Alt+Delete** to reboot
|
||||
|
||||
The H730 now presents a single ~X GB RAID1 virtual disk to the OS. Proxmox
|
||||
will install onto this and never know there are two physical drives behind it.
|
||||
|
||||
> The 3.5" drives will show as "Unconfigured Good" in the H730 — that is fine.
|
||||
> Leave them alone. `perc-nonraid.sh` handles them after Proxmox is installed.
|
||||
|
||||
---
|
||||
|
||||
## Phase 5 — Install Proxmox VE 9.1
|
||||
|
||||
### Prepare the USB installer
|
||||
|
||||
On another machine, download the Proxmox VE ISO from proxmox.com and write it
|
||||
to a USB drive:
|
||||
|
||||
```bash
|
||||
# Linux/macOS
|
||||
dd if=proxmox-ve_*.iso of=/dev/sdX bs=1M status=progress conv=fsync
|
||||
# or use Balena Etcher (Windows/Mac/Linux GUI)
|
||||
```
|
||||
|
||||
### Boot and install
|
||||
|
||||
1. Plug the USB into the R730xd
|
||||
2. Power on → press **F11** for the one-time boot menu
|
||||
3. Select the USB drive
|
||||
4. At the Proxmox boot menu: **Install Proxmox VE (Graphical)**
|
||||
5. **Target disk:** select the RAID1 virtual disk (`OS-Mirror`)
|
||||
- Filesystem: **ext4** is simplest — the H730 RAID1 already gives you
|
||||
redundancy, so ZFS mirroring here would be double-redundant overkill
|
||||
6. **Location and timezone:** set to your region
|
||||
7. **Password and email:** set a strong root password, enter an email
|
||||
8. **Network configuration:**
|
||||
- Management interface: the built-in NIC (usually `em1` or `eno1`)
|
||||
- Hostname: e.g. `pve.local`
|
||||
- IP: choose a static IP on your LAN (e.g. `192.168.1.10/24`)
|
||||
- Gateway and DNS: your router's IP
|
||||
9. Click **Install**
|
||||
10. Remove USB when prompted, let it reboot
|
||||
|
||||
### First login
|
||||
|
||||
Open a browser on your LAN machine and go to:
|
||||
|
||||
```
|
||||
https://192.168.1.10:8006
|
||||
```
|
||||
|
||||
Accept the self-signed certificate warning. Login: `root` / (your password),
|
||||
Realm: **Linux PAM**.
|
||||
|
||||
---
|
||||
|
||||
## Phase 6 — Proxmox Post-Install (SSH)
|
||||
|
||||
SSH into the host from now on — it's faster than the web console for these
|
||||
steps.
|
||||
|
||||
```bash
|
||||
ssh root@192.168.1.10
|
||||
```
|
||||
|
||||
### 6a. Fix the apt repositories
|
||||
|
||||
Proxmox shows "no valid subscription" warnings when using the enterprise repo
|
||||
without a license. Switch to the free repo:
|
||||
|
||||
```bash
|
||||
# Disable enterprise repos — PVE9 uses .sources (DEB822 format), not .list
|
||||
echo "# disabled - no subscription" > /etc/apt/sources.list.d/pve-enterprise.sources
|
||||
echo "# disabled - no subscription" > /etc/apt/sources.list.d/ceph.sources
|
||||
# Also disable any legacy .list versions if present
|
||||
echo "# disabled - no subscription" > /etc/apt/sources.list.d/pve-enterprise.list
|
||||
echo "# disabled - no subscription" > /etc/apt/sources.list.d/ceph.list
|
||||
|
||||
# Add no-subscription repos (trixie = Proxmox 9 / Debian 13)
|
||||
echo "deb http://download.proxmox.com/debian/pve trixie pve-no-subscription" \
|
||||
> /etc/apt/sources.list.d/pve-no-subscription.list
|
||||
echo "deb http://download.proxmox.com/debian/ceph-squid trixie no-subscription" \
|
||||
> /etc/apt/sources.list.d/ceph-no-subscription.list
|
||||
|
||||
apt update && apt dist-upgrade -y
|
||||
reboot
|
||||
```
|
||||
|
||||
### 6b. Install tools used by the scripts
|
||||
|
||||
```bash
|
||||
apt install -y ipmitool lsscsi ledmon hdparm git
|
||||
```
|
||||
|
||||
### 6c. Clone this repo onto the host
|
||||
|
||||
```bash
|
||||
git clone https://github.com/outis1one/local_proxmox.git /opt/local_proxmox
|
||||
cd /opt/local_proxmox
|
||||
chmod +x scripts/*.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 7 — H730: Set 3.5" Drives to Non-RAID Mode
|
||||
|
||||
Now that Proxmox is running, convert the 3.5" drives to per-disk (non-RAID)
|
||||
mode. The OS drives (RAID1 virtual disk) are **not affected** — the script only
|
||||
targets unconfigured physical disks.
|
||||
|
||||
### Install perccli
|
||||
|
||||
`apt` does not carry perccli. Download the RPM from Dell and convert it:
|
||||
|
||||
```bash
|
||||
# Download (referer header required — Dell blocks plain curl)
|
||||
curl -L \
|
||||
--referer "https://www.dell.com/" \
|
||||
--user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
|
||||
"https://dl.dell.com/FOLDER03559396M/1/perccli-1.17.10-1.noarch.rpm" \
|
||||
-o /tmp/perccli.rpm
|
||||
|
||||
# Convert RPM → deb and install
|
||||
apt install -y alien
|
||||
alien --to-deb /tmp/perccli.rpm
|
||||
dpkg -i /tmp/perccli_*.deb
|
||||
|
||||
# Binary lands in /opt/MegaRAID/perccli/ — symlink it into PATH
|
||||
ln -s /opt/MegaRAID/perccli/perccli64 /usr/local/bin/perccli
|
||||
|
||||
# Verify
|
||||
perccli show
|
||||
```
|
||||
|
||||
### Run the script
|
||||
|
||||
```bash
|
||||
bash /opt/local_proxmox/scripts/perc-nonraid.sh
|
||||
```
|
||||
|
||||
Review the output, confirm when prompted. **Reboot after completion.**
|
||||
|
||||
```bash
|
||||
reboot
|
||||
```
|
||||
|
||||
After rebooting, Proxmox will see the 3.5" drives as individual block devices
|
||||
(`/dev/sdb`, `/dev/sdc`, etc.).
|
||||
|
||||
---
|
||||
|
||||
## Phase 8 — Map Physical Bays to Drives
|
||||
|
||||
```bash
|
||||
bash /opt/local_proxmox/scripts/build-bay-map.sh
|
||||
```
|
||||
|
||||
Walk the bays with `ledctl` to confirm which physical slot is which device:
|
||||
|
||||
```bash
|
||||
ledctl locate=/dev/sdb # LED blinks on the matching bay
|
||||
ledctl locate_off=/dev/sdb
|
||||
```
|
||||
|
||||
Fill in the `by-id` paths in `docs/hardware-layout.md`. You will need these
|
||||
in Phase 11 when creating VMs.
|
||||
|
||||
---
|
||||
|
||||
## Phase 9 — GPU Passthrough Setup
|
||||
|
||||
```bash
|
||||
bash /opt/local_proxmox/scripts/gpu-passthrough-setup.sh
|
||||
```
|
||||
|
||||
The script:
|
||||
- Adds `intel_iommu=on iommu=pt` to the kernel command line
|
||||
- Blacklists `nouveau`/`nvidia` on the host
|
||||
- Binds both Quadro P2200s to `vfio-pci`
|
||||
- Rebuilds initramfs
|
||||
|
||||
**Note the PCI addresses it prints at the end** — you'll need them in Phase 11.
|
||||
|
||||
```bash
|
||||
reboot
|
||||
```
|
||||
|
||||
### Verify after reboot
|
||||
|
||||
```bash
|
||||
lspci -nnk | grep -A3 -i nvidia
|
||||
```
|
||||
|
||||
Both GPUs should show `Kernel driver in use: vfio-pci`. If they still show
|
||||
`nouveau`, check that `/etc/modprobe.d/blacklist-gpu.conf` exists and
|
||||
`update-initramfs -u` was run.
|
||||
|
||||
---
|
||||
|
||||
## Phase 10 — Fan Control and Staggered Spin-Up
|
||||
|
||||
### Fan control (prevents jet-engine noise from non-Dell GPUs)
|
||||
|
||||
```bash
|
||||
cp /opt/local_proxmox/scripts/fan-control.sh /usr/local/sbin/fan-control.sh
|
||||
cp /opt/local_proxmox/scripts/fan-control.service /etc/systemd/system/
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now fan-control.service
|
||||
systemctl status fan-control.service
|
||||
```
|
||||
|
||||
Test it worked — the fans should audibly slow down within 30 seconds.
|
||||
To check current speed: `ipmitool sdr type Fan`
|
||||
|
||||
### Staggered spin-up
|
||||
|
||||
> **BIOS 2.19+ note:** `BIOS.StorageSettings.HddSeq` was removed from the
|
||||
> R730xd firmware. The iDRAC/BIOS layer (Layer 1) no longer works — skip it
|
||||
> and go straight to the Linux service below.
|
||||
|
||||
**Linux service** (staggers drives in standby at OS boot):
|
||||
|
||||
```bash
|
||||
cp /opt/local_proxmox/scripts/stagger-spinup.sh /usr/local/sbin/stagger-spinup.sh
|
||||
chmod +x /usr/local/sbin/stagger-spinup.sh
|
||||
cp /opt/local_proxmox/scripts/stagger-spinup.service /etc/systemd/system/
|
||||
systemctl daemon-reload
|
||||
systemctl enable stagger-spinup.service
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 11 — Create the VMs
|
||||
|
||||
### Prepare the VM configs
|
||||
|
||||
Edit the three example configs and replace the placeholders:
|
||||
|
||||
```bash
|
||||
cd /opt/local_proxmox/vm-configs
|
||||
|
||||
# Replace PLACEHOLDER_BAYx with real by-id paths from Phase 8
|
||||
# Replace XX:00 with real PCI addresses from Phase 9
|
||||
nano 100-frigate.conf.example
|
||||
nano 101.conf.example
|
||||
nano 102.conf.example
|
||||
```
|
||||
|
||||
### Create OS disks for each VM
|
||||
|
||||
In the Proxmox web UI or via CLI, create the base OS disk for each VM:
|
||||
|
||||
```bash
|
||||
# Creates the disk slots — Proxmox generates the correct scsi0 line
|
||||
qm create 100 --memory 16384 --cores 8 --name frigate --net0 virtio,bridge=vmbr0
|
||||
qm create 101 --memory 16384 --cores 8 --name vm101 --net0 virtio,bridge=vmbr0
|
||||
qm create 102 --memory 8192 --cores 4 --name vm102 --net0 virtio,bridge=vmbr0
|
||||
```
|
||||
|
||||
Then merge your edited conf into the generated config:
|
||||
|
||||
```bash
|
||||
# Backup generated config, then append your hardware lines
|
||||
cp /etc/pve/qemu-server/100.conf /etc/pve/qemu-server/100.conf.bak
|
||||
cat 100-frigate.conf.example >> /etc/pve/qemu-server/100.conf
|
||||
```
|
||||
|
||||
Or just open each VM in the Proxmox web UI → **Hardware** and add:
|
||||
- PCI Device → your GPU (enable PCIe, enable Primary GPU for VM 100)
|
||||
- USB Device → host device → `1a6e:089a` and `18d1:9302` (VM 100 only)
|
||||
- Hard Disk → (use disk passthrough, SCSI controller, path = your by-id)
|
||||
|
||||
### Install a guest OS
|
||||
|
||||
Boot each VM from an ISO (upload ISOs to Proxmox under local storage →
|
||||
ISO Images). Ubuntu Server 22.04 LTS is a good choice for the Frigate VM.
|
||||
|
||||
---
|
||||
|
||||
## Phase 12 — Set Up Frigate in VM 100
|
||||
|
||||
From inside VM 100 (SSH into the guest OS):
|
||||
|
||||
### Install Docker
|
||||
|
||||
```bash
|
||||
apt update && apt install -y ca-certificates curl
|
||||
curl -fsSL https://get.docker.com | sh
|
||||
```
|
||||
|
||||
### Install NVIDIA driver + Container Toolkit
|
||||
|
||||
```bash
|
||||
# Add NVIDIA apt repo
|
||||
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
|
||||
| gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
|
||||
|
||||
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
|
||||
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
|
||||
| tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
|
||||
|
||||
apt update
|
||||
apt install -y nvidia-driver-535 nvidia-container-toolkit
|
||||
|
||||
# Configure Docker to use the NVIDIA runtime
|
||||
nvidia-ctk runtime configure --runtime=docker
|
||||
systemctl restart docker
|
||||
|
||||
# Verify the GPU is visible
|
||||
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
|
||||
```
|
||||
|
||||
### Deploy Frigate
|
||||
|
||||
```bash
|
||||
mkdir -p /opt/frigate && cd /opt/frigate
|
||||
|
||||
# Copy configs from the repo (or clone it inside the VM)
|
||||
cp /path/to/local_proxmox/frigate/docker-compose.yml .
|
||||
cp /path/to/local_proxmox/frigate/config.yml .
|
||||
|
||||
# Create the recordings directory (on your passthrough data drive)
|
||||
# Mount your data drives first — if using ZFS:
|
||||
zpool import <poolname> # or create a new pool from the raw drives
|
||||
mkdir -p /mnt/frigate
|
||||
|
||||
# Edit config.yml and add your camera RTSP URLs
|
||||
nano config.yml
|
||||
|
||||
docker compose up -d
|
||||
docker compose logs -f # watch for errors on first start
|
||||
```
|
||||
|
||||
Frigate UI: `http://<vm100-ip>:5000`
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### GPU not passing through — still shows `nouveau`
|
||||
|
||||
```bash
|
||||
update-initramfs -u -k all && reboot
|
||||
# After reboot:
|
||||
lspci -nnk | grep -A3 -i nvidia # must show vfio-pci
|
||||
```
|
||||
|
||||
### IOMMU not enabled
|
||||
|
||||
```bash
|
||||
dmesg | grep -i iommu
|
||||
# Should show: "DMAR: IOMMU enabled"
|
||||
# If not: re-check Phase 9 cmdline (intel_iommu=on); VT-d is on by default in newer BIOS
|
||||
cat /etc/kernel/cmdline # must contain intel_iommu=on iommu=pt
|
||||
```
|
||||
|
||||
### Fan control not working
|
||||
|
||||
```bash
|
||||
# Check iDRAC IP is reachable and IPMI over LAN is enabled (Phase 2)
|
||||
ipmitool -I lan -H <idrac-ip> -U root -P <password> sdr type Fan
|
||||
# Then check the service:
|
||||
systemctl status fan-control.service
|
||||
journalctl -u fan-control.service -n 50
|
||||
```
|
||||
|
||||
### Coral not detected in Frigate
|
||||
|
||||
```bash
|
||||
# In VM 100, check both USB IDs are present
|
||||
lsusb | grep -E "1a6e|18d1"
|
||||
# If missing, check the USB passthrough lines in the VM config
|
||||
# Both usb0 (1a6e:089a) and usb1 (18d1:9302) must be present
|
||||
```
|
||||
|
||||
### Drive not appearing after perc-nonraid.sh
|
||||
|
||||
```bash
|
||||
lsblk
|
||||
# If the drive is missing, check its state in perccli:
|
||||
perccli /c0 /eall /sall show
|
||||
# State should be "JBOD" or "UGood" — not "Offln" or "Msng"
|
||||
```
|
||||
@@ -1,563 +0,0 @@
|
||||
# Phases 1–3: Firmware, iDRAC, and BIOS
|
||||
### Dell R730xd — Button-by-button walkthrough
|
||||
|
||||
---
|
||||
|
||||
## Before You Touch Anything — Read This First
|
||||
|
||||
### What is iDRAC and do I need to pay for it?
|
||||
|
||||
iDRAC stands for **Integrated Dell Remote Access Controller**. Ignore the name.
|
||||
Here is what it actually is:
|
||||
|
||||
There is a **second tiny computer built into your server's motherboard**. It has
|
||||
its own processor, its own RAM, its own network port, and it runs 24 hours a day
|
||||
as long as the server has power — even when the server is "off". Dell calls this
|
||||
second computer iDRAC.
|
||||
|
||||
This server has **iDRAC8 Express**, which is the version built into the board
|
||||
at no cost. There is a paid upgrade called iDRAC8 Enterprise but you do not
|
||||
need it. Here is exactly what Express gives you and what it does not:
|
||||
|
||||
**Express includes (everything this guide uses):**
|
||||
- iDRAC web UI — hardware health dashboard, temperatures, fan speeds, event logs
|
||||
- Power the server on and off remotely from the web UI
|
||||
- IPMI over LAN — lets `ipmitool` send fan control commands from Proxmox
|
||||
- racadm — command-line control used by the stagger spin-up script
|
||||
- SSH directly into iDRAC for management
|
||||
|
||||
**Express does NOT include:**
|
||||
- Virtual Console — you cannot see the server's screen in a browser window.
|
||||
A **physical monitor and keyboard are required** for all setup steps until
|
||||
Proxmox is installed and SSH is working. After that you will never need the
|
||||
monitor again.
|
||||
- Virtual Media — you cannot mount an ISO file over the network. A **physical
|
||||
USB drive** is required for the Proxmox installer.
|
||||
|
||||
Nothing in this guide requires Enterprise. The fan control script and stagger
|
||||
spin-up both use IPMI over LAN and racadm, which are both available on Express.
|
||||
|
||||
**Do you need to pay for anything?** No. iDRAC Express is already there and
|
||||
covers everything we need. The only other "subscription" people sometimes ask
|
||||
about is the **Proxmox subscription** (about €100/year for enterprise update
|
||||
servers and commercial support). You do not need that either — we configure the
|
||||
free community repositories in Phase 6. The two are completely unrelated.
|
||||
|
||||
**Summary: pay nothing, skip nothing. Keep a monitor plugged in through Phase 6.**
|
||||
|
||||
---
|
||||
|
||||
### What you need on the table before starting
|
||||
|
||||
- The server plugged into power and a network switch/router
|
||||
- A **separate network cable** for the iDRAC port (the small RJ45 on the back
|
||||
labeled "iDRAC" — it is separate from the four main NIC ports)
|
||||
- A **monitor and USB keyboard** plugged into the server — required through
|
||||
Phase 5 (the Proxmox installer). iDRAC Express does not include a remote
|
||||
KVM, so you cannot see the server's screen from another computer. After
|
||||
Proxmox is installed and SSH is working (end of Phase 6) the monitor
|
||||
can be unplugged permanently.
|
||||
- A USB drive (8 GB or larger) — needed later for the Proxmox installer
|
||||
- Another computer or phone to read this guide
|
||||
|
||||
---
|
||||
|
||||
## Phase 1 — Firmware Updates
|
||||
|
||||
**Why first?** Old firmware has bugs. BIOS from 2016 may not correctly expose
|
||||
the VT-d settings that GPU passthrough requires. The H730 firmware has had fixes
|
||||
for JBOD/non-RAID mode. Updating now prevents chasing ghosts later.
|
||||
|
||||
**Time required:** 30–90 minutes. The server will reboot several times on its own.
|
||||
|
||||
---
|
||||
|
||||
### Step 1.1 — Power on and watch the screen
|
||||
|
||||
Press the power button on the front of the server.
|
||||
|
||||
The screen will show a **Dell splash screen** with the PowerEdge logo. At the
|
||||
bottom of the screen you will see a line of options, something like:
|
||||
|
||||
```
|
||||
F2 = System Setup F10 = Lifecycle Controller F11 = Boot Manager F12 = PXE Boot
|
||||
```
|
||||
|
||||
These options are only available for about **5–8 seconds** before the server
|
||||
continues booting. If you miss the window the server will try to boot an OS
|
||||
(and fail if nothing is installed yet). Just power it off and back on and try again.
|
||||
|
||||
---
|
||||
|
||||
### Step 1.2 — Enter Lifecycle Controller
|
||||
|
||||
Press **F10** when you see the splash screen.
|
||||
|
||||
The screen will go blank for 10–30 seconds, then show the **Lifecycle Controller**
|
||||
loading screen. This is a mini operating system built into the server's firmware.
|
||||
It has nothing to do with your server's main OS. Wait for it to finish loading —
|
||||
it can take up to 90 seconds the first time.
|
||||
|
||||
When it finishes you will see the **Lifecycle Controller Home** screen with a menu
|
||||
on the left side:
|
||||
|
||||
```
|
||||
Home
|
||||
Firmware Update
|
||||
OS Deployment
|
||||
RAID Configuration
|
||||
Hardware Configuration
|
||||
Settings
|
||||
```
|
||||
|
||||
If it asks you to complete initial setup (language, network), do that first —
|
||||
use Tab and arrow keys to navigate, Enter to confirm.
|
||||
|
||||
---
|
||||
|
||||
### Step 1.3 — Go to Firmware Update
|
||||
|
||||
Click or arrow-key to **Firmware Update** on the left menu, then press Enter.
|
||||
|
||||
You will see:
|
||||
|
||||
```
|
||||
Launch Firmware Update
|
||||
```
|
||||
|
||||
Press Enter on that.
|
||||
|
||||
---
|
||||
|
||||
### Step 1.4 — Choose your update method
|
||||
|
||||
You will be asked how you want to get the firmware. You have two options:
|
||||
|
||||
#### Option A — Server has internet access (easiest)
|
||||
|
||||
If your network cable is plugged in and the server can reach the internet:
|
||||
|
||||
1. Select **HTTPS** (it will say something like "downloads.dell.com")
|
||||
2. Press **Next**
|
||||
3. Lifecycle Controller will connect to Dell's servers and **automatically scan
|
||||
your server** to find what firmware versions are installed vs. what is available
|
||||
4. This takes 2–5 minutes — the screen will show a progress bar
|
||||
5. Skip to Step 1.5
|
||||
|
||||
#### Option B — No internet on the server
|
||||
|
||||
You need to download the firmware files on another computer first.
|
||||
|
||||
1. On your other computer, open a browser and go to:
|
||||
**https://www.dell.com/support/home**
|
||||
|
||||
2. You need your server's **Service Tag** — it is a 7-character code. Find it:
|
||||
- On the **front of the server**: there is a small pull-out plastic tab (like a
|
||||
credit card slot) on the left side of the front panel. Pull it out — the
|
||||
Service Tag is printed on it.
|
||||
- Or: on a sticker on the **top** of the server chassis.
|
||||
- Or: it was displayed briefly during POST on the splash screen.
|
||||
|
||||
3. On the Dell support page, click **"View products"** or type the Service Tag
|
||||
into the search bar at the top. Select your server from the results.
|
||||
|
||||
4. Click **"Drivers & Downloads"**
|
||||
|
||||
5. You will see a filter panel. Under **"Category"**, select each of these one
|
||||
at a time and download the latest version:
|
||||
- **iDRAC** — look for "iDRAC8 firmware" — file will end in `.exe` or `.d9`
|
||||
- **BIOS** — look for "BIOS" — file ends in `.exe`
|
||||
- **RAID** — look for "PERC H730" — file ends in `.exe`
|
||||
|
||||
6. Copy all downloaded files onto a **FAT32-formatted USB drive**
|
||||
|
||||
7. Plug the USB drive into the server
|
||||
|
||||
8. In Lifecycle Controller: select **Local Drive (USB)** and press Next
|
||||
|
||||
9. Navigate to the USB drive and select the firmware files
|
||||
|
||||
---
|
||||
|
||||
### Step 1.5 — Review and apply updates
|
||||
|
||||
Lifecycle Controller shows a table of all components with columns like:
|
||||
|
||||
```
|
||||
Component Current Version Available Version Select
|
||||
--------- --------------- ----------------- ------
|
||||
iDRAC8 2.40.40.40 2.85.85.85 [ ]
|
||||
BIOS 1.2.10 2.14.0 [ ]
|
||||
PERC H730 Mini 25.4.0.0018 25.5.9.0001 [ ]
|
||||
```
|
||||
|
||||
1. Check the box next to **every component** that shows a newer Available Version
|
||||
(you can usually click "Select All")
|
||||
2. Click **Install and Reboot** (or **Apply**)
|
||||
3. A warning will say the server will reboot — click **Yes**
|
||||
|
||||
The server will now:
|
||||
- Apply each firmware update
|
||||
- Reboot automatically between some updates
|
||||
- Return to the Lifecycle Controller when finished
|
||||
|
||||
**Do not power off the server during this process.** Just wait. It can take
|
||||
30–60 minutes if there are many updates. The screen will show progress.
|
||||
|
||||
---
|
||||
|
||||
### Step 1.6 — Confirm completion
|
||||
|
||||
When all updates are done, Lifecycle Controller returns to its home screen.
|
||||
You may see a success summary screen first — click **OK** or **Finish**.
|
||||
|
||||
To verify everything worked:
|
||||
1. In Lifecycle Controller, go to **Firmware Update** → **Launch Firmware Update**
|
||||
again
|
||||
2. Run the check one more time
|
||||
3. The Available Version column should now match Current Version for everything
|
||||
you updated (or show no newer version)
|
||||
|
||||
Press **Exit** (or **Finish**) to leave Lifecycle Controller. The server will
|
||||
reboot normally.
|
||||
|
||||
---
|
||||
|
||||
## Phase 2 — iDRAC Setup
|
||||
|
||||
You need to do two things with iDRAC:
|
||||
1. Give it a **static IP address** so it is always reachable at the same address
|
||||
2. Enable **IPMI over LAN** so the fan control script can send commands to it
|
||||
|
||||
There are two ways to do this — through the server's BIOS-like setup (F2),
|
||||
or through the iDRAC web UI once you find its current IP. We will use F2 first
|
||||
to set a static IP, then use the web UI for the rest.
|
||||
|
||||
---
|
||||
|
||||
### Step 2.1 — Enter System Setup (F2)
|
||||
|
||||
Power on (or reboot) the server.
|
||||
|
||||
When the Dell splash screen appears, press **F2**.
|
||||
|
||||
The screen will go blank briefly, then show the **System Setup Main Menu**:
|
||||
|
||||
```
|
||||
System Setup Main Menu
|
||||
|
||||
System BIOS
|
||||
iDRAC Settings
|
||||
Device Settings
|
||||
Service Tag Settings
|
||||
```
|
||||
|
||||
Use the **arrow keys** to highlight **iDRAC Settings** and press **Enter**.
|
||||
|
||||
---
|
||||
|
||||
### Step 2.2 — Set a static IP for iDRAC
|
||||
|
||||
Inside iDRAC Settings you will see another menu:
|
||||
|
||||
```
|
||||
iDRAC Settings
|
||||
|
||||
Network
|
||||
User Configuration
|
||||
Smart Card
|
||||
Update and Rollback
|
||||
...
|
||||
```
|
||||
|
||||
Arrow down to **Network** and press **Enter**.
|
||||
|
||||
The Network screen has several sections. You are looking for the **IPv4 Settings**
|
||||
section. Use Tab or arrow keys to navigate to these fields:
|
||||
|
||||
| Field | What to set |
|
||||
|-------|-------------|
|
||||
| Enable NIC | **Enabled** |
|
||||
| NIC Selection | **Dedicated** (this uses the dedicated iDRAC port on the back) |
|
||||
| Enable IPv4 | **Enabled** |
|
||||
| Enable DHCP | **Disabled** ← change this |
|
||||
| Static IP Address | e.g. `192.168.1.5` (pick an IP outside your router's DHCP range) |
|
||||
| Static Gateway | your router's IP, e.g. `192.168.1.1` |
|
||||
| Static Subnet Mask | `255.255.255.0` |
|
||||
| DNS Server 1 | your router's IP, e.g. `192.168.1.1` |
|
||||
|
||||
> **What IP to use?** Log into your router and find its DHCP range — for example
|
||||
> if DHCP hands out `192.168.1.100` to `192.168.1.200`, pick something outside
|
||||
> that range like `192.168.1.5`. Write this IP down — you will use it often.
|
||||
|
||||
When done, press **Back** or navigate to the bottom and click **Apply**, then **OK**.
|
||||
|
||||
---
|
||||
|
||||
### Step 2.3 — Enable IPMI over LAN
|
||||
|
||||
Still inside iDRAC Settings → Network.
|
||||
|
||||
Scroll down past the IPv4 section until you see **IPMI Settings**.
|
||||
|
||||
Find:
|
||||
|
||||
```
|
||||
Enable IPMI over LAN: [ Disabled ]
|
||||
```
|
||||
|
||||
Change this to **Enabled**.
|
||||
|
||||
This is the setting that allows `ipmitool` commands (used by the fan control
|
||||
script) to reach iDRAC over the network.
|
||||
|
||||
Click **Apply** at the bottom, then **OK** when asked to confirm.
|
||||
|
||||
---
|
||||
|
||||
### Step 2.4 — Change the default password
|
||||
|
||||
Go back to the iDRAC Settings main menu (press **Back**).
|
||||
|
||||
Arrow down to **User Configuration** and press **Enter**.
|
||||
|
||||
You will see a list of user slots. **User 1** is the built-in `root` account.
|
||||
Select it (press Enter).
|
||||
|
||||
> **Why change it?** The factory default password is `calvin`. This is printed
|
||||
> in Dell's public documentation and is widely known. Any device on your network
|
||||
> could log into your iDRAC if you leave it as-is.
|
||||
|
||||
Change:
|
||||
- **User Name:** leave as `root`
|
||||
- **Change Password:** set to **Enabled**
|
||||
- **Password:** enter a strong password
|
||||
- **Confirm Password:** enter it again
|
||||
|
||||
Click **Apply**, then **OK**.
|
||||
|
||||
Press **Finish** to exit iDRAC Settings and return to the System Setup Main Menu.
|
||||
|
||||
**Do not reboot yet** — you still have BIOS settings to configure in Phase 3.
|
||||
|
||||
---
|
||||
|
||||
### Step 2.5 — Verify iDRAC from your browser (do after Phase 3)
|
||||
|
||||
After you finish Phase 3 and let the server reboot, test iDRAC from your other
|
||||
computer:
|
||||
|
||||
1. Make sure the **dedicated iDRAC network port** (small RJ45 labeled "iDRAC" on
|
||||
the server's back panel) is plugged into your switch or router
|
||||
2. Open a browser on your other computer
|
||||
3. Go to: `https://192.168.1.5` (whatever static IP you set in Step 2.2)
|
||||
4. You will see a **certificate warning** — this is normal, iDRAC uses a
|
||||
self-signed certificate. Click **Advanced** → **Proceed anyway** (wording
|
||||
varies by browser)
|
||||
5. The iDRAC8 login page appears — a dark Dell-branded page
|
||||
6. Log in: Username `root`, Password (the one you set in Step 2.4)
|
||||
|
||||
You should see the iDRAC dashboard showing system health, temperatures, and fans.
|
||||
This is your remote window into the server — you can now manage it from your desk.
|
||||
|
||||
---
|
||||
|
||||
## Phase 3 — BIOS Settings
|
||||
|
||||
These settings enable the CPU features that allow devices (GPUs, USB controllers)
|
||||
to be handed directly to virtual machines. **Every setting below is required.**
|
||||
Skipping VT-d is the single most common reason GPU passthrough silently fails.
|
||||
|
||||
You are still in System Setup from Phase 2 (or press F2 again on reboot).
|
||||
|
||||
---
|
||||
|
||||
### Step 3.1 — System BIOS → Processor Settings
|
||||
|
||||
From the System Setup Main Menu, arrow to **System BIOS** and press Enter.
|
||||
|
||||
You will see the System BIOS Settings menu:
|
||||
|
||||
```
|
||||
System BIOS Settings
|
||||
|
||||
System Information
|
||||
Memory Settings
|
||||
Processor Settings ← go here
|
||||
SATA Settings
|
||||
Boot Settings
|
||||
Integrated Devices
|
||||
Serial Communication
|
||||
System Profile Settings
|
||||
Power Management
|
||||
Security
|
||||
Miscellaneous Settings
|
||||
```
|
||||
|
||||
Arrow to **Processor Settings** and press **Enter**.
|
||||
|
||||
Find and set these two options:
|
||||
|
||||
---
|
||||
|
||||
**Virtualization Technology**
|
||||
|
||||
This enables the CPU to run virtual machines efficiently. Without it Proxmox
|
||||
still works but performance is worse.
|
||||
|
||||
```
|
||||
Virtualization Technology: [ Disabled ]
|
||||
↓ change to
|
||||
Virtualization Technology: [ Enabled ]
|
||||
```
|
||||
|
||||
Use the arrow keys or spacebar to toggle the value.
|
||||
|
||||
---
|
||||
|
||||
**VT for Direct I/O** (also shown as "Virtualization Technology for Directed I/O")
|
||||
|
||||
This is the critical one. It enables **IOMMU** — the hardware feature that lets
|
||||
the CPU safely hand a real PCIe device (like your GPU) directly to a virtual
|
||||
machine. Without this, passthrough is impossible.
|
||||
|
||||
```
|
||||
VT for Direct I/O: [ Disabled ]
|
||||
↓ change to
|
||||
VT for Direct I/O: [ Enabled ]
|
||||
```
|
||||
|
||||
Click **Back** to return to System BIOS Settings.
|
||||
|
||||
---
|
||||
|
||||
### Step 3.2 — System BIOS → Integrated Devices
|
||||
|
||||
From the System BIOS Settings menu, arrow to **Integrated Devices** and press Enter.
|
||||
|
||||
Find:
|
||||
|
||||
**SR-IOV Global Enable**
|
||||
|
||||
SR-IOV is a PCIe feature that allows a single physical device to appear as
|
||||
multiple devices. Even though the Quadro P2200 does not use SR-IOV, enabling
|
||||
this globally avoids a class of IOMMU grouping problems.
|
||||
|
||||
```
|
||||
SR-IOV Global Enable: [ Disabled ]
|
||||
↓ change to
|
||||
SR-IOV Global Enable: [ Enabled ]
|
||||
```
|
||||
|
||||
Click **Back**.
|
||||
|
||||
---
|
||||
|
||||
### Step 3.3 — System BIOS → Boot Settings
|
||||
|
||||
From System BIOS Settings, arrow to **Boot Settings** and press Enter.
|
||||
|
||||
You will see:
|
||||
|
||||
```
|
||||
Boot Settings
|
||||
|
||||
Boot Mode: [ BIOS ] ← must change this
|
||||
Boot Sequence
|
||||
...
|
||||
```
|
||||
|
||||
**Boot Mode** — change from BIOS to UEFI:
|
||||
|
||||
```
|
||||
Boot Mode: [ BIOS ]
|
||||
↓ change to
|
||||
Boot Mode: [ UEFI ]
|
||||
```
|
||||
|
||||
> **Why UEFI?** Proxmox uses a tool called `proxmox-boot-tool` to manage the
|
||||
> kernel boot parameters (including the IOMMU settings the GPU passthrough script
|
||||
> writes). This tool only works with UEFI boot. If the server is in Legacy/BIOS
|
||||
> mode the passthrough script will fail and you will have to reinstall.
|
||||
|
||||
A warning may appear saying the boot sequence will be cleared — click **Yes** or
|
||||
**OK**. That is fine since we haven't installed anything yet.
|
||||
|
||||
Click **Back**.
|
||||
|
||||
---
|
||||
|
||||
### Step 3.4 — System BIOS → Power Management
|
||||
|
||||
From System BIOS Settings, arrow to **Power Management** and press Enter.
|
||||
|
||||
Find:
|
||||
|
||||
**Hard Disk Drive Sequencing** — this is the built-in stagger that fires at
|
||||
power-on before the OS loads. It staggers when each drive spins up so they do
|
||||
not all surge at the same time and overload the PSU.
|
||||
|
||||
```
|
||||
Hard Disk Drive Sequencing: [ Disabled ]
|
||||
↓ change to
|
||||
Hard Disk Drive Sequencing: [ Enabled ]
|
||||
```
|
||||
|
||||
Also check:
|
||||
|
||||
**C States** — these are CPU power-saving sleep states. They can add latency
|
||||
to VM workloads. Optional but worth setting for a server:
|
||||
|
||||
```
|
||||
C States: [ Enabled ]
|
||||
↓ change to
|
||||
C States: [ Disabled ]
|
||||
```
|
||||
|
||||
Click **Back**.
|
||||
|
||||
---
|
||||
|
||||
### Step 3.5 — Apply and exit
|
||||
|
||||
From System BIOS Settings, click **Finish** (at the bottom of the menu, you may
|
||||
need to scroll).
|
||||
|
||||
A dialog will appear:
|
||||
|
||||
```
|
||||
Confirm changes and exit?
|
||||
[ Yes ] [ No ]
|
||||
```
|
||||
|
||||
Click **Yes**.
|
||||
|
||||
The server will reboot.
|
||||
|
||||
---
|
||||
|
||||
### Step 3.6 — Confirm the settings took
|
||||
|
||||
After the reboot, press **F2** again to re-enter System Setup and spot-check:
|
||||
|
||||
- **Processor Settings:** VT and VT for Direct I/O should both show **Enabled**
|
||||
- **Boot Settings:** Boot Mode should show **UEFI**
|
||||
|
||||
If either shows Disabled, set it again and apply. Some BIOS versions have a bug
|
||||
where the first Apply does not persist — applying a second time fixes it.
|
||||
|
||||
---
|
||||
|
||||
### Phase 3 complete — what you have now
|
||||
|
||||
| Setting | Why it matters |
|
||||
|---------|---------------|
|
||||
| VT-x (Virtualization Technology) | Lets the CPU run VMs at near-native speed |
|
||||
| VT-d (Direct I/O) | Enables IOMMU — the foundation of all device passthrough |
|
||||
| SR-IOV | Prevents IOMMU group problems with PCIe devices |
|
||||
| UEFI boot mode | Required for Proxmox's boot management and EFI GPU passthrough |
|
||||
| HDD sequencing | Staggers drive spin-up at power-on to protect the PSU |
|
||||
|
||||
**Next:** Phase 4 — Configure the H730 RAID controller to mirror the two
|
||||
2.5" OS drives, then leave the 3.5" drives alone for Proxmox to manage.
|
||||
That walkthrough is in `docs/walkthrough-phases-4-6.md` (coming next).
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,611 +0,0 @@
|
||||
# Phases 4–6: RAID Config, Proxmox Install, Post-Install
|
||||
### Dell R730xd — Button-by-button walkthrough
|
||||
|
||||
---
|
||||
|
||||
## Phase 4 — H730 RAID Configuration
|
||||
|
||||
**Goal:** Mirror the two 2.5" rear drives together so a single drive failure
|
||||
cannot take down Proxmox. Leave every 3.5" drive untouched — the `perc-nonraid.sh`
|
||||
script handles those later from inside Proxmox.
|
||||
|
||||
**Why mirror the OS drives here instead of using ZFS?** The H730 presents the
|
||||
RAID1 mirror as a single virtual disk to the OS. Proxmox installs onto it and
|
||||
never needs to think about the fact that two physical drives are underneath.
|
||||
This is the simplest and most reliable approach for an OS volume.
|
||||
|
||||
---
|
||||
|
||||
### Step 4.1 — Enter Lifecycle Controller
|
||||
|
||||
Power on (or reboot) the server and press **F10** at the Dell splash screen.
|
||||
|
||||
Wait for Lifecycle Controller to load. You will see the main menu on the left:
|
||||
|
||||
```
|
||||
Home
|
||||
Firmware Update
|
||||
OS Deployment
|
||||
RAID Configuration ← go here
|
||||
Hardware Configuration
|
||||
Settings
|
||||
```
|
||||
|
||||
Arrow to **RAID Configuration** and press **Enter**.
|
||||
|
||||
---
|
||||
|
||||
### Step 4.2 — Open the RAID configuration wizard
|
||||
|
||||
You will see:
|
||||
|
||||
```
|
||||
RAID Configuration
|
||||
|
||||
View Current Configuration
|
||||
Create New VD
|
||||
...
|
||||
```
|
||||
|
||||
First, click **View Current Configuration** to see what is already there.
|
||||
|
||||
You are looking at the physical drives the H730 can see. Drives are listed under
|
||||
their controller — it will say something like:
|
||||
|
||||
```
|
||||
PERC H730 Mini (Slot 0)
|
||||
|
||||
Physical Disks:
|
||||
Port 0: SEAGATE ST4000NM0023 4.0 TB State: Unconfigured Good
|
||||
Port 1: SEAGATE ST4000NM0023 4.0 TB State: Unconfigured Good
|
||||
...
|
||||
Port 8: TOSHIBA MK1401GRRB 146 GB State: Unconfigured Good ← 2.5"
|
||||
Port 9: TOSHIBA MK1401GRRB 146 GB State: Unconfigured Good ← 2.5"
|
||||
```
|
||||
|
||||
> **Identifying the 2.5" OS drives:** They will be noticeably smaller than the
|
||||
> 3.5" drives — likely 146 GB, 300 GB, 600 GB (SAS) or 120–480 GB (SSD).
|
||||
> The 3.5" drives will be 1 TB, 2 TB, 4 TB, or larger. Size is the giveaway.
|
||||
|
||||
> **If drives show "Foreign Configuration":** They were previously part of a
|
||||
> RAID array. See Step 4.3a before continuing.
|
||||
|
||||
> **If the 2.5" drives appear under a different controller** (e.g., "PERC H330
|
||||
> Mini"): The R730xd sometimes puts the rear bays on a separate mini controller.
|
||||
> That is fine — just create the RAID1 on whichever controller owns those drives.
|
||||
|
||||
Press **Back** to return to the RAID Configuration menu.
|
||||
|
||||
---
|
||||
|
||||
### Step 4.3a — Clear foreign configurations (only if needed)
|
||||
|
||||
If any drives showed "Foreign Configuration" in Step 4.2, you need to clear
|
||||
them before you can create a new virtual disk.
|
||||
|
||||
In the RAID Configuration menu, look for:
|
||||
|
||||
```
|
||||
Clear Foreign Configuration
|
||||
```
|
||||
|
||||
Select it, choose **All Foreign Configurations**, click **Apply**.
|
||||
|
||||
A warning will appear saying all data on those drives will be lost — click **Yes**.
|
||||
(We are building a new system so there is nothing to keep.)
|
||||
|
||||
After clearing, go back to **View Current Configuration** and confirm the drives
|
||||
now show **Unconfigured Good**.
|
||||
|
||||
---
|
||||
|
||||
### Step 4.4 — Create the RAID 1 virtual disk
|
||||
|
||||
In the RAID Configuration menu, select **Create New VD** and press **Enter**.
|
||||
|
||||
The wizard walks you through four screens:
|
||||
|
||||
---
|
||||
|
||||
**Screen 1 — Select RAID Level**
|
||||
|
||||
```
|
||||
Select RAID Level:
|
||||
|
||||
RAID 0 (no redundancy, faster)
|
||||
RAID 1 (mirror, one drive can fail) ← select this
|
||||
RAID 5 (requires 3+ drives)
|
||||
RAID 6 (requires 4+ drives)
|
||||
RAID 10 (requires 4+ drives)
|
||||
```
|
||||
|
||||
Select **RAID 1** and click **Next**.
|
||||
|
||||
---
|
||||
|
||||
**Screen 2 — Select Physical Disks**
|
||||
|
||||
A list of all available physical disks appears. You need to select **only the
|
||||
two 2.5" drives**. Do not select any 3.5" drives.
|
||||
|
||||
Click the checkbox next to each of the two 2.5" drives (identified by their
|
||||
smaller size). Leave all 3.5" drives unchecked.
|
||||
|
||||
Click **Next**.
|
||||
|
||||
---
|
||||
|
||||
**Screen 3 — Virtual Disk Attributes**
|
||||
|
||||
```
|
||||
Virtual Disk Name: OS-Mirror
|
||||
Virtual Disk Size: (auto-filled — leave it)
|
||||
Strip Element Size: 64KB (leave default)
|
||||
Read Policy: Adaptive Read Ahead (leave default)
|
||||
Write Policy: Write Back (leave default)
|
||||
Disk Cache Policy: Enabled (leave default)
|
||||
```
|
||||
|
||||
The only thing you need to change is the name — type `OS-Mirror` so it is easy
|
||||
to identify. Everything else can stay at defaults.
|
||||
|
||||
Click **Next**.
|
||||
|
||||
---
|
||||
|
||||
**Screen 4 — Confirm**
|
||||
|
||||
Review the summary. It should show:
|
||||
- RAID Level: 1
|
||||
- Physical Disks: 2 (your 2.5" drives)
|
||||
- Virtual Disk Size: whatever the smaller of the two drives is
|
||||
|
||||
Click **Finish**.
|
||||
|
||||
---
|
||||
|
||||
### Step 4.5 — Initialize the virtual disk
|
||||
|
||||
After creating the VD, Lifecycle Controller will ask about initialization:
|
||||
|
||||
```
|
||||
Initialize virtual disk?
|
||||
Fast Initialize ← select this
|
||||
Full Initialize (writes zeros to every sector — takes hours, not needed)
|
||||
Skip
|
||||
```
|
||||
|
||||
Select **Fast Initialize** and click **OK**.
|
||||
|
||||
Fast initialization takes 30–60 seconds. A progress bar will appear. Wait for it.
|
||||
|
||||
---
|
||||
|
||||
### Step 4.6 — Verify and exit
|
||||
|
||||
When initialization finishes, go back to **View Current Configuration**.
|
||||
|
||||
You should now see:
|
||||
|
||||
```
|
||||
PERC H730 Mini
|
||||
|
||||
Virtual Disks:
|
||||
VD 0: OS-Mirror RAID 1 ~146 GB State: Optimal
|
||||
|
||||
Physical Disks:
|
||||
Port 0–7: 3.5" drives State: Unconfigured Good
|
||||
Port 8–9: 2.5" drives State: Online (member of VD 0)
|
||||
```
|
||||
|
||||
The 3.5" drives should all show **Unconfigured Good**. That is exactly what you
|
||||
want. Leave them that way.
|
||||
|
||||
Click **Back** repeatedly until you reach the Lifecycle Controller home screen,
|
||||
then click **Exit**. The server will reboot.
|
||||
|
||||
---
|
||||
|
||||
## Phase 5 — Install Proxmox VE 9.1
|
||||
|
||||
### Step 5.1 — Download the Proxmox ISO
|
||||
|
||||
On your other computer, open a browser and go to:
|
||||
|
||||
```
|
||||
https://www.proxmox.com/en/downloads
|
||||
```
|
||||
|
||||
Click **Proxmox Virtual Environment** → find the latest **Proxmox VE 9.x ISO
|
||||
Installer** and click **Download**.
|
||||
|
||||
The file will be named something like `proxmox-ve_9.1-1.iso` and is about 1 GB.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.2 — Write the ISO to a USB drive
|
||||
|
||||
You need to write the ISO as a disk image (not copy the file). Use one of these
|
||||
tools depending on your computer:
|
||||
|
||||
#### Windows — Rufus (free, no install needed)
|
||||
|
||||
1. Download Rufus from: **https://rufus.ie** (click the first .exe link)
|
||||
2. Plug in your USB drive (8 GB or larger — all data on it will be erased)
|
||||
3. Open Rufus
|
||||
4. **Device:** select your USB drive from the dropdown
|
||||
5. **Boot selection:** click **SELECT** and choose the Proxmox ISO file
|
||||
6. **Partition scheme:** select **GPT**
|
||||
7. **Target system:** select **UEFI (non CSM)**
|
||||
8. Click **START**
|
||||
9. A dialog appears asking about ISO mode vs DD mode — select **Write in DD Image
|
||||
mode** and click **OK**
|
||||
10. Click **OK** again when warned that the USB will be wiped
|
||||
11. Wait for it to finish (1–3 minutes), then click **CLOSE**
|
||||
|
||||
#### Mac — Balena Etcher (free)
|
||||
|
||||
1. Download from: **https://etcher.balena.io** — click **Download for macOS**
|
||||
2. Open Etcher
|
||||
3. Click **Flash from file** → select the Proxmox ISO
|
||||
4. Click **Select target** → select your USB drive
|
||||
5. Click **Flash** — enter your Mac password if prompted
|
||||
6. Wait for it to finish
|
||||
|
||||
#### Linux — terminal
|
||||
|
||||
```bash
|
||||
# Find your USB drive device name (look for your drive size)
|
||||
lsblk
|
||||
|
||||
# Write the ISO (replace sdX with your actual USB device, e.g. sdb — NOT sdb1)
|
||||
dd if=proxmox-ve_9.1-1.iso of=/dev/sdX bs=1M status=progress conv=fsync
|
||||
sync
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Step 5.3 — Boot the server from USB
|
||||
|
||||
1. Plug the USB drive into one of the USB ports on the front or back of the server
|
||||
2. Power on (or reboot) the server
|
||||
3. At the Dell splash screen, press **F11**
|
||||
|
||||
The **Boot Manager** screen appears:
|
||||
|
||||
```
|
||||
Boot Manager
|
||||
|
||||
BIOS Boot Menu
|
||||
UEFI Boot Menu ← go here
|
||||
One-shot BIOS Boot Menu
|
||||
...
|
||||
```
|
||||
|
||||
Arrow to **UEFI Boot Menu** and press **Enter**.
|
||||
|
||||
You will see a list of bootable devices. Look for your USB drive — it will be
|
||||
listed as something like:
|
||||
|
||||
```
|
||||
UEFI: SanDisk Ultra USB 3.0, Partition 1
|
||||
```
|
||||
|
||||
Arrow to it and press **Enter**.
|
||||
|
||||
> **If the USB does not appear in the UEFI Boot Menu:** Make sure Rufus wrote in
|
||||
> DD mode and GPT was selected (Step 5.2). Legacy/MBR USB drives will not appear
|
||||
> in the UEFI menu.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.4 — Proxmox installer boot menu
|
||||
|
||||
The server boots from the USB and shows the Proxmox boot menu — white text on
|
||||
a blue/dark background:
|
||||
|
||||
```
|
||||
Proxmox VE Installer
|
||||
|
||||
Install Proxmox VE (Graphical) ← select this
|
||||
Install Proxmox VE (Terminal UI)
|
||||
Advanced Options
|
||||
...
|
||||
```
|
||||
|
||||
Arrow to **Install Proxmox VE (Graphical)** and press **Enter**.
|
||||
|
||||
The graphical installer loads. This takes about 30–60 seconds.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.5 — End User License Agreement
|
||||
|
||||
The EULA screen appears. Read it or don't — click **I agree** at the bottom right.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.6 — Target disk selection
|
||||
|
||||
This is the most important screen. You are choosing where Proxmox installs.
|
||||
|
||||
You will see a dropdown labeled **Target Harddisk**. Click it.
|
||||
|
||||
The list shows all visible storage. You are looking for the RAID1 virtual disk
|
||||
you created in Phase 4. It will appear as a single disk — something like:
|
||||
|
||||
```
|
||||
/dev/sda (146.00 GB) ← this is the OS-Mirror RAID1 VD
|
||||
/dev/sdb (4.00 TB)
|
||||
/dev/sdc (4.00 TB)
|
||||
...
|
||||
```
|
||||
|
||||
Select the small one — your OS-Mirror virtual disk (146 GB or whatever size your
|
||||
2.5" drives are).
|
||||
|
||||
> **Do not select a 3.5" drive.** Those are your VM data drives.
|
||||
|
||||
**Filesystem:** Click the **Options** button next to the disk selector.
|
||||
|
||||
```
|
||||
Filesystem: ext4 ← leave this as ext4
|
||||
```
|
||||
|
||||
Leave it as `ext4`. The H730 RAID1 already gives you drive redundancy. Adding
|
||||
ZFS here would be redundant overhead with no benefit.
|
||||
|
||||
Click **Next**.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.7 — Location and timezone
|
||||
|
||||
```
|
||||
Country: [type your country, e.g. United States]
|
||||
Time Zone: [auto-filled based on country, e.g. America/New_York]
|
||||
Keyboard: [your keyboard layout, e.g. U.S. English]
|
||||
```
|
||||
|
||||
Adjust if needed. Click **Next**.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.8 — Password and email
|
||||
|
||||
```
|
||||
Password: [choose a strong root password — write it down]
|
||||
Confirm: [same password again]
|
||||
Email: [any email address — used for system alerts]
|
||||
```
|
||||
|
||||
> The root password is how you log into Proxmox. If you forget it, recovery is
|
||||
> painful. Write it on a piece of paper and put it somewhere safe.
|
||||
|
||||
Click **Next**.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.9 — Network configuration
|
||||
|
||||
```
|
||||
Management Interface: [auto-selected — usually em1 or eno1, the first NIC]
|
||||
Hostname (FQDN): pve.local
|
||||
IP Address: 192.168.1.10 ← change to an IP on your network
|
||||
Netmask: 255.255.255.0
|
||||
Gateway: 192.168.1.1 ← your router's IP
|
||||
DNS Server: 192.168.1.1 ← your router's IP (or 8.8.8.8)
|
||||
```
|
||||
|
||||
**Choosing a static IP for Proxmox:**
|
||||
- Log into your router and find its DHCP range
|
||||
- Pick an IP outside that range (same subnet)
|
||||
- Example: if DHCP is 192.168.1.100–200, use 192.168.1.10
|
||||
- This IP is how you will reach the Proxmox web UI and SSH from now on
|
||||
|
||||
Click **Next**.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.10 — Summary and install
|
||||
|
||||
The installer shows a summary of everything you chose. Confirm:
|
||||
- Target disk: your small RAID1 virtual disk
|
||||
- Filesystem: ext4
|
||||
- Hostname and IP look correct
|
||||
|
||||
Click **Install**.
|
||||
|
||||
The installation takes 5–10 minutes. A progress bar shows the steps:
|
||||
- Formatting disk
|
||||
- Copying files
|
||||
- Setting up bootloader
|
||||
- Configuring system
|
||||
|
||||
When it finishes you will see:
|
||||
|
||||
```
|
||||
Installation successful!
|
||||
Remove the installation medium and press Enter to reboot.
|
||||
```
|
||||
|
||||
**Pull the USB drive out**, then press **Enter**.
|
||||
|
||||
---
|
||||
|
||||
### Step 5.11 — First login to the Proxmox web UI
|
||||
|
||||
The server reboots. After about 60 seconds it shows a text console with
|
||||
Proxmox's login prompt and this message:
|
||||
|
||||
```
|
||||
Welcome to the Proxmox Virtual Environment.
|
||||
|
||||
Please use your web browser to configure this server -
|
||||
connect to: https://192.168.1.10:8006/
|
||||
```
|
||||
|
||||
On your other computer, open a browser and go to:
|
||||
|
||||
```
|
||||
https://192.168.1.10:8006
|
||||
```
|
||||
|
||||
(Use the IP you set in Step 5.9.)
|
||||
|
||||
**Certificate warning:** Your browser will show a security warning because
|
||||
Proxmox uses a self-signed SSL certificate. This is expected and safe on
|
||||
your local network.
|
||||
|
||||
- Chrome/Edge: click **Advanced** → **Proceed to 192.168.1.10 (unsafe)**
|
||||
- Firefox: click **Advanced** → **Accept the Risk and Continue**
|
||||
|
||||
The Proxmox login page appears — a dark interface with two fields:
|
||||
|
||||
```
|
||||
User name: root
|
||||
Password: [the password you set in Step 5.8]
|
||||
Realm: Linux PAM standard authentication ← leave this as-is
|
||||
```
|
||||
|
||||
Click **Login**.
|
||||
|
||||
**Subscription nag:** A popup immediately appears saying "No valid subscription".
|
||||
Click **OK** to dismiss it. This appears every login until you fix the repos in
|
||||
Phase 6. It does not affect anything.
|
||||
|
||||
You are now looking at the Proxmox web interface — the main dashboard.
|
||||
|
||||
---
|
||||
|
||||
## Phase 6 — Proxmox Post-Install
|
||||
|
||||
From this point you will use **SSH** instead of the web console for most tasks.
|
||||
SSH is faster and lets you paste commands directly.
|
||||
|
||||
---
|
||||
|
||||
### Step 6.1 — Connect via SSH
|
||||
|
||||
On your other computer, open a terminal (Mac/Linux) or PuTTY/Windows Terminal
|
||||
(Windows) and run:
|
||||
|
||||
```bash
|
||||
ssh root@192.168.1.10
|
||||
```
|
||||
|
||||
Type `yes` when asked to confirm the host fingerprint. Enter your root password.
|
||||
|
||||
You will see the Proxmox shell prompt:
|
||||
|
||||
```
|
||||
root@pve:~#
|
||||
```
|
||||
|
||||
All the commands in the rest of this guide are typed here.
|
||||
|
||||
---
|
||||
|
||||
### Step 6.2 — Fix the package repositories
|
||||
|
||||
Proxmox installs with "enterprise" apt repositories configured. These require
|
||||
a paid subscription and will fail with an authentication error when you try to
|
||||
update. We switch them to the free community repositories.
|
||||
|
||||
Run these commands one at a time:
|
||||
|
||||
```bash
|
||||
# Disable the enterprise repo (comment it out)
|
||||
echo "# disabled - no subscription" > /etc/apt/sources.list.d/pve-enterprise.list
|
||||
|
||||
# Disable the enterprise Ceph repo
|
||||
echo "# disabled - no subscription" > /etc/apt/sources.list.d/ceph.list
|
||||
|
||||
# Add the no-subscription community repo
|
||||
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" \
|
||||
> /etc/apt/sources.list.d/pve-no-subscription.list
|
||||
```
|
||||
|
||||
Now update and upgrade all packages:
|
||||
|
||||
```bash
|
||||
apt update && apt dist-upgrade -y
|
||||
```
|
||||
|
||||
This will download and install updates. It may take 5–15 minutes depending on
|
||||
your internet speed. Answer **Y** if prompted about any config file changes
|
||||
(just press Enter to accept the default).
|
||||
|
||||
When it finishes, reboot:
|
||||
|
||||
```bash
|
||||
reboot
|
||||
```
|
||||
|
||||
Wait about 60 seconds, then SSH back in:
|
||||
|
||||
```bash
|
||||
ssh root@192.168.1.10
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Step 6.3 — Install the tools the scripts need
|
||||
|
||||
```bash
|
||||
apt install -y ipmitool lsscsi ledmon hdparm git curl
|
||||
```
|
||||
|
||||
What each tool does:
|
||||
|
||||
| Tool | Used for |
|
||||
|------|---------|
|
||||
| ipmitool | Fan control — sends IPMI commands to iDRAC |
|
||||
| lsscsi | build-bay-map.sh — lists SCSI drives with details |
|
||||
| ledmon | build-bay-map.sh — blinks drive bay LEDs for identification |
|
||||
| hdparm | stagger-spinup.sh — checks drive power state, wakes drives |
|
||||
| git | Cloning this repo onto the host |
|
||||
| curl | Downloading packages and health checks |
|
||||
|
||||
---
|
||||
|
||||
### Step 6.4 — Clone this repo onto the Proxmox host
|
||||
|
||||
```bash
|
||||
git clone https://github.com/outis1one/local_proxmox.git /opt/local_proxmox
|
||||
chmod +x /opt/local_proxmox/scripts/*.sh
|
||||
cd /opt/local_proxmox
|
||||
```
|
||||
|
||||
All scripts and configs are now at `/opt/local_proxmox/`.
|
||||
|
||||
---
|
||||
|
||||
### Step 6.5 — Dismiss the subscription warning permanently (optional)
|
||||
|
||||
If the "No valid subscription" popup annoys you every time you log into the
|
||||
web UI, you can remove it with one command. This does not affect functionality:
|
||||
|
||||
```bash
|
||||
sed -i.bak "s/data.status !== 'Active'/false/g" \
|
||||
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
|
||||
systemctl restart pveproxy
|
||||
```
|
||||
|
||||
After running this, refresh the Proxmox web UI — the popup will be gone.
|
||||
|
||||
---
|
||||
|
||||
### Phase 6 complete — where you are now
|
||||
|
||||
| What is done | Status |
|
||||
|---|---|
|
||||
| Proxmox VE 9.1 installed on RAID1 OS mirror | ✓ |
|
||||
| Free community repos configured | ✓ |
|
||||
| All packages up to date | ✓ |
|
||||
| Tools installed | ✓ |
|
||||
| Repo cloned to /opt/local_proxmox | ✓ |
|
||||
|
||||
**Next:** Phase 7 — Run `perc-nonraid.sh` to convert the 3.5" drives to
|
||||
non-RAID/per-disk mode, then map the physical bays. That walkthrough is in
|
||||
`docs/walkthrough-phases-7-9.md`.
|
||||
@@ -1,525 +0,0 @@
|
||||
# Phases 7–9: Drive Non-RAID, Bay Mapping, GPU Passthrough
|
||||
### Dell R730xd — Button-by-button walkthrough
|
||||
|
||||
---
|
||||
|
||||
## Phase 7 — Convert 3.5" Drives to Non-RAID Mode
|
||||
|
||||
**What this does:** Right now the H730 sees your 3.5" drives as "Unconfigured
|
||||
Good" — they exist but the controller is not doing anything with them. We need
|
||||
to put them into **Non-RAID mode**, which tells the H730 to present each drive
|
||||
directly to Linux as an individual block device, with SMART health data intact.
|
||||
|
||||
Without this step, Linux cannot see the drives at all — the H730 hides them.
|
||||
|
||||
**The 2.5" OS drives are not affected** — they are a RAID1 virtual disk and the
|
||||
script only targets unconfigured physical drives.
|
||||
|
||||
---
|
||||
|
||||
### Step 7.1 — Download and install perccli
|
||||
|
||||
`perccli` is Dell's command-line tool for managing the H730. The `perc-nonraid.sh`
|
||||
script uses it to talk to the controller.
|
||||
|
||||
SSH into the Proxmox host if you are not already connected:
|
||||
|
||||
```bash
|
||||
ssh root@192.168.1.10
|
||||
```
|
||||
|
||||
Download and install perccli on the Proxmox host. Dell only distributes an
|
||||
RPM, so we convert it with `alien`:
|
||||
|
||||
```bash
|
||||
# Download (referer header required — Dell blocks plain curl)
|
||||
curl -L \
|
||||
--referer "https://www.dell.com/" \
|
||||
--user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
|
||||
"https://dl.dell.com/FOLDER03559396M/1/perccli-1.17.10-1.noarch.rpm" \
|
||||
-o /tmp/perccli.rpm
|
||||
|
||||
# Convert RPM → deb and install
|
||||
apt install -y alien
|
||||
alien --to-deb /tmp/perccli.rpm
|
||||
dpkg -i /tmp/perccli_*.deb
|
||||
|
||||
# Binary lands in /opt/MegaRAID/perccli/ — symlink it into PATH
|
||||
ln -s /opt/MegaRAID/perccli/perccli64 /usr/local/bin/perccli
|
||||
```
|
||||
|
||||
Verify it installed:
|
||||
|
||||
```bash
|
||||
perccli show
|
||||
```
|
||||
|
||||
You should see output starting with something like:
|
||||
|
||||
```
|
||||
CLI Version = 007.1907.0000.0000
|
||||
Operating system = Linux5.x
|
||||
Controller = 0
|
||||
Status = Success
|
||||
...
|
||||
```
|
||||
|
||||
If you see `command not found`, try `perccli64` instead — some versions install
|
||||
under that name.
|
||||
|
||||
---
|
||||
|
||||
### Step 7.2 — Run the non-RAID conversion script
|
||||
|
||||
```bash
|
||||
bash /opt/local_proxmox/scripts/perc-nonraid.sh
|
||||
```
|
||||
|
||||
The script first prints a summary of your controller and all drives:
|
||||
|
||||
```
|
||||
=== Controller overview ===
|
||||
...
|
||||
|
||||
=== Drives on controller 0 ===
|
||||
-------------------------------------------------------------
|
||||
EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp
|
||||
-------------------------------------------------------------
|
||||
8:0 7 UGood - 3.637 TB SATA HDD N N 512B WD... U
|
||||
8:1 8 UGood - 3.637 TB SATA HDD N N 512B WD... U
|
||||
...
|
||||
8:9 16 Onln 0 136.73 GB SATA SSD N N 512B TOSHIBA U ← OS drive (in VD)
|
||||
8:10 17 Onln 0 136.73 GB SATA SSD N N 512B TOSHIBA U ← OS drive (in VD)
|
||||
```
|
||||
|
||||
The columns that matter:
|
||||
- **EID:Slt** — Enclosure ID and slot number (physical location in the backplane)
|
||||
- **State** — `UGood` means unconfigured and ready. `Onln` means it is part of
|
||||
a virtual disk (your OS mirror). The script only touches `UGood` drives.
|
||||
- **Size** — confirms which are 3.5" data drives vs the small OS drives
|
||||
|
||||
The script then asks:
|
||||
|
||||
```
|
||||
Proceed with converting all non-OS drives to Non-RAID mode? [y/N]
|
||||
```
|
||||
|
||||
Type `y` and press Enter.
|
||||
|
||||
The script works through each drive. For each one you will see:
|
||||
|
||||
```
|
||||
Slot 0: setting to Good... Status = Success
|
||||
Slot 0: setting to Non-RAID... Status = Success
|
||||
Slot 1: setting to Good... Status = Success
|
||||
Slot 1: setting to Non-RAID... Status = Success
|
||||
...
|
||||
```
|
||||
|
||||
When all drives are done the script prints the final state — drives that were
|
||||
`UGood` should now show `JBOD` (which is Dell's term for non-RAID/per-disk mode):
|
||||
|
||||
```
|
||||
=== Final drive state ===
|
||||
EID:Slt State
|
||||
8:0 JBOD ←
|
||||
8:1 JBOD ←
|
||||
8:2 JBOD ←
|
||||
...
|
||||
8:9 Onln ← OS drive, untouched
|
||||
8:10 Onln ← OS drive, untouched
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Step 7.3 — Reboot
|
||||
|
||||
```bash
|
||||
reboot
|
||||
```
|
||||
|
||||
Wait about 60 seconds, then SSH back in:
|
||||
|
||||
```bash
|
||||
ssh root@192.168.1.10
|
||||
```
|
||||
|
||||
### Step 7.4 — Verify drives are visible
|
||||
|
||||
```bash
|
||||
lsblk -d -o NAME,SIZE,TYPE,ROTA
|
||||
```
|
||||
|
||||
You should see your drives listed. Something like:
|
||||
|
||||
```
|
||||
NAME SIZE TYPE ROTA
|
||||
sda 136.7G disk 0 ← OS-Mirror RAID1 virtual disk (the 2.5" drives)
|
||||
sdb 3.6T disk 1 ← 3.5" data drive
|
||||
sdc 3.6T disk 1
|
||||
sdd 3.6T disk 1
|
||||
...
|
||||
```
|
||||
|
||||
If you see only `sda` and nothing else, the non-RAID conversion did not take
|
||||
effect — reboot again and re-run `lsblk`. If still missing, re-run
|
||||
`perc-nonraid.sh` and check the output for any lines that say `Failed`.
|
||||
|
||||
---
|
||||
|
||||
## Phase 8 — Map Physical Bays to Drives
|
||||
|
||||
**The problem:** Linux names drives `sdb`, `sdc`, `sdd` etc. based on the order
|
||||
it finds them at boot — that order can change. What you need is the **stable
|
||||
hardware ID** (`/dev/disk/by-id/...`) for each drive, tied to its physical bay
|
||||
number, so you can reliably assign "bay 3" to a specific VM forever.
|
||||
|
||||
This phase generates that map.
|
||||
|
||||
---
|
||||
|
||||
### Step 8.1 — Run the bay mapping script
|
||||
|
||||
```bash
|
||||
bash /opt/local_proxmox/scripts/build-bay-map.sh
|
||||
```
|
||||
|
||||
Output looks like this (truncated example):
|
||||
|
||||
```
|
||||
=== Drive inventory ===
|
||||
|
||||
DEVICE SIZE MODEL SERIAL BY-ID PATH
|
||||
------ ---- ----- ------ ---------
|
||||
/dev/sdb 3.6T WDC_WD4000FYYZ WD-XXXXXXXXXXXX /dev/disk/by-id/scsi-35000cca23b7d4eb8
|
||||
/dev/sdc 3.6T WDC_WD4000FYYZ WD-XXXXXXXXXXXX /dev/disk/by-id/scsi-35000cca23b5e1234
|
||||
/dev/sdd 3.6T ST4000NM0023 Z1Z2XXXXXX /dev/disk/by-id/scsi-35000c500a0000001
|
||||
...
|
||||
|
||||
=== Bay identification via LED blink ===
|
||||
|
||||
To confirm which physical bay a device is in, blink its LED:
|
||||
ledctl locate=/dev/sdX # LED on
|
||||
ledctl locate_off=/dev/sdX # LED off
|
||||
```
|
||||
|
||||
The script gives you the by-id path for each device. Now you need to figure out
|
||||
**which physical bay each device is in**.
|
||||
|
||||
---
|
||||
|
||||
### Step 8.2 — Walk the bays with LED blink
|
||||
|
||||
This is the physical part. You need to be at the server (or have someone there).
|
||||
|
||||
For each drive, run the blink command, walk to the server, see which bay's amber
|
||||
LED is lit, note the bay number, then turn it off:
|
||||
|
||||
```bash
|
||||
# Blink sdb
|
||||
ledctl locate=/dev/sdb
|
||||
# Walk to the server, find the lit bay — write down: sdb = bay X
|
||||
ledctl locate_off=/dev/sdb
|
||||
|
||||
# Blink sdc
|
||||
ledctl locate=/dev/sdc
|
||||
# Walk to server, find the lit bay — write down: sdc = bay X
|
||||
ledctl locate_off=/dev/sdc
|
||||
|
||||
# Repeat for each drive
|
||||
```
|
||||
|
||||
> **Bay numbering on the R730xd:** Bays are numbered left to right, top to
|
||||
> bottom when facing the front of the server. Bay 1 is top-left. The exact
|
||||
> labeling depends on your bezel — some models label them 0–11, others 1–12.
|
||||
> Use whatever number is printed or silk-screened on the chassis next to the bay.
|
||||
|
||||
> **If the LED does not blink:** The `ledmon` daemon must be running. Start it:
|
||||
> ```bash
|
||||
> systemctl start ledmon
|
||||
> ledctl locate=/dev/sdb
|
||||
> ```
|
||||
|
||||
---
|
||||
|
||||
### Step 8.3 — Fill in the hardware layout document
|
||||
|
||||
Open the layout document:
|
||||
|
||||
```bash
|
||||
nano /opt/local_proxmox/docs/hardware-layout.md
|
||||
```
|
||||
|
||||
Fill in the table using what you noted in Step 8.2. It looks like this — fill
|
||||
in the `by-id` column from the script output and the bay number from the LED walk:
|
||||
|
||||
```
|
||||
| Bay | Assigned VM | Size | /dev/disk/by-id (fill in) |
|
||||
|-----|-------------|------|---------------------------------------------|
|
||||
| 1 | 100 | 4TB | scsi-35000cca23b7d4eb8 |
|
||||
| 2 | 100 | 4TB | scsi-35000cca23b5e1234 |
|
||||
...
|
||||
```
|
||||
|
||||
Save with **Ctrl+O**, Enter, then **Ctrl+X** to exit nano.
|
||||
|
||||
---
|
||||
|
||||
### Step 8.4 — Fill in the VM config placeholders
|
||||
|
||||
Now open each VM config example and replace the `PLACEHOLDER_BAYx` entries with
|
||||
the real by-id paths:
|
||||
|
||||
```bash
|
||||
nano /opt/local_proxmox/vm-configs/100-frigate.conf.example
|
||||
```
|
||||
|
||||
Change lines like:
|
||||
|
||||
```
|
||||
scsi1: /dev/disk/by-id/PLACEHOLDER_BAY1,size=0
|
||||
```
|
||||
|
||||
To the real path:
|
||||
|
||||
```
|
||||
scsi1: /dev/disk/by-id/scsi-35000cca23b7d4eb8,size=0
|
||||
```
|
||||
|
||||
Do this for all 8 drives in VM 100, drives 9–10 in VM 101, and drives 11–12 in
|
||||
VM 102. Save each file.
|
||||
|
||||
> **The full path starts with `/dev/disk/by-id/`** — but in the Proxmox VM
|
||||
> config you write the full path. Double-check by running:
|
||||
> ```bash
|
||||
> ls -la /dev/disk/by-id/ | grep -v part
|
||||
> ```
|
||||
> You will see the symlinks and the drives they point to.
|
||||
|
||||
---
|
||||
|
||||
## Phase 9 — GPU Passthrough Setup
|
||||
|
||||
**What this does:** Tells the Linux kernel to stop trying to use the two Quadro
|
||||
P2200s itself and instead hand them over to the VFIO driver, which holds them
|
||||
ready to be claimed by a virtual machine.
|
||||
|
||||
Three things happen:
|
||||
1. IOMMU is turned on in the kernel (the hardware feature VT-d enables)
|
||||
2. The host's NVIDIA/nouveau GPU drivers are blocked from loading
|
||||
3. The VFIO driver claims both GPUs at boot, before any other driver can
|
||||
|
||||
---
|
||||
|
||||
### Step 9.1 — Check your IOMMU groups first
|
||||
|
||||
Before running the script, verify that VT-d is actually active:
|
||||
|
||||
```bash
|
||||
dmesg | grep -i iommu | head -10
|
||||
```
|
||||
|
||||
You should see lines like:
|
||||
|
||||
```
|
||||
DMAR: IOMMU enabled
|
||||
Intel-IOMMU: enabled
|
||||
```
|
||||
|
||||
If you see nothing or see "disabled", IOMMU is not active. Go back to Phase 3
|
||||
and re-check that VT-d is set to **Enabled** in BIOS, then reboot and try again.
|
||||
|
||||
Also check that each GPU is in its own IOMMU group:
|
||||
|
||||
```bash
|
||||
for d in /sys/kernel/iommu_groups/*/devices/*; do
|
||||
n=${d#*/iommu_groups/*}; n=${n%%/*}
|
||||
printf 'IOMMU Group %s ' "$n"
|
||||
lspci -nns "${d##*/}"
|
||||
done | sort -V | grep -i nvidia
|
||||
```
|
||||
|
||||
Example good output — each GPU is in a different group:
|
||||
|
||||
```
|
||||
IOMMU Group 24 03:00.0 VGA compatible controller [0300]: NVIDIA GP106GL [Quadro P2200] [10de:1c35]
|
||||
IOMMU Group 24 03:00.1 Audio device [0403]: NVIDIA GP106 High Definition Audio [10de:10f1]
|
||||
IOMMU Group 31 04:00.0 VGA compatible controller [0300]: NVIDIA GP106GL [Quadro P2200] [10de:1c35]
|
||||
IOMMU Group 31 04:00.1 Audio device [0403]: NVIDIA GP106 High Definition Audio [10de:10f1]
|
||||
```
|
||||
|
||||
Each GPU (`03:00.0` and `04:00.0`) and its audio sibling (`03:00.1` and
|
||||
`04:00.1`) are together in their own group — that is exactly what you want.
|
||||
|
||||
> **If both GPUs are in the same IOMMU group as other devices** (chipset, NICs,
|
||||
> etc.), you may need to enable **ACS** (Access Control Services). This is rare
|
||||
> on server hardware like the R730xd which has good IOMMU separation. If you
|
||||
> hit this, ask before proceeding.
|
||||
|
||||
---
|
||||
|
||||
### Step 9.2 — Run the GPU passthrough script
|
||||
|
||||
```bash
|
||||
bash /opt/local_proxmox/scripts/gpu-passthrough-setup.sh
|
||||
```
|
||||
|
||||
The script first prints your NVIDIA devices:
|
||||
|
||||
```
|
||||
=== Detected NVIDIA devices ===
|
||||
03:00.0 VGA compatible controller [10de:1c35]: NVIDIA GP106GL [Quadro P2200]
|
||||
03:00.1 Audio device [10de:10f1]: NVIDIA GP106 High Definition Audio
|
||||
04:00.0 VGA compatible controller [10de:1c35]: NVIDIA GP106GL [Quadro P2200]
|
||||
04:00.1 Audio device [10de:10f1]: NVIDIA GP106 High Definition Audio
|
||||
|
||||
GPU PCI IDs to bind to vfio-pci: 10de:1c35,10de:10f1
|
||||
```
|
||||
|
||||
Then asks:
|
||||
|
||||
```
|
||||
Proceed with configuring VFIO passthrough? [y/N]
|
||||
```
|
||||
|
||||
Type `y` and press Enter.
|
||||
|
||||
The script runs through these steps — you will see each one printed:
|
||||
|
||||
```
|
||||
--- Configuring kernel cmdline for IOMMU ---
|
||||
Written: /etc/kernel/cmdline
|
||||
Boot tool refreshed.
|
||||
|
||||
--- Blacklisting nouveau and nvidia on host ---
|
||||
Written: /etc/modprobe.d/blacklist-gpu.conf
|
||||
|
||||
--- Binding GPU IDs to vfio-pci ---
|
||||
Written: /etc/modprobe.d/vfio.conf
|
||||
IDs: 10de:1c35,10de:10f1
|
||||
|
||||
--- Adding vfio modules to initramfs ---
|
||||
Updated: /etc/initramfs-tools/modules
|
||||
Initramfs updated.
|
||||
```
|
||||
|
||||
At the end it prints the PCI addresses you need:
|
||||
|
||||
```
|
||||
=== GPU PCI addresses for VM assignment ===
|
||||
|
||||
hostpci0: 0000:03:00,pcie=1 # VGA: NVIDIA GP106GL [Quadro P2200]
|
||||
hostpci0: 0000:04:00,pcie=1 # VGA: NVIDIA GP106GL [Quadro P2200]
|
||||
|
||||
IMPORTANT: Pass each GPU + its HDMI audio sibling to the same VM.
|
||||
```
|
||||
|
||||
**Write down or copy these addresses** — you need them in Phase 11 when
|
||||
creating the VMs. In this example:
|
||||
- GPU 1 is at `03:00` → goes in VM 100 (Frigate)
|
||||
- GPU 2 is at `04:00` → goes in VM 101
|
||||
|
||||
---
|
||||
|
||||
### Step 9.3 — Update the VM configs with the GPU addresses
|
||||
|
||||
While you have the addresses, add them to the VM configs now:
|
||||
|
||||
```bash
|
||||
nano /opt/local_proxmox/vm-configs/100-frigate.conf.example
|
||||
```
|
||||
|
||||
Find the line:
|
||||
|
||||
```
|
||||
hostpci0: 0000:XX:00,pcie=1,x-vga=1
|
||||
```
|
||||
|
||||
Replace `XX:00` with your GPU 1 address, e.g.:
|
||||
|
||||
```
|
||||
hostpci0: 0000:03:00,pcie=1,x-vga=1
|
||||
```
|
||||
|
||||
Save, then do the same for VM 101:
|
||||
|
||||
```bash
|
||||
nano /opt/local_proxmox/vm-configs/101.conf.example
|
||||
# Change XX:00 to 04:00 (GPU 2)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Step 9.4 — Reboot
|
||||
|
||||
```bash
|
||||
reboot
|
||||
```
|
||||
|
||||
Wait about 60 seconds, then SSH back in:
|
||||
|
||||
```bash
|
||||
ssh root@192.168.1.10
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Step 9.5 — Verify passthrough is working
|
||||
|
||||
```bash
|
||||
lspci -nnk | grep -A3 -i nvidia
|
||||
```
|
||||
|
||||
For each GPU, look for the driver line. It **must** say `vfio-pci`:
|
||||
|
||||
```
|
||||
03:00.0 VGA compatible controller [10de:1c35]: NVIDIA GP106GL [Quadro P2200]
|
||||
Subsystem: ...
|
||||
Kernel driver in use: vfio-pci ← correct
|
||||
Kernel modules: nouveau
|
||||
|
||||
04:00.0 VGA compatible controller [10de:1c35]: NVIDIA GP106GL [Quadro P2200]
|
||||
Subsystem: ...
|
||||
Kernel driver in use: vfio-pci ← correct
|
||||
Kernel modules: nouveau
|
||||
```
|
||||
|
||||
**If it shows `nouveau` or `nvidia` instead of `vfio-pci`:** The blacklist did
|
||||
not take effect. Run:
|
||||
|
||||
```bash
|
||||
update-initramfs -u -k all
|
||||
reboot
|
||||
```
|
||||
|
||||
Then check again. If still wrong, verify the blacklist file exists:
|
||||
|
||||
```bash
|
||||
cat /etc/modprobe.d/blacklist-gpu.conf
|
||||
# Should show: blacklist nouveau, blacklist nvidia, etc.
|
||||
|
||||
cat /etc/modprobe.d/vfio.conf
|
||||
# Should show: options vfio-pci ids=10de:1c35,10de:10f1
|
||||
```
|
||||
|
||||
Also confirm IOMMU is in the kernel command line:
|
||||
|
||||
```bash
|
||||
cat /etc/kernel/cmdline
|
||||
# Should contain: intel_iommu=on iommu=pt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 9 complete — where you are now
|
||||
|
||||
| What is done | Status |
|
||||
|---|---|
|
||||
| 3.5" drives in non-RAID mode, visible to Linux | ✓ |
|
||||
| Physical bay → by-id map documented | ✓ |
|
||||
| VM configs updated with real drive paths and GPU addresses | ✓ |
|
||||
| IOMMU active, both GPUs claimed by vfio-pci | ✓ |
|
||||
|
||||
**Next:** Phase 10 — Install the fan control service (stops iDRAC from running
|
||||
fans at 100% because of the non-Dell GPUs) and the stagger spin-up service.
|
||||
That walkthrough is in `docs/walkthrough-phases-10-12.md`.
|
||||
Reference in New Issue
Block a user