I followed online tutorials to install Windows 10 alongside Linux (Arch) on separate HDDs. This involved physically disconnecting each HDD while installing the OS on the other.

The only thread I have found which doesn't have the answer "use boot-repair" is this one except I have already installed Linux.

Below are my steps.

  1. Disable fast boot and enable UEFI in BIOS
  2. Create UEFI compatible live images of W10 and ArchLabs
  3. Disconnect HDD0, install W10 Home onto HDD1
  4. Disconnect HDD1, install ArchLabs onto HDD0 - grub is boot manager
  5. Connect HDD1, boot into HDD0 using BIOS - only ArchLabs is listed as a boot option
  6. Run grub-mkconfig -o /boot/grub/grub.cfg (update-grub) - Windows is found

Which outputs

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
Found Windows Boot Manager on /dev/sdb2@/efi/Microsoft/Boot/bootmgfw.efi
Found memtest86+ image: /boot/memtest86+/memtest.bin

When I boot HDD0 in BIOS I see the Windows option in grub, but when I choose it I get this error

error: no such device: FA77-02BF.
error: disk `hd1,gpt2' not found.

Press any key to continue...

Some information

$sudo blkid
/dev/sda1: UUID="EFA1-BD6C" TYPE="vfat" PARTUUID="f1abfa2e-8f5e-4569-88a7-ebd5ebd1a737"
/dev/sda2: UUID="a43046c3-84ec-4308-9eaf-a872f1c4300d" TYPE="ext4" PARTUUID="c1a4e499-919d-4194-890f-459418430422"
/dev/sdb1: LABEL="Recovery" UUID="58CC724CCC722482" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="78b687ea-65f2-4c5a-9e2e-211c28298378"
/dev/sdb2: UUID="FA77-02BF" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="149fbe08-56e3-4dd7-9dde-b60e668a2253"
/dev/sdb4: UUID="50F28160F2814AE4" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="1e767b54-5723-4d51-889a-48108c2547fe"
/dev/sdb3: PARTLABEL="Microsoft reserved partition" PARTUUID="be54b5e0-7701-473a-aa31-bbc8919d62ae"

fstab hasn't mounted sdb but im not sure it needs to?

$cat /etc/fstab
# /dev/sda2
UUID=a43046c3-84ec-4308-9eaf-a872f1c4300d   /           ext4        rw,relatime,data=ordered    0 1

# /dev/sda1
UUID=EFA1-BD6C          /boot/efi   vfat        rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro   0 2

/swapfile   none        swap        defaults,pri=-2 0 0

The problem I think lies in the fact that each HDD has its own EFI partition.

$fdisk -l
Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 558CB70E-9540-49A2-87E9-728B9C3CDB16

Device       Start       End   Sectors   Size Type
/dev/sda1     2048   1050623   1048576   512M EFI System
/dev/sda2  1052672 625141759 624089088 297.6G Linux filesystem

Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 0676ACB7-16B9-4BBC-8030-D26B229EEF78

Device       Start       End   Sectors   Size Type
/dev/sdb1     2048   1023999   1021952   499M Windows recovery environment
/dev/sdb2  1024000   1228799    204800   100M EFI System
/dev/sdb3  1228800   1261567     32768    16M Microsoft reserved
/dev/sdb4  1261568 976773119 975511552 465.2G Microsoft basic data

At the moment I can use the BIOS to select the HDD I want to boot which in turn uses that HDDs bootmanager to launch its respective OS. But of course it would be nice to have BIOS boot to the same drive each time so I can select the OS through GRUB.

  • Typically if you install Windows first and then Linux, it Just Works. You'd have a single ESP (UEFI partition). Have you considered that option? – Emmanuel Rosa Aug 19 '18 at 12:12
  • Im not against that option, but i would need walked through it since there are two EFI partitions – myol Aug 19 '18 at 14:47
  • It can be done, but you should skip physically disconnecting the drives unless they're removable drives that you want to switch around whenever you want to boot the one or the other drive. See answer – Fabby Aug 19 '18 at 20:12

If you want to install Windows and Arch on 2 separate hard disks:

  1. The easiest solution is to install one in UEFI mode (if Win8 or 10 install those in UEFI mode) and the other OS in BIOS mode and to switch between one and the other:
    a. go to the BIOS/UEFI menu
    b. change the boot mode
    c. reboot
  2. If you're thinking of Win7 or earlier: install both in BIOS mode and let grub figure it out
  3. If you're insisting on UEFI for both, you should know that one machine is designed to have one (and only one) UEFI partition, so you should:
    a. Keep identical UEFI partitions on both hard drives (Just copy all the files of the first one you have over to the second one and all of the second one to the first as it's just a FAT partition)
    b. let the booting be done by something else than the Windows 10 Boot Manager and grub and then you need something like rEFInd and this is the way I run: Windows 10 in the first SSD, Linux (Ubuntu in my case, but both Arch and Ubuntu use grub, so there's no difference there) and both of my efi partitions are identical and I consider the secondary efi partition a backup of the first and hide duplicate entries in the rEFInd menu. I regularly dd the /dev/sda1 to /dev/sdb1¹
    c. know that rEFInd does not support BIOS so you might have to install an EFI shell and manually change boot settings in the UEFI NVRAM to get rEFInd to be the first to boot (which is what I ended up doing; don't forget to put rEFInd as the primary Boot Manager on the first HDD in Boot priority 0 and rEFInd also as the secondary Boot Manager on the Second HDD as Boot Priority 1!)

You'll have to read a lot, including some of the UEFI consortium's docs, but you'll learn a lot and it can be done! (Obviously... ;-) ) Note ¹: Yes, that's not a correct sommand, I know: I don't put generic dd commands in any of my answers as dd is best known under the Disk Destroyer moniker. :-)
Note ²: As you didn't explain why you're trying to do this: if one of the hard drives fails, the other OS is not reachable any more as it's only present one one of the HDDs, even when you have duplicate efi partitions, so if you're looking for resilience, use RAID1 instead.
Note ³: I wanted to ensure that the EFI partition was backed up on the second SSD for which rEFInd isn't really set up and to ensure the Windows Boot Manager had no way to mess up GRUB.

  • If Rod would read the above: I still feel I owe you money for rEFInd but don't believe in PayPal: ping me in AU or /dev/chat. – Fabby Aug 19 '18 at 20:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.