When I was setting up my Thinkpad X1 Carbon, UEFI booting looked like a good idea, and therefore I set up direct EFISTUB booting with kernel parameters right in the EFI variable. After my laptop returned from service with a reset and updated firmware, I noticed that I cannot re-add the boot entry (with the kernel commandline) to boot options with efibootmgr (possibly same as https://bugs.launchpad.net/ubuntu/+sour … ug/1167567, as I was also getting an ENOSPC in strace), although an entry for UEFI shell can be added just fine. Therefore I wrote a .nsh script and booted from the shell, as I don't reboot very often, so it wasn't that bad, and this worked. Later I experienced bug 34401 (so I had to boot from EFI shell, and only some random kernel versions would work).
Now, however, even kernel versions that used to work for me don't boot anymore, they just freeze when the shell tries to execute them (I still see the shell on the screen, even when boot mode is set to "diagnostics" rather than "quiet" in the firmware). I tried booting with gummiboot, installing it from an Arch LiveUSB (interestingly, I wasn't able to add the efi variable entry with efibootmgr, although a very similar commandline for UEFI shell worked just fine; I tried both with the liveUSB version and with the newest version installed in chroot on my system). When I executed the local gummiboot from EFI shell, it froze (again with the shell still on the screen). However, copying my kernel (stock 3.9.9-1) and initrd to the USB stick allowed the system to boot (via the LiveUSB gummiboot). I have the newest Lenovo firmware (2.56-1.03 - G6ET96WW-G6HT21WW), set to "setup mode" with everything unlocked and secure boot off. I think this might be due to some "security features" of the newer firmware, but I have been unable to downgrade, because I can't find older fw versions anywhere.
Has anyone experienced something like this? Do you have any ideas (besides carrying a USB stick with me in case I want to reboot)?
Last edited by kamila (2013-07-22 07:10:17)
The fact that you're having problems booting from the hard disk but not from a USB drive suggests some sort of speed-related issue -- maybe a race condition in the boot loader or kernel code, for example. If so, that's important information for those trying to diagnose this persistent bug, and of course keeping a USB flash drive handy is one workaround, albeit an inelegant and annoying one.
Beyond that, you could try the following:
Try rEFInd. Note that the official rEFInd page includes download links for binaries built with both Tianocore and GNU-EFI. Sometimes the GNU-EFI build works better than the Tianocore build, so try them both. (The Arch version of rEFInd is built with Tianocore, but of course it was built on a different system with a different compiler than my own version, so it's a third variant that might work better or worse, too.)
Use another boot loader. GRUB 2 is quite common and works for many people, although I'm not a big fan of it. You might prefer ELILO, GRUB Legacy, or the new SYSLINUX EFI version. I run down the options on my EFI Boot Loaders for Linux page. Note that rEFInd and gummiboot both rely on the EFI stub loaders, so if that's what's causing you problems, switching to a truly different boot loader may help.
I have Arch linux 3.9.8-1 running just fine on a X1 Carbon with the latest bios version.
Not sure why you're experiencing problems, but I followed the arch installation guide for UEFI and grub (v2) and it worked surprisingly well (surprisingly because I hadn't installed an archlinux in 6 years or so).
Even if I can't provide you any additional pointers, just know there is a solution out there somehow. Feel free if you need any additional system / configuration details.
It looks like this problem has been sorta magically solved: if I boot into my current system using the kernel and initrd on USB, I can use efibootmgr to add the boot entry, and that one boots (although adding when booted from HDD or from an Arch LiveUSB (booted with EFI) still doesn't work). So I guess that's it for now.
Thank you very much for your input!