this guide documents the process of upgrading TrueNAS SCALE on an HP MicroServer Gen8 with a custom boot configuration. the server uses a MicroSD card with GRUB in the MBR to chainload to an SSD on the ODD SATA port, which the BIOS cannot directly boot from.
| document | description |
|---|---|
| DEBIAN_PACKAGES.md | how to install Debian packages using apt on TrueNAS SCALE 25.10.1 and later versions |
| swap configuration | configure 8GB swap on TrueNAS SCALE 25.10+ using ZFS zvol for optimal performance and OOM protection |
- server: HP MicroServer Gen8
- hostname: bender
- boot device: MicroSD card (~60GB) with GRUB MBR
- system drive: SSD on ODD SATA port (not BIOS-bootable)
- data pool: 4x 18TB WD drives in RAIDZ1 named "BIG"
- BIOS boots from MicroSD MBR (only bootable device BIOS recognizes)
- MicroSD GRUB chainloads to SSD on ODD SATA port
- SSD contains actual TrueNAS installation
when TrueNAS updates:
- it creates a new boot environment (e.g.,
ROOT/25.10.1) - it updates GRUB on the SSD
- it does NOT update the MicroSD GRUB config
- MicroSD GRUB still references old boot environment → boot fails
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL,TRAN
look for the MicroSD card - in this case it was sde (59.5GB, "Internal SD-CARD").
mkdir -p /mnt/microsd
mount /dev/sde1 /mnt/microsd
cp /mnt/microsd/boot/grub/grub.cfg ~/grub-microsd-backup-$(date +%Y%m%d).cfg
umount /mnt/microsd
via web UI:
- System → General → Manage Configuration → Download File
zpool status BIG > ~/pool-status-backup.txt
zfs list -r BIG > ~/datasets-backup.txt
zpool get all BIG > ~/pool-properties-backup.txt
# Copy these to your local machine
scp root@bender:~/*backup.txt .
ensure you have working HP iLO access as you'll need it after reboot.
via web UI:
- go to System → Update
- click Download Updates (if not already downloaded)
- click Apply Pending Update
- system will install and automatically reboot
- boot will fail (this is expected)
when GRUB menu appears (showing old version "TrueNAS Scale GNU/Linux 24.04.2"):
- press
eto edit the boot entry - locate and modify these lines:
find:
linux /ROOT/24.04.2@/boot/vmlinuz-6.6.32-production+truenas root=ZFS=boot-pool/ROOT/24.04.2 ...
change to:
linux /ROOT/25.10.1@/boot/vmlinuz-6.12.33-production+truenas root=ZFS=boot-pool/ROOT/25.10.1 ...
find:
initrd /ROOT/24.04.2@/boot/initrd.img-6.6.32-production+truenas
change to:
initrd /ROOT/25.10.1@/boot/initrd.img-6.12.33-production+truenas
- press
Ctrl+XorF10to boot
once the system boots successfully:
IMPORTANT: device names may have changed after reboot. find your MicroSD:
# Check current device mapping
lsblk -o NAME,SIZE,TYPE,FSTYPE
# Find the ext4 partition (~128M)
blkid | grep ext4 | grep -v boot-pool
in our case, the MicroSD shifted from sde1 to sdf1 after reboot.
mount and fix the configuration:
# Mount MicroSD (was sdf1 after reboot)
mount /dev/sdf1 /mnt/microsd
# Backup current config
cp /mnt/microsd/boot/grub/grub.cfg /mnt/microsd/boot/grub/grub.cfg.bak
# Update all references automatically
sed -i 's/24\.04\.2/25.10.1/g; s/6\.6\.32/6.12.33/g' /mnt/microsd/boot/grub/grub.cfg
# Verify changes
grep "25.10.1" /mnt/microsd/boot/grub/grub.cfg | head -3
# Should show:
# menuentry 'TrueNAS Scale GNU/Linux 25.10.1' ...
# linux /ROOT/25.10.1@/boot/vmlinuz-6.12.33-production+truenas root=ZFS=boot-pool/ROOT/25.10.1 ...
# initrd /ROOT/25.10.1@/boot/initrd.img-6.12.33-production+truenas
# Sync and unmount
sync
umount /mnt/microsd
reboot
system should now boot automatically without manual intervention.
after successful boot:
# Check version
cat /etc/version # Should show: TrueNAS-SCALE-25.10.1
# Check kernel
uname -r # Should show: 6.12.33-production+truenas
# Verify pool health
zpool status BIG
# Check boot environments
zfs list -r boot-pool/ROOT
- old kernel: 6.6.32-production+truenas
- new kernel: 6.12.33-production+truenas
- old boot environment: ROOT/24.04.2
- new boot environment: ROOT/25.10.1
symptom: system doesn't boot after update solution: use iLO console to manually edit GRUB (step 2 above)
symptom: device names changed, can't find MicroSD solution:
lsblk -o NAME,SIZE,FSTYPE
blkid | grep ext4
look for the small (~128M) ext4 partition.
symptom: kernel version in GRUB doesn't match solution: check actual kernel version on SSD:
ls /boot/ROOT/25.10.1@/boot/vmlinuz-*
use the exact filename shown.
symptom: BIG pool doesn't show up after upgrade solution:
# Manually import pool
zpool import BIG
# Or if that fails, list importable pools
zpool import
- no need to run
update-grub- you're only editing the config file, not reinstalling GRUB - device names (
/dev/sdX) may change between reboots, but ZFS uses UUIDs so pools remain accessible - your data pool is separate from the boot device and won't be touched during upgrade
- keep the old boot environment - don't delete ROOT/24.04.2 until you've verified 25.10.1 is stable
for future TrueNAS upgrades, repeat this process:
- apply update via web UI
- boot fails (expected)
- manual boot via iLO console with new version numbers
- fix MicroSD GRUB with new paths
- reboot to verify
for future upgrades, you can create a script to automate the MicroSD GRUB fix. save this as fix-microsd-grub.sh:
#!/bin/bash
OLD_VERSION="$1"
NEW_VERSION="$2"
OLD_KERNEL="$3"
NEW_KERNEL="$4"
if [ -z "$4" ]; then
echo "Usage: $0 OLD_VERSION NEW_VERSION OLD_KERNEL NEW_KERNEL"
echo "Example: $0 24.04.2 25.10.1 6.6.32 6.12.33"
exit 1
fi
# Find MicroSD (look for small ext4 partition)
MICROSD=$(blkid | grep ext4 | grep -v boot-pool | head -1 | cut -d: -f1)
if [ -z "$MICROSD" ]; then
echo "Error: Could not find MicroSD device"
exit 1
fi
echo "Found MicroSD: $MICROSD"
# Mount
mkdir -p /mnt/microsd
mount $MICROSD /mnt/microsd
# Backup
cp /mnt/microsd/boot/grub/grub.cfg /mnt/microsd/boot/grub/grub.cfg.bak
# Update
sed -i "s/$OLD_VERSION/$NEW_VERSION/g; s/$OLD_KERNEL/$NEW_KERNEL/g" /mnt/microsd/boot/grub/grub.cfg
# Verify
echo "Verifying changes..."
grep "$NEW_VERSION" /mnt/microsd/boot/grub/grub.cfg | head -3
# Cleanup
sync
umount /mnt/microsd
echo "Done! MicroSD GRUB updated. Safe to reboot."
usage:
chmod +x fix-microsd-grub.sh
./fix-microsd-grub.sh 24.04.2 25.10.1 6.6.32 6.12.33
this procedure was tested on:
- HP MicroServer Gen8
- TrueNAS SCALE Dragonfish 24.04.2 → Goldeye 25.10.1
- 4x 18TB WD drives in RAIDZ1
- custom boot configuration with MicroSD GRUB MBR
your mileage may vary with different hardware configurations.