Some short notes I made along the way to benefit the future me.
On my new server, Proxmox was unable to boot directly to a ZFS file system on a drive connected via the HBA controller. UPDATE (2020-01-27): The SuperMicro X10SRH-CLN4F motherboard boots just fine from a root-on-ZFS disk in UEFI mode from the built-in SAS HBA. The only required change is the last step in the description below; to add a delay before attempting to mount ZFS volumes at boot-time.
There is a potential drawback to installing Proxmox in root-on-ZFS mode in a UEFI system: The drive gets partitioned, so ZFS doesn’t get uninhibited access to the entire block storage. This may or may not make a difference for performance, but in terms of speed on an SSD solution, I haven’t really seen any cause for concern for my real-world use case. An alternative would be to install the underlying operating system to a separate physical drive.
Also note that the workaround below works on a single vFAT volume. Since FAT doesn’t support symlinks, kernel or initramfs updates in Proxmox/Debian will require some manual work, which most sane people would likely wish to avoid.
I’m leaving the rest of my article intact for posterity:
My workaround was to place /boot – not the system – on a USB stick connected directly to the motherboard.
After installation, reboot with the Proxmox installation medium, but select
Install Proxmox VE (Debug mode).
When the first shell appears,
Ctrl+D to have the system load the necessary drivers.
Check the name of the USB drive.
Clear the disk, create an EFI System partition and write the changes. Then apply a FAT to the new partition
Prepare to chroot into the installed Proxmox instance
mkdir /media/rescue zpool import -fR /media/rescue rpool mount -o bind /dev /media/rescue/dev mount -o bind /sys /media/rescue/sys mount -o bind /dev /media/rescue/dev chroot /media/rescue
Make room for the new /boot
mv /boot /boot.bak
/etc/fstab and add the following:
/dev/sdb1 /boot vfat defaults 0 0
Make the stick bootable
mount -a grub-install --efi-directory=/boot/efi /dev/sdb update-grub grub-mkconfig -o /boot/grub/grub.cfg
Exit the chroot, unmount the ZFS file system (
zfs export rpool)and reboot
In my specific case I had a problem where I got stuck in a shell with the ZFS pool not mountable.
/sbin/zpool import -Nf rpool
Exit to continue the boot process. Then edit
/etc/default/zfs and edit a delay before attempting to boot the file system.
Then apply the new configuration: