Windows 10 on external Bootcamp Thunderbolt 3 SSD - painful but working

Discussion in 'Windows Virtual Machine' started by KrisR1, Jan 3, 2020.

  1. KrisR1

    KrisR1 Bit poster

    I recently got a new mac mini and wanted to run Windows in Bootcamp, with same Windows running in Parallels - something I've been doing for a long time on my previous mac - with the one extra catch that now it's installed to an external SSD connected via the Thunderbolt 3 port. It was a struggle, but I got it working. Since it was such a pain, I thought I'd share what I learned here.

    Problem 1 - Windows install fails within Bootcamp assistant.
    Bootcamp Assistant was more than happy to let me choose the external SSD as a target. It partitions the disk, reboots into it, and launches the Windows installer. But the Windows installer fails complaining that it can't install to the partition.

    I was able to work around this problem by.
    • Creating a Windows Install / Recovery USB
    • Starting in Bootcamp, but when it rebooted to go to the automated windows installer, hold down 'option' to get the boot selector, and choose the Windows Install / Recovery USB instead.
    • After booting into the Windows USB, I started a recovery and launched the cmd shell. I used diskpart to remove the EFI and NTFS partitions that were created by Bootcamp (partitions 1 & 3 on the disk in my case.) Bootcamp also creates a WinInstall partition; I left that one alone.
    • With the partitions removed, I launched setup from the WinInstall partition, and proceeded with a normal Windows install. I selected the largest empty area on the disk (former home of Partition 3) as the install location. This completed successfully. Windows also created an unformatted, raw partition in the former home of Partition 1, which was the EFI partition created by Bootcamp. This will become important later.
    Once the Windows install completed, I let the system reboot back into Windows. On one try, Bootcamp Assistant actually continued where it left off and installed the bootcamp drivers. In another case, it didn't and I had to manually install the Bootcamp drivers (after using Bootcamp Assistant to download them.)

    At this point, I had a functional install of Windows on the external disk. One quirk - it doesn't show up as an option under System Settings -> Startup Disk. But if I hold down option at boot time, I can select it and it will boot fine. Also I can option-click the windows partition, and it will "stick" and boot into Windows by default. Within Windows, under the boot camp settings, I am able to select startup disk normally with both OSX and Windows options.

    Problem 2 - Unable to create Bootcamp-based Parallels VM
    Probably related to the external disk not showing up as a Startup Disk option, Parallels doesn't even show me the option of creating a Bootcamp-based VM.

    I was able to work around by manually creating a VM, and then adding the bootcamp partition later. However, that path also had problems of its own.

    Problem 3 - Unable to add Bootcamp disk to existing Parallels VM via UI.
    In the Parallels UI, I enter settings for my VM and click '+' to add a Hard disk. If I select "Bootcamp" as the type, it gives a selector with one option. However when I click 'next', I get an error. On the other hand, I can add the external disk as a raw disk, but I found it wouldn't boot from it.

    I was able to work around this by using the command line tool to add the bootcamp disk. I ran:
    /Applications/Parallels\ set "Windows 10 (Bootcamp)" --device-add hdd --device /dev/disk0s3 --iface nvme --passthr yes
    In my case, the external SSD shows up as disk0, and as mentioned above, the partition with Windows is partition 3 - thus /dev/disk0s3. It may show up differently for others. You can check the disk ID using
    diskutil list

    When I add via the command line, it shows up as a hard disk in the VM settings and the OS icon changes to the Boot camp icon, so I believe it is added correctly for Bootcamp (also confirmed because ultimately, it does work.) If I try to add the whole disk, /dev/disk0, I get the same error on the command line as what is given when I attempt it in the UI. But for some reason, adding the specific partition, /dev/disk0s3, does work.

    Problem 4 - VM doesn't boot
    With the VM created, I still found that it wouldn't boot from the hard drive. I get the error "Skipping EFI hard drive" and it treats the drive as not bootable.

    I was able to work around this by recreating the EFI partition on the disk (the one I had to delete to get windows to install correctly.) I did this from an ordinary Windows VM, but you could probably do the same by booting directly into Windows using bootcamp.

    To recreate it, I ran cmd.exe as Admin. Inside cmd, I ran diskpart, and gave it these commands
    # (select the correct disk, the external SSD)
    list disk
    select disk 0
    list part
    # (delete raw partition and recreate EFI partition)
    select part 1
    create partition EFI
    format quick fs=fat32
    assign letter=v

    Now I have the partition and it shows up as v:, but it still needs to be filled with the right files to actually work. Do that by running
    bcdboot e:\windows /s v: /f UEFI
    (since I was booted in a VM the windows directory for the bootcamp partition showed up as e:. If you booted directly into the bootcamp windows it would probably be c: - make sure you use the path to the actual physical disk you want to boot from.)

    Having done this I was able to boot from the bootcamp partition on external disk from Parallels. One minor thing I noticed is, at boot I had an option to choose between one of two boot partitions, where only the first option actually worked. (I believe the second option attempted to reference the partition in the VM that I used to create the EFI partition.) If this occurs, you can remove the extra option by using
    to list the options that are in the menu, and
    bcdedit /delete {uid-of-extraneous-option}
    to remove the entry that doesn't work.

    In the end, I think anyone would agree that's a pretty painful path to a working setup. But it does work now! It's also using a Radeon VII eGPU, which had it's own complications, but that's a separate story.
  2. DavidS78

    DavidS78 Bit poster

    Bootcamp Assistant was more than happy to let me choose the external SSD as a target.
    How did you do that? My bootcamp (Mojave) wont let me choose another drive. Only the drive with the OS is available.
  3. KrisR1

    KrisR1 Bit poster

    Unfortunately I don't have much of an answer. The external disk just showed up there as an option, I didn't do anything special. I'm on Catalina, though, so perhaps that's the difference. Or alternately, if you're on Mojave I'm guessing you don't have Thunderbolt 3, so maybe that's the difference. Thunderbolt 3 is a PCIe connection to the drive, so by most measures it looks internal to the system, and that might be why it shows up for me. I have to say it seems a bit like a bug, because for one thing it didn't work smoothly, and for another, it's kind of counter to the documentation.
  4. DavidS78

    DavidS78 Bit poster

    Up to Mojave there is no option to choose other drive than the one the OS is on. So maybe they changed it in Catalina.
    And yes i have Thunderbold 3 (iMac Retina 2017).
  5. KrisR1

    KrisR1 Bit poster

    It doesn't have to be the one the OS is on, but it does have to be an internal drive. For an iMac that's equivalent, but I used to have a Mac Pro, where it wasn't (up to 4 internal drives.) I used Bootcamp on separate internal drives on multiple releases in that system from the time Bootcamp came to exist. "Not removable" is the official criterial. TB3 drives are technically removable, but don't necessarily look that way from a software point of view, depending on how you check. What I gather from my experience in the top post is that Bootcamp Assistant checks one way, but the Bootcamp software installed into Windows checks a different way, and they get different results.

Share This Page