When I updated my Fedora 20 installation today I ran into trouble booting my system using the EFI Stub mechanism even though it booted fine using GRUB. I ended up in the Emergency Shell.
Looking at the logs using journalctl, here are the relevant entries (with times and irrelevant entries removed):
[ ]: Reached target Switch Root. [ ]: Started Plymouth switch root service. [ ]: Starting Switch Root... [ ]: Not switching root: /sysroot does not seem to be an OS tree. /etc/os-release is missing. .... [ ]: Failed to start Switch Root. [ ]: Startup finished in 211ms (kernel) + 0 (initrd) + 45ms (userspace) = 256ms. [ ]: Unit initrd-switch-root.service entered failed state. [ ]: Triggering OnFailure= dependencies of initrd-switch-root.service. [ ]: Starting Emergency Shell...
Looking at the contents of /sysroot:
# ls home root
There was no sign of an /etc directory. Instead, the full path to the os-release file was /sysroot/root/etc/os-release.
Why is the systemd initrd-switch-root service testing for the presence of /etc/os-release? Well, the /etc/os-release file contains operating system identification data. The file format is a newline-separated list of environment-like shell-compatible variable assignments. It was one of the new configuration files that systemd introduced and systemd, per Poettering, is architected to fail to the Emergency Shell if this file cannot be located and read.
I am not sure what changed in the updates I installed but the fix itself is to add the following to the kernel command line parameters.
So here is the UEFI shell script I am now using to EFI Stub boot the current version of Fedora 20:
vmlinuz-3.12.6-300.fc20.efi root=UUID=4d1c04a2-838a-439c-a17c-40bac9377b25 rd.lvm=0 rd.dm=0 KEYTABLE=us SYSFONT=True rd.md=0 rd.luks=0 ro LANG=en_US.UTF-8 rhgb quiet rootflags=subvol=root initrd=.initramfs-3.12.6-300.fc20.x86_64.img
By the way, my root file system is btrfs and not ext4 but I do not think this has anything to do with the problem but I need to investigate further.