System BIOS doesn't show Ubuntu as boot option after installation?

Just a question before I start, you have 2 drives? 256GB with Windows and 16GB mSATA? What do you use the mSATA for if not Ubuntu?


To my knowledge PenDriveLinux.com creates MBR-style bootable media, with uncertain support for UEFI. If you want your machine to use UEFI, which is really recommended, you should disable CSM and create only UEFI bootable media just to be sure that you don't accidentally boot and install in MBR mode while installing to a GPT partitioned drive and probably making things more messy.

You seem to have installed in MBR mode, otherwise the installer would have recognized a UEFI machine and be able to register an EFI boot loader in the firmware bootmenu that it placed on the EFI System Partition (ESP). If you can't find an Ubuntu related .efi binary on your ESP, then you probably installed in MBR mode (or GPT MBR mode) and you should be able to boot from the drive in leagcy/MBR mode, you just need to figure out how. (Typically Thinkpads offer priority booting, e.g. booting legacy first.)

Gummiboot as default hotpluggable UEFI bootloader

Given that you already have a GPT partitioned target disk (all with preinstalled Windows 8 should be), you could try troubleshooting your existing MBR installation by trying the following instructions.

Note: Please be aware that these instructions are not a permanent fix or proper setup. They are just a static configuration to get you into your installation and proceed with troubleshooting from there (e.g. installing GRUB properly).

  1. Get gummiboot

    Download gummiboot from the Arch Linux repositories. (Everything is fine, we are just doing Linus Torvalds style package management. You can find the download link on that page far on the right under Package Actions > Download From Mirror)

    Extract gummibootx64.efi from the package (it's under /usr/lib/gummiboot/) and copy it as \EFI\BOOT\BOOTx64.EFI to your ESP. Backup existing files with the same name (e.g. use zip).

  2. Copy kernel files

    Create a new folder at the root of your ESP named Ubuntu and copy all the files with the highest version number from /boot/ to the folder you just created.

    If you are on Windows, download the latest package matching linux-image-$VERSION-generic for your distribution from the repositories. (initrd.img-$VERSION-generic is missing as it is generated automatically by Debian scripts.)

  3. Configure gummiboot to boot the Ubuntu Linux kernel

    Create folders along the path loader/entries/ at the root of your ESP and create a file named ubuntu.conf in there. Create a configuration by editing the file following this template:

    title          Ubuntu
    linux          /Ubuntu/vmlinuz-$VERSION-generic
    initrd         /Ubuntu/initrd.img-$VERSION-generic
    options        root=UUID=$UUID ro
    
    • title: Choose what you like. Must be human readable.

    • linux: The filename of the kernel to load, replace $VERSION with the version number of the file you copied.

    • initrd: The filename of the initial ram disk. Basically the same as with the linux option, $VERSION with the version number of the file you copied. Leave this line out if you don't have such a file (I don't know if it will work then though).

    • options: Replace $UUID with the filesystem UUID of your Ubuntu root filesystem. Run ll /dev/disk/by-uuid/ | grep sdxY to get the GUID, replace sdxY with the actual device name. (Forget what I wrote here earlier about partition GUIDs, that doesn't seem to work for now.)

      You can add the remaining options of the linux line from your /boot/grub/grub.cfg. The UUID is necessary part, the rest should be rather optional. My linux line in grub.cfg looks like this: root=UUID=00000000-0000-0000-0000-000000000000 ro quiet splash $vt_handoff

    You also need to add the file loader.conf in loader/ to make gummiboot work.

    default        Ubuntu
    timeout        4
    

    default is the title of the default entry to boot. Edit appropriately if you have chosen another title.

  4. Reboot

    You should be able to boot from the HDD/SSD that contains the ESP with gummiboot and be presented with the gummiboot menu, allowing you to boot your Ubuntu installation.

  5. Optional: Create a gummiboot menuentry for GRUB

    Similar to the instructions above, create loader/entries/ubuntu.conf with the following content:

    title          Ubuntu GRUB
    efi            \EFI\ubuntu\grubx64.efi
    

    Alternative:

    title          Ubuntu GRUB
    efi            \EFI\ubuntu\shimx64.efi
    

I'm still researching this topic and I wanted to test this throughly before writing it down here in a clean and non-quirky way, but may be these instructions give you helpful directions and are more fun to you than trying to install again and again.

Good luck.

Further reading

  • AdamW's UEFI boot: how does that actually work, then? is a good but lengthy read on treating the UEFI boot topic not like magic.
  • https://wiki.archlinux.org/index.php/Gummiboot
  • https://wiki.archlinux.org/index.php/EFISTUB

FYE

Stuff I suffered from during testing:

  • PARTUUID/GUID - doesn't seem to work.
  • initramfs compiled with dep option instead of most.
  • initramfs of cloned installation finds a hibernation image from the source installation and boots that instead. m(
  • Windows avoids mounting ESPs.