Installing Windows 10 on a Dell XPS 15 (9560) using an external disk
25 February 2018
tl;dr: use WinToUSB. It Just Works TM.
In this post I’ll details the steps I (eventually) worked out to install Windows 10 on a late 2017 Dell XPS 15".
NB: This is a draft at best. The below is incomplete. I just wanted to get the tl;dr out there.
I previously wrote about the trails of installing Ubuntu as the sole operating system on my shiny new Dell 9560. Having done that, I then wanted to run Windows 10 on the system too — it’s got some serious gaming hardware for a start. I didn’t want to dual boot; neither to lose the space or to have to deal with boot loaders and multiple-OS suspend/resume cycles.
To that end I got an old USB hard drive out of the drawer (this drive also has a Thunderbolt interface, and so does the XPS, but I didn’t have an adaptor so I decided to stick with USB. I don’t know if Windows would have considered the disk in TB mode to be internal, which would have made this whole process way easier).
Microsoft have got better at this whole OS thing in recent years, I’ll grant, but it’s still far from easy, and most frustrating of all, far from intuitive. There are a bunch of arbitrary restrictions that seem to have come entirely from the marketing department. Things are exacerbated by the fact that Microsoft uses their own special language for lots of things — naming hardware components and software functions with their own arbitrary names, not the ones used by the academic Computer Science literature and every other Operating System. This meant all my knowledge and expertise from 20+ years of lots of weird operating systems was useless, and I struggled to Google things, too.
If you hit serious problems doing this, there’s a whole load of background knowledge in BIOS, UEFI, MBR, GPT, EPS, SecureBoot, DKMS, etc that’ll help. I won’t bore you.
A bit of Windows knowledge:
- Windows PE — foo. What installers are.
- Windows On-The-Go (OTG) — bar
- “Fully installed” Windows — Internal/external. Just won’t install to external on principal. Like I said, dunno what Thunderbolt, eSATA, SCSI, etc count as. USB 3.0 disks are USB-attached-SCSI rather than USB mass-storage, so a shim driver that faked the device type to look like an on-board SCSI controller might do it…
- Fixed/Removable. Don’t worry. How to check.
- On the go. Enterprise only. Certified drives only (seemingly all sticks — they really don’t want you running off an external USB disk). Because of these restrictions, we have to put the OTG disk together by hand.
Here’s how this should theoretically work. I’m by no means a Windows expert. I pieced this series of steps together from loads of sources on the Internet, and it fits my mental model of how modern amd64 systems work, modulo the translation problems from Micro-speak noted above. None of the articles I found seemed to have quite all the steps, or not in the right order. None of them worked, anyway.
Theoretical steps
- A windows ISO to provide, yanno, windows. Get this by using the Installation Media Creation Tool and choosing “CD”, whence it downloads you the ISO.
- [Seems unecessary? An installed Windows is just expanded ESD plus a bootloader?] Rufus to transfer that install ISO to a USB drive (can’t use the MS Installation Media Creation tool because?)
- Get the right boot partition table type (MBR + UEFI for max compat), NTFS, etc
- Some cmdline fuckery to get install.wim (a /running/ Windows system — what the installer expands) from the new-format install.esd (beware extracting the right “image”)
- gImageX (which calls some windows SDK tool “imagex”) to expand install.wim over the install medium on the USB, so windows is “installed” on that disk Mark the partition active (seems to just happen these days, plus you may well be using GPT anyway)
- Use bcdboot.exe to find the /installed/ windows entrypoint (not install.exe) and have Windows BOOTMGR etc boot that instead
Other options
- AOMEI partition assistant — untested
- EaseUS — untested
- Windows Enterprise Edition plus a very expensive certified USB stick — untested