HowTo Dual Boot NST With Windows 8.1
The following information was graciously provided by Roger Baran as he went through the painful process of figuring out a method to dual boot NST and Window 8.1. This procedure would most likely work on any Fedora based distribution (NST 20 which is based off Fedora 20 was used for the purpose of this article).
Initial Install Attempt Issues
I installed NST-20 on my Dell Laptop as a dual-boot alongside Windows 8.1 Since I am using the x86-64 ISO, I was able to boot EFI and install without any difficulties at all.
When I rebooted, I used F12 to look at my EFI boot options: There was Fedora at the top of the list. I booted into it and Grub came up just fine. I was laughing and saying: 'Now, how hard is that!' because I have been so frustrated with other distros not being able to simply install EFI and make everything work.
Ok. So, I select Windows Boot Manager from the GRUB menu to make sure that I can still boot into Windows 8.1. The laptop booted into Windows 8.1 without any issues. I was still laughing with joy!
THEN, I shutdown to go into my new NST-20 install. I noticed that it took a very long time to shutdown. Pressing F12 to see the EFI boot options menu I saw that the FEDORA entry was GONE from the EFI boot selections and my laptop has no way of booting back into NST!
WHAT THE HECK!?!?
I tried dredging my way through the forums but failed to find a solution for what exactly matches my situation.
Observations
I have been working though this issue all day and I have come up with the following observations:
- After a fresh install, grub needs to be updated after all of the initial updates are applied (I think it is because the kernel is upgraded to 3.15 from 3.13)
- Grub cannot be updated if you have LVM with encryption for the install selected (if someone can tell me how to mount an encrypted volume from a live usb in NST -- 'cryptsetup openLUKS' is not an option -- then another approach (the 'create a dev environment from the installed system and chroot' option) might be possible).
- Although there is a separate boot partition created for an LVM encrypted install, and an entry is made into efivars, that entry points to the EFI partition that houses the Microsoft bootloader (it should point to the boot partition that was newly created during the install -- and I don't believe that all the shim components are being properly installed either).
- When powering on, you can see and select the 'fedora' entry repeatedly -- as long as you do not boot into Windows. The first boot into windows will trash the /dev/sda1/efi/EFI/fedora directory and from then on, the 'fedora' entry will not be displayed as an option during boot.
- Using BCDEdit is useless to restore it - unless there is a way to specify an alternate location for /EFI/fedora.
- Using EasyBCD is useless for the same reason.
- You can fix the corrupted directory structure on /dev/sda1 (my EFI Boot partition) using the procedures shown below. That will remove the 'fedora' directory from the EFI partiton - so that doesn't really solve the ssue; but it does need to be done before re-installing because on the second install, grub will attempt to make the same entries at the same location and since the directory is there, and hosed up, the install will fail.
- Using efibootmgr to remove all install entries except the Windows Boot Manager, will return your system to pre-install boot condition (as far as Windows is concerned. Windows seems to rebuild BCD at each boot)
- Using dd to back up the EFI partition and then restoring it after Windows trashes it won't work either.
- It seems that the /dev/sda1/efi/EFI/fedora directory can co-exist in the partition with Microsoft, but if you try to boot from it, Microsoft will trash it on the next boot.
Procedure to fix the corrupted directory structure on /dev/sda1:
[root@localhost nst]# cd /mnt [root@localhost mnt]# ls btrfs ext2 flash1 flash6 iso ram1 ram14 ram5 ramfs vfat cifs ext3 flash2 flash7 nfs ram10 ram15 ram6 smb davfs ext4 flash3 fs nst ram11 ram2 ram7 squashfs disk file flash4 initrd ntfs ram12 ram3 ram8 sysimage dvd flash0 flash5 install ram0 ram13 ram4 ram9 tmpfs [root@localhost mnt]# mkdir efi [root@localhost mnt]# mount /dev/sda1 efi [root@localhost mnt]# cd efi [root@localhost efi]# ls ls: cannot access System: Input/output error Boot bootmgr.efi en-us sources bootmgfw.efi DELL mach_kernel System bootmgr EFI NTLDR System Volume Information [root@localhost efi]# cd EFI [root@localhost EFI]# ls ls: cannot access fedora: Input/output error Boot fedora Microsoft -------------------------------------------------------------------- dmesg: [ 418.698553] FAT-fs (sda1): error, fat_get_cluster: invalid cluster chain (i_pos 0) [ 418.698557] FAT-fs (sda1): Filesystem has been set read-only [ 424.216291] FAT-fs (sda1): error, fat_get_cluster: invalid cluster chain (i_pos 0) [ 738.484056] FAT-fs (sda1): error, fat_get_cluster: invalid cluster chain (i_pos 0) [ 759.824280] FAT-fs (sda1): error, fat_get_cluster: invalid cluster chain (i_pos 0) [ 3782.285477] FAT-fs (sda1): error, fat_get_cluster: invalid cluster chain (i_pos 0) [root@localhost EFI]# dosfsck -r /dev/sda1
Fix:
[root@localhost EFI]# dosfsck -r /dev/sda1 fsck.fat 3.0.24 (2013-11-23) 0x41: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt. 1) Remove dirty bit 2) No action ? 1 There are differences between boot sector and its backup. This is mostly harmless. Differences: (offset:original/backup) 67:be/67, 68:e0/1b, 69:81/0d, 70:64/2a 1) Copy original to backup 2) Copy backup to original 3) No action ? 1 /System Contains a free cluster (55). Assuming EOF. /mach_kernel Contains a free cluster (60). Assuming EOF. /mach_kernel File size is 34 bytes, cluster chain length is 0 bytes. Truncating file to 0 bytes. /EFI/FEDORA Contains a free cluster (56). Assuming EOF. /EFI/Boot/BOOTX64.EFI Contains a free cluster (61). Assuming EOF. /EFI/Boot/BOOTX64.EFI File size is 1390152 bytes, cluster chain length is 0 bytes. Truncating file to 0 bytes. Reclaimed 1175 unused clusters (4812800 bytes). Free cluster summary wrong (113223 vs. really 115571) 1) Correct 2) Don't correct ? 1 Perform changes ? (y/n) y /dev/sda1: 209 files, 11405/126976 clusters [root@localhost EFI]# dosfsck -r /dev/sda1 fsck.fat 3.0.24 (2013-11-23) /System Start does point to root directory. Deleting dir. /EFI/FEDORA Start does point to root directory. Deleting dir. Reclaimed 1173 unused clusters (4804608 bytes). Perform changes ? (y/n) y /dev/sda1: 209 files, 11405/126976 clusters [root@localhost EFI]# dosfsck -r /dev/sda1 fsck.fat 3.0.24 (2013-11-23) Orphaned long file name part "System" 1: Delete. 2: Leave it. ? 2 /dev/sda1: 207 files, 11405/126976 clusters [root@localhost EFI]# [root@localhost EFI]# ls Boot Microsoft [root@localhost EFI]#
After re-install:
[root@localhost nst]# cd /mnt [root@localhost mnt]# ls btrfs dvd ext4 flash2 flash6 install ntfs ram11 ram15 ram5 ram9 sysimage cifs efi file flash3 flash7 iso ram0 ram12 ram2 ram6 ramfs tmpfs davfs ext2 flash0 flash4 fs nfs ram1 ram13 ram3 ram7 smb vfat disk ext3 flash1 flash5 initrd nst ram10 ram14 ram4 ram8 squashfs [root@localhost mnt]# mkdir esp [root@localhost mnt]# cd esp [root@localhost esp]# ls Boot bootmgr DELL en-us NTLDR System bootmgfw.efi bootmgr.efi EFI mach_kernel sources System Volume Information [root@localhost esp]# cd EFI [root@localhost EFI]# ls Boot fedora Microsoft [root@localhost EFI]# cd fedora [root@localhost fedora]# ls BOOT.CSV fonts gcdx64.efi grub.cfg grubx64.efi MokManager.efi shim.efi shim-fedora.efi [root@localhost fedora]#
A Working Solution
- Install without using LVM and encryption; use standard partitioning.
- Prior to first reboot after the install is complete, use efibootmgr -v to look at the entry for 'Network Security Toolkit' (which will be changed to fedora on the EFI boot options screen after the first boot).
- Ensure that it points to the EFI partition created during the install (mine was /dev/sda7)
NOTE: Do not try to boot into Windows until you are completely finished with all of these steps!
- Reboot, come back in and do all of the updates
- Prior to reboot, run '~#yum reinstall grub2-efi shim'
- Use efibootmgr -v again to look at the location for 'fedora' (should still be pointing to your newly created EFI partition)
- Reboot, come back in and, as root, edit your grub.cfg custom section:
menuentry 'Windows 8.1 Boot Manager' { insmod part_gpt insmod msdos set root='hd0,gpt1' chainloader /EFI/Microsoft/Boot/bootmgfw.efi boot }
- Remove the entry from the os_prober section.
- Change the root values to whatever works for your install
- Save grub.cfg
- Reboot
- Test the menu selection for Windows 8.1 Boot Manager
Further Investigation
I would still like to investigate a simpler solution: The possibility of just using efibootmgr prior to the first boot after install to either create or modify the 'fedora' entry in the efivars...
The files and information that gets installed in the /dev/sda1/efi/EFI/fedora location only work until the first time you boot into Windows -- which then trashes that directory. If we could get the efivar for the new installation (using LVM and encryption) to point to the new boot partition, we might just get it to work...
Anyway, installing without LVM and encryption works for now; somehow, grub2 does a better job with standard partitions and its own efi partition. :)