Unable to find root device ''

The problem appears to be that rEFInd isn't automatically creating the refind_linux.conf file in the /boot directory.

From step 4 of the "EFI Stub Loader Support Technical Details" from the rEFInd documentation:

rEFInd looks for a file called refind_linux.conf in the same directory as the kernel file. It consists of a series of lines, each of which consists of a label followed by a series of kernel options. The first line sets default options, and subsequent lines set options that are accessible from the main menu tag's submenu screen. If you installed rEFInd with the refind-install script, that script created a sample refind_linux.conf file, customized for your computer, in /boot. This file will work without changes on many installations, but you may need to tweak it for some.

I'm not sure why it isn't creating this file, but it's highly likely you can solve the problems you're having by creating it.

Creating the refind_linux.conf file

The Arch Linux wiki has an excellent entry on how to do this, but essentially you place it in the same directory as your kernel (usually in /boot, either by creating it automatically or manually). The first uncommented line of the file will be the default parameters for booting the kernel.

I created my file using the mkrlconf command, and the resulting file at /boot/refind_linux.conf looked like this:

"Boot with standard options"  "archisobaseddir=arch archisolabel=ARCH_201610"
"Boot to single user mode"    "archisobaseddir=arch archisolabel=ARCH_201610 single"
"Boot with minimal options"   "ro root=UUID=514a997c-a921-403d-849f-d901d26a73db"

We're getting somewhere, but this didn't work yet. Because I created it from the live USB, the first two entries are not correct as they refer to ISO on the USB instead. The final entry is actually correct though, and this is because like the error you received, it sets the root device from '' to the UUID of your / disk.

So to set it as the primary boot option just delete the other lines and change the label.

"Boot with standard options"  "ro root=UUID=514a997c-a921-403d-849f-d901d26a73db"

Save the file and restart the system, it should now work correctly!

Footnotes

  1. This is of course a long way to go about creating the file. You don't have to use the mkrlconf to generate it, you could manually create it yourself. It's more that it auto-populates the disk UUID (which I do not want to have to copy and type out manually).

  2. Step 5 from the Stub Loader Technical Details (linked above) outlines how, if no refind_linux.conf file is present, rEFInd will look for a kernel entry in /etc/fstab. With a weird volume configuration though it's unlikely this will work.