I was finally fed up with not being able to render my Blender projects on the GPU, just because there was not enough memory on the card, and some other quirks my computer developed over time. In addition to that it was high time to upgrade the hardware and start on a clean installation.
The purpose of Rendering has driven the decision to chose a good graphic card, that is affordable, built in a PC from a shop where I do have an account. The result is the gaming machine Predator 9000 with a NVIDIA GeForce GTX 1080 Ti with 11 GB VRAM.
This being a gaming computer came with Windows 10 preinstalled. So after some rudimentary update and configuration of that system, I went around to install a Linux Mint KDE in dual boot.
Did not work. First issue was an error related to ACPI, for which the bios firmware did not supply driver, so I had to turn them off with the boot parameter:
acpi=off
During the startup there were some curious error messages relating to SATA, but the life system came up (although in really low screen resolution). Installing however failed because there were no hard drives detected. parted -l as well as fdisk -l reported no drives besides the USB stick from which I booted.
So, searching the internet brought up some issues, that lead me to the conclusion that the cause is somewhere in the Bios (or UEFI as it is now called). Turning off secure boot did not change anything, but was recomended never the less.
As there were errors relating to SATA, I switched the „On Board SATA Mode“ from „RST Premium with Optane“ to AHCI and suddenly the Linux life system did detect both hard drives (one SSD one disk). However Windows is no longer bootable. Switching the mode back will allow Windows to boot.
The solution to this issue is documented in this post.
While this allows the installation of Linux on a harddrive, I was then not able to boot into Linux as the firmware boot manager always chooses the Windows Boot Manager to start. According to this question/answer this seems to be worsened by some motherboard manufacturers only provide minimal UEFI implementations in their firmware and do not allow to select any boot options (other than the boot order and the device) in the BIOS. Reading up on this lead to lot’s of posts that suggest to use bcedit to configure the bootmanager. For me this does not work, as I am unable to place the grub boot manager as first entry in the firmware boot manager and make it stick.
Taking a look at the different directories in the EFI files system there are:
- Boot
- OEM
- Microsoft
- ubuntu
I am unsure what the Boot folder is for, it was my impression, that this would contain the first bootloader to be used and then delegating to the Microsoft bootloader, however replacing the bootx64.efi file there with the one from ubuntu (grubx64.efi), by renaming, did not have an effect. However replacing /Microsoft/Boot/bootmgfw.efi with the grub one brings up the grub bootloader. However Windows 10 is no longer bootable (as the bootloader points the grub bootloader and Linux does not start at all. From the file naming I would assume that this file is the Boot Manager of the FirmWare.
This lead me to the next attempt by aproaching this issue with rEFInd. Hoewever installing proves difficult, as it is not possible from a live linux version and under Windows the EFI filesystem cannot be mounted correctly. This leaves the manual installation through the shell, which of course is not available and has to be installed first. So first things first: doing a testrun with the CD-image of rEFInd. This let’s me start Windows and I get an option to startup Linux Mint which hangs itself then with:
fb: switching to nouveaufb from EFI VGA
This seems to be another issue with poor firmware implementation. The solution there is to add nomodeset in the boot parameter, as the firmware as well as the Linux installation do not support the graphics card (GTX 1080 Ti). This would also explain why the installation happen in low resolution. Installing the Nvidea proprietary drivers resolves this problem. With Linux booting now with the help of rEFInd, it should then also be possible to install rEFInd as default Boot Manager, whithout going through the shell.
Just installing rEFInd does not work, as the bios firmware still picks the boot manager for windows, but with this setup it should be possible to do some renaming and rEFInd will still find the boot manager for windows.
With hindsight there is probably an easier way than the described below:
When starting Linux the EFI partition is mounted under /boot/efi, which makes life a bit easier. All path in this setup have the root there, so / is actually /boot/efi/. First I renamed the the /Microsoft/Boot/bootmgfw.efi to win10mgf.efi (not sure if this was necessary, but I wanted to make sure that there are not two files named the same). Then I renamed /Microsoft ro /Microsoft_renamed. I created a new directory /Microsoft and moved the /refined folder in there and renamed it to /Microsoft/Boot. Then I renamed the refind.efi to bootmgfw.efi. This is required as the firmware boot manager searches on the EFI partition for /Microsoft/Boot/bootmgfw.efi. With this setup I got a boot loader menu by rEFInd with entries for grub, boot-rescue and Linux Mint. With delete I hid the boot-rescue option. From this menu, Linux is bootable directly as well as through Grub. Windows is only available as option through Grub, but not bootable.
The issue there is that the boot menu entry is generally generated by the os-prober and points to the rEFInd efi. To fix this, disable os-prober in /etc/default/grub.d/linux.cfg:
GRUB_DISABLE_OS_PROBER=true
Then you create a custom entry in /etc/grub.d/40_custom by copying the original entry generated by the os-prober in /boot/grub/grub.conf (all the way down) and replace the path /EFI/Microsoft/Boot/bootmgfw.efi with /EFI/Microsoft_renamed/win10mgf.efi (or whatever you renamed it to). Now Windows is bootable through grub.