A Guide to Installing Windows 10 Home to a Framework Storage Expansion Card

“I know it’s easy to install a Linux distribution to one of the storage expansion cards and boot into it on the fly, but what if I wanted to do that with Windows?”

“Windows is more complicated.”

And it is! However, it can be done, and while the process can look intimidating, all it really requires is patience to go slowly and double check each step.

The end result is a full, non-restricted Windows install on one of your expansion cards that you can remove, insert, and boot into at your convenience.

This is a guide that had been floating around the Framework community forums, and while trying this was part of my initial intent/plan with my Framework when I ordered an extra 250gb expansion card, I got intimidated by the process and put it off until yesterday.

The good news is that it all works, activation, Windows updates, through updating to the BIOS beta from Framework all through the Windows install on the card. The guide does require a few tweaks, though.

So, with full credit to Siddarth Shankar and his Decrypting Technology post from 2015, as this is not my solution, I’m not even the one bringing it to the Framework, I am just trying to make it easy for anyone else who wants to try, let’s get into it.


What You’ll Need:

  • A Windows 10 Bootable USB

    • You can use the guide from Framework to get this if you don’t already have it.

    • Note: For myself coming from a pure Linux install, after trying a couple of USB creation tools that didn’t work, I ended up having to make the USB from the Media Creation Tool running on a Windows VM that I gave access to the USB stick. It worked.

  • An empty Framework storage expansion card.

    • Caveat One: You will be running Windows off of a USB drive. It will not be Native NVMe speeds. I can tell you that for myself running it, I do not notice enough to care, but it is a thing.

    • Caveat Two: I have seen some media reports/testing that indicates the 1tb expansion card can get a little toasty and throttle its maximum transfer speed. I haven’t done any testing on this because I had always planned on using a 250gb so this guide assumes the 250gb card, with notes of where to change the value if you decide to try to 1tb.


What You’ll Be Doing:

  • Changing boot orders in the BIOS

    • Caveat Three: When everything is said and done, this is still how I personally switch back and forth between the two OSes. Someone with a better understanding of bootloaders may come up with a more elegant solution at some point.

    • Caveat Four: The only other OS that existed on my machine at the time I tried this process was Fedora 35, and Fedora does not require disabling or changing secure boot to install. I have no idea if it’s as simple as re-enabling it for the Windows install if you have disabled it at some point, or if that introduces a lot more complexity. I will not be of any help there.

  • Fun times on the Windows Command Prompt!

    • The main tools we’ll be using are ‘diskpart’ and ‘DISM’ (Deployment Image Service and Management)

    • Caveat Five: First time working with DISM? Me too! Exciting! That does mean further technical support and assistance will be extremely limited. I understand the steps taken and what they do, but I did not veer of the beaten path.


From This Point Forward:

When you see code:

like this

You need to enter that line exactly as written into a Windows command prompt we’ll open during the install process.


Let’s Go!

Restart your system with the bootable Windows 10 USB, and the expansion card to which you wish to install Windows, inserted.

  • In an abundance of caution, these were the only external storage media plugged into my machine at the time.

When you reboot, as soon as the display lights up, begin pressing F2 repeatedly to get into the BIOS.

Once you’re inside the BIOS, navigate to the Boot tab with the arrow keys and down to the menu option that reads ‘New Boot Device Priority’ and set it to ‘First’

Then, navigate to the ‘EFI Boot Order’ option, and using the F5 and F6 keys, ensure that ‘EFI USB Device’ is at the top of the list. Depending on the type of USB stick you’re using there could be some extra characters follow its name.

Press F10 to Save and Exit the BIOS.

You should now be rebooting onto your Windows Install USB.

When you’re greeted with the Windows installer, select your time, currency, click install now, enter or skip the product key according to taste, and when you reach the screen asking you if you want to upgrade or perform a custom install press SHIFT+F10 to open a command prompt.

First, we’re creating a Windows partition layout that we will then flash images of Windows over to.

Remember: Enter these lines at command prompt exactly as written.

diskpart

list disk


This presents a list of your disks, with a numerical index. Be absolutely certain that you are selecting and partitioning the expansion card in the following steps.


select disk x


Where ‘x’ is the number associated with your expansion drive.


clean

convert gpt

create partition primary size=450


If you follow the original guide here and enter ‘350’ for the size, you’ll receive an error later on telling you you don’t have enough space. Enter ‘450’ to give it room.


format quick fs=ntfs label="Windows RE Tools"

assign letter="T"

set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"

gpt attributes=0x8000000000000001


That is fourteen (14) zeroes.


create partition efi size=260


The original guide sets the size to ‘100’ here, and includes a note that newer drives will need to set it to ‘260’, thus it is set to ‘260’.


format quick fs=fat32 label="System"

assign letter="S"

create partition msr size=128

create partition primary size=225000


This is the actual value for the end size of your Windows install. The output for ‘list disk’ for me, gave a size in gb in the 230s, so given the size of the other partitions, I decided ~225gb would be safe. It does leaves some space on the table, and someone who’s more properly motivated could easily fine tune this.

This is also the value to change for people trying it on the 1tb.


format quick fs=fat32 label="System"

assign letter="W"

create partition primary size=4096

format quick fs=ntfs label="Recovery Image"

assign letter="R"

set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"

gpt attributes=0x8000000000000001


That is, once again, fourteen (14) zeroes.


list volume


This will present you with a list of your newly created partitions, including their letter assignments. Make note of the letter assignment of the USB stick you’ve been using for the install. For me, this was D: . You can run diskpart and ‘list volume’ again whenever you need to to double check.


exit


This exits diskpart, but you still need the command prompt. If you closed it, open it again with SHIFT+F10

Enter the correct letter for your USB stick.


D:


D: is the example from my own install.


R:\RecoveryImage

copy C:\sources\install.esd R:\RecoveryImage\install.esd


The original guide points towards ‘install.wim’, which will result in a file not found error. The guide can be completed by substituting ‘.esd’ for ‘.wim’ at the relevant steps.


cd X:\Windows\System32

dism /Apply-Image /ImageFile:R:\RecoveryImage\install.esd /Index:1 /ApplyDir:W:\


This is the meat and potatoes of the process, flashing the Windows images over to the drive.


md T:\Recovery\WindowsRE

copy W:\Windows\System32\Recovery\winre.wim T:\Recovery\WindowsRE\winre.wim


Here, using the ‘.wim’ extensions worked for me, but a baseline troubleshooting tip for this section could be to swap out instances ‘.wim’ and ‘.esd’ and I will edit and update if I missed anything in my notes.


bcdboot W:\Windows /s S: /f UEFI

W:\Windows\System32\reagentc /setosimage /path R:\RecoveryImage /target W:\Windows /index 1

W:\Windows\System32\reagentc /setreimage /path T:\Recovery\WindowsRE /target W:\Windows


From here, exit the command prompt, exit the Windows installer, and when your machine reboots, press F2 to enter the bios, navigate to the Boot tab, then under the ‘EFI Boot Order’ option make sure that ‘Windows Boot Manager’ is the first entry, again using F5 and F6 as necessary to adjust.

Press F10 to save and exit.

Your laptop should now boot into the Windows first boot sequence, running entirely from your expansion storage card.

You can let the Framework guide on installing Windows 10 take over from here once again to install the necessary drivers to get the machine fully up and running. I had to connect to an Ethernet dongle to download the drivers bundle, but after that all of the hardware was detected as a native installation.


Caveat Six: Haven’t tried Windows 11 and don’t plan on it until the Windows updating tool gives the go ahead. I leave it for braver souls to try.

Caveat Seven: The user @lightrush here on the Community Forums from their own experience has a hypothesis that one or more of the recovery partitions may be unnecessary, which would make this process even simpler. Once again, I leave it for braver souls to try.


And there it is. You should now have a full, non-restricted, fully portable, install of Windows on of your expansion cards.

Afterwards, I was able to go into the BIOS, set the boot order to have my Fedora 35 install be the first entry, and I booted back into my fully encrypted main OS drive as though I had never left.

I hope this proves useful and possibly even a fun little project for people to do with their Frameworks.


(This was also posted to Framework subreddit)

20 Likes

Good man.

You can replace “Expansion Card” with “USB drive” since the Storage Expansion Card is actually connected via USB, not Thunderbolt. In fact I’ve done this install on a USB SSD too.

4 Likes

This is a nicely written guide. Thank you for the work you put into sharing your research into it.

I first tried with the windows installation media on a cheap 16 Gig USB stick and the system wouldn’t boot from it. I then tried with a different USB stick and I was able to proceed with booting into it and starting the installation process as documented. I mention this just to help others who might encounter that problem.

I have a 1tb storage expansion card, and I experimented and found a value (something around 850000 – I don’t remember exactly) that would use most of the remainder of the storage expansion card’s capacity, but it responded with an error message. I then tried with the value given for the 250 gb card so that I would be following the guide to the letter, and I got the same error message. It looked like this:

DISKPART> create partition primary size=225000

DiskPart succeeded in creating the specified partition.

DISKPART> format quick fs=fat32 label="System"

    0 percent completed

Virtual Disk Service error:
The volume size is too big.


DISKPART>

Does anyone have any suggestions?

Looks like you might be mixing up creating the System (i.e. EFI System Partition/ESP in many linux setup guides) partition with the main data partition

That partition is too big to be formatted as fat32. I did 1GB for mine in case I try to use that same ESP for a linux dual boot, so the steps were something like

...
create partition efi size=1024
format quick fs=fat32 label="EFI System"
assign letter="S"

create partition msr size=128

create partition primary size=225000
format quick fs=ntfs label="Windows"
...
1 Like

Thanks! Formatting as ntfs allowed me to get past this step.

1 Like

Could you have perhaps meant this line to be md R:\RecoveryImage ?

1 Like

I was successful in following this guide, and I now have a fully functioning Windows 10 installation on a 1tb storage expansion card. Updates worked, and I was able to upgrade to Windows 11.

One thing I want to mention in case it might bite others is this: My fingerprint reader was operating as expected before I did the Windows install. I did not enable fingerprint-login on Windows. When I restored the boot order to boot from the internal storage unit (Fedora 35) and rebooted, I noticed two things:

  1. The host name had changed to some auto-generated name. I was able to change it by through the normal settings UI.
  2. The fingerprint reader no longer worked as expected. My observation was that it appeared to reject my previously enrolled fingerprint. I then remembered someone saying something about being sure to delete saved fingerprints from the fingerprint reader’s internal storage. I tried to do it after the fact of installing Windows. but it reported parse errors. I’m not sure exactly what I did to get the fingerprint reader working again, but I somehow did. One of the things I did was to enable and disable fingerprint authentication on the Windows side. I then was able to re-enroll a fingerprint on the Linux side, and the fingerprint worker seems to be working on Fedora now.

Maybe the driver package install did something, and not the OS installation?

I’m a little skittish now about the fingerprint reader. Is there some general advice about what one should do with respect to the fingerprint reader and stored/enrolled fingerprints when installing Windows and Linux and the BIOS update, to avoid conflicts/interactions between the different operating systems?

1 Like

A simpler version you might try out is here:

https://kbhost.nl/knowledgebase/ventoy-windows-11-to-go/

I used it to put Win11 on a USB SSD, but suspect it’d work for Win10 as well. On first boot, it takes a few minutes for the keyboard and trackpad to work, and for the trackpad to fully work properly, you need the driver package downloaded from here.

1 Like

I just unboxed my DIY Framework and got it put together. Successfully loaded Windows 10 on a USB from another computer. Framework computer turns on and USB is recognized, Windows is recognized. I am very new to all of this - no experience with command prompts, diskpart, or DISM. So my questions/observations begin… I press SHIFT + F10, when prompted to upgrade or custom install as the guide indicates and nothing happens? How do I get to a place where I can enter the prompts in the guides?

Also, I didn’t have to enter into BIOS because I do not yet have an OS to select from. I haven’t yet decided if I want to try Ubuntu or Fedora. The laptop seems to automatically recognize and boot from the Windows USB. Since SHIFT + F10 didn’t take me to command prompts, I did try to go through a custom install of windows and see if I could do I could get Windows on the expansion card that way - and with this method, I plugged in and then unplugged the expansion card so that I could figure out what it was called. From the trials of plugging and unplugging the expansion card, it appears that it is called USB DISK (C:). My internal SSD seems to be called ESD-USB (D:) and my USB stick appears to be called Boot (X:). Any help getting to the command prompts would be appreciated. Actually, any unsolicited help would be appreciated too.

1 Like

It’s quite likely that you have Function Lock on so the keys are doing their secondary functions by default. Very annoying when there’s no indicator to tell you!

Try Fn+Shift+F10 (all at the same time)

1 Like

Another simple option is I did this with Rufus and installed to the 1T module. Works great. But understanding I have very little need for performance on Windows. I did the thermal pad mod to the module. Rufus made it pretty simple, probably the same as Ventoy though I haven’t tried Ventoy myself to give any comparison.

1 Like