My first TrueNAS (Scale v24.04.1.1) will be on an 2013 vintage Lenovo M93 i5 4570 system with 16GB, two SATA 120GB SSDs, two WD 2 TB enterprise HDDs.
I booted the TueNAS installer from a USB flash drive and installed it onto the M.2 SATA drive array without a problem, TrueNAS detected the drives just fine. However the machine’s BIOS did not, and TrueNAS wouldn’t boot.
This is a common problem with old hardware, and can be resolved using rEFInd and clover for example. I ran into this problem a couple of years ago on an old Dell system, but resolved it by installing a SATA HDD and chrooting into a mirror Op Sys installation on NVMe. I wasn’t aware of rEFInd or clover back then.
My point in posting this, aside from it being an introductory post as a new TrueNAS user is to ask whether others have used Clover or rEFInd to boot TrueNAS from PCIe card storage devices. NVMe is most common, but Clover didn’t recognize my SATA drives, although I copied all of the drivers from the “off” folder into the UEFI folder.
I will continue to search the net for better examples to configure Clover or rEFInd but have come up short thus far.
I believe this is a doable and reliable approach to run TrueNAS, as opposed to installing it onto a USB. The USB will only be used for booting, not for continuous running of TrueNAS. As such lifetime of the Clover / EFInd boot USB won’t be a concern, and a copy of that is the failsafe.
I had this running for a while on my Dell R720. Stopped using SCALE but your welcome to my notes if they are of assistance. This configuration was on a USB boot plugged into an internal port and the BIOS set to default to the USB on system boot.
Clover Boot CD Stuff
Install NVMe drive on PCIe card in server
Install your target operating system on NVMe drive
Plug a USB drive into your laptop and install latest clover bootloader ISO on USB drive
While still on your laptop, open the USB and navigate to the /EFI/CLOVER/drivers/off directory.
Copy the “nvme” driver file to /EFI/CLOVER/drivers/EFI and /EFI/CLOVER/drivers/BIOS
Make a copy of the default config.plist file as a template
Eject the USB and attach it to a bootable USB port on your server
Boot the server, enter the bios menu, and change the configuration to boot from the Clover USB
Reboot the machine. It should finish booting and stop at the Clover boot menu
Press F2 to create a boot log on the USB drive. You won’t see anything happen on the screen, but behind the scenes Clover will have saved the log file to a directory called /EFI/CLOVER/misc
Shutdown the server and move the USB drive back over to your laptop.
Open /EFI/CLOVER/misc/preboot.log and search for the last instance of “NVMe” in the file. You should see a string that includes the GUID of the drive. This is the volume ID. Copy/paste this GUID into a text editor and close the file.
Open the /EFI/CLOVER/config.plist file and replace the contents (entire file) with the following text
I found this post on the old forum which led me to zfsbootmenu. The comments after the post saying that was the solution with zero config etc was why I am now exploring zfsbootmenu.
Starting with the clover usb stick, I renamed the /EFI/BOOT/BOOTX64.EFI with the zfs recovery efi. It booted zfsbootmenu and it found the SATA drives but found no pools to import, or had trouble importing them. Still trying to figure out how to use zfsbootmenu.
At least it provides a familar linux environment to work with. I believe it’s just a matter of learning how to tell it to boot the TrueNAS EFI on the SATA. Here is what I see in zfsbootmenu for blkid:
I removed the USB blocks, those above are what the TrueNAS installer created on the 2 PCIe SATA drives. As you can see, the “boot-pool” zfs pool is there. Why zfsbootmenu couldn’t import it I don’t know. Perhaps a version difference, TrueNAS using a newer version that zfsbootmenu?
Although I like the ability to shuffle files around on the Clover USB stick, I think zfsbootmenu is a superior solution assuming I can get it to work
I am able to start the TrueNAS configuration installed on the pcie SATA drives using the advanced menu option of the TrueNAS installation USB.
I believe the reason zfsBootMenu can’t import the zfs boot-pool on the SATA drives is that it is using zfs version 2.2.2-1 whereas the version of zfs on the TrueNAS SATA drives is newer, version 2.2.4-1.
I will need to change the installer’s USB to boot the advanced option as the default or learn how to rebuild the zfsBootMenu USB. It seems that altering the TrueNAS installer isn’t a good solution, as the USB is continually active. That may be due to configuration not being completed yet, not sure. If that would always be the case not good, as I only want the USB to be used for the short duration to boot from the SATA pool.
I spent the entire day trying to resolve my boot issue on this old computer.
I truly thought zfsBootMenu was the perfect solution. I was assured by those who have been using zfs for awile that the version difference between zfsBootMenu (2.2.2-1) vs the current TrueNAS installer (2.2.4-1) are minor and wouldn’t be the reason why zfsBootMenu can’t import the boot-pool that TrueNAS created.
zfsBootMenu booted off USB can see the SATA drives where the BIOS can’t, just like TrueNAS can.
“We’re going to find one of two things: a pool is imported, but none of your datasets are laid out in a way that ZFSBootMenu understands, or no pools are imported because TrueNAS is doing something funny with the version of ZFS they use and ZBM can’t import it at all”
The only potential solution offered was:
“If zpool list shows nothing and zpool import shows nothing, your only option is to natively build ZFSBootMenu on TrueNAS to build the kernel modules + userland into the EFI bundle, though I suspect that there are larger issues at play here. ‘zpool import’ should at least see the pool, even if it can’t import it for a multitude of different reasons.”
I spent considerable time with Clover as well. I was never able to get it to recognize the SATA PCIe card tho. I don’t think an EFI driver exists for it. There is a way to provide a “fakeID” under the Options–> PCI Devices but that is to allow an existing driver to be used for similar hardware. I couldn’t find much info about how to construct the fakeID value from looking at pci info or the Clover logs. I saw the device appeared in the logs, but nit by name or function only be numeric values (I compared the Clover numeric values to another distro I booted from USB that did detect the PCIe SATA card).
So after going round & round with this problem for several days now I don’t see a solution other than use an external USB boot-pool. The 2 internal 120GB M.2 SATA drives are essential useless and I’ll opt to use just one of them in a USB enclosure instead.