Some short notes I made along the way to benefit the future me.
Background
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.
Process
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.
lsblk
Partition it.
cfdisk /dev/sdb
Clear the disk, create an EFI System partition and write the changes. Then apply a FAT to the new partition
mkfs.vfat /dev/sdb1
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
Edit /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.
ZFS_INITRD_PRE_MOUNTROOT_SLEEP=15
Then apply the new configuration:
update-initramfs -u