Install Windows to USB with Ventoy

I tried out @David_Rasch’s excellent guide to installing the Windows-only Framework BIOS updater for Linux users here:

And inspired by this success, I tried to run the WD Dashboard software to update the firmware in my WD SN850 SSD I have installed.

Unfortunately WD Dashboard doesn’t run this way. It cannot run by command line, it needs to install to a GUI and since the Windows installer doesn’t have this type of environment, it errors out with a “this version of Windows is not supported” error. :slightly_frowning_face:

I previously ran it in a Windows To Go drive, but WTG is so limiting. The entire drive gets taken up and can’t be used for other things. Also WTG can only be written by Windows, and a fast Windows PC at that. I won’t have this very soon once I sell my old laptop.

I have Windows 10 in a VM but it’s misconfigured and can’t access USB.

I would much rather have Windows run off a Ventoy drive so I could also use it for Linux installs.

HEY WAIT! You can! You can install a Windows VM .VHD into Ventoy!

I converted my VM’s .VDI file into a .VHD file very easily:

and followed the instructions.

It functions as a full Windows install on my Framework, doesn’t alter my Linux install on my SSD and lets me do all the other things you can do with Ventoy like add other Linux install environments.


This all worked well with warm reboots, but I shutdown and did a cold boot and now I discover Windows didn’t play nice. So I have a warning.

Windows did install its own boot manager and place it in front of my Linux GRUB install, so I could no longer boot and got a Windows boot manager error message since the Ventoy USB was unplugged.

Fortunately this was easy enough to fix, press F12 on boot and select your Linux drive. A semi-permanent fix is to go into your BIOS (F2 on boot), go to “Boot” - select “First” as EFI boot order, go to EFI boot devices, highlight the Windows boot loader and press space which should remove the “X” from the Windows boot loader.

I know there are Linux scripts to remove the Windows boot loader completely. I didn’t do this, disabling it is enough.

Also if you had enrolled fingerprints in Linux, installing the Windows fingerprint reader driver will cause a conflict and the fingerprint reader will no longer work in Linux. I didn’t even enroll any fingerprints in Windows, just installing the driver did it. There’s an excellent script which can remove all fingerprints and reset the reader in Linux, just use this and re-enroll your fingerprints.

Oh and Windows always boots up with the incorrect time. It reads UTC off the motherboard RTC. At least all that’s required here is to set it to detect the local time zone and sync. It doesn’t alter the RTC so it doesn’t alter the time on Linux.

The good news is you only have to resolve the boot and fingerprint issue once. On subsequent Linux boots everything’s OK. I suppose if the fingerprint driver in Windows gets updated the fingerprint reader will be messed up again in Linux though.

1 Like

Hey man if I read it correctly you basically made a W10 VM, converted it into a .VHD then placed the file in a Ventoy USB? My Framework is arriving soon and was wondering how I would update my SN850 without installing windows.

1 Like

Exactly! You do have to add some files and folders to the Ventoy install (check the links!) but that is exactly it.

Yep I’ve seen the links and will do it soon! I can also use the BIOS update for windows right? Also how much space does the W10 VM consume?

Sure, it’s a complete but unregistered Windows install. Works fine for BIOS updtes, driver updates (for itself!) and SSD firmware updates too. It’s ideal for SSD updates, the drive isn’t in use when this is running. And manufacturers like WD will never support LVFS or any means of updating their drives outside of Windows, so you don’t have much choice anyway.

My Windows 10 VM is 54 GB in VirtualBox (.vdi) and 44 GB converted to .vhd. This included some large downloaded files inside the install, I didn’t even notice until I tried the latest driver update which ran out of room on decompression. Cleared out some of the useless downloaded files and everything ran fine. So this is a good size.

Santa did bring me a 250 GB expansion card so I’ll see if I can replicate this just by copying the .vhd file over. Should work fine.

Damn I have no USB that has that much storage, I bought one but its still coming lol. Do let me know if the expansion card will work since I also have one in my framework.

Yes you will struggle to get a Windows 10 VM much below 40GB unfortunately. :slightly_frowning_face:

The expansion card did work, but install a thermal pad to manage the heat. When the card throttles, Windows runs very very poorly.

The advantage of using an expansion card with Ventoy is that you can install multiple OSes on the card and choose on boot. Those just consist of single .VHD files. You can install and configure them on another machine if you want.

1 Like

Isn’t is simpler to run WD utility in VM it is running on framework?

I haven’t tried, but I’m not sure if a program running in a Windows VM can see the low-level information the WD utility requires.

For example, that VM sees its drive as “VBOX HARDDISK” while the OS sees the drive as a WD SN850.

VirtualBox isolates the VM from certain hardware by creating a generic emulation.

How about using a NVMe to USB converter and updating SN850 on Windows laptop?

Many of the USB - PCIe bridge chips do not pass through information about the inserted drive, so the WD software cannot tell whether there’s a WD drive installed and won’t do anything with it. It won’t appear “native”, as if it’s installed on a port on the motherboard.

For example, I have a Plextor M8 installed in a generic enclosure. But the OS sees it as “Realtek RTL9210B-CG” (that’s the bridge chip) and not as a Plextor M8. If a WD drive was mounted in there, the WD software wouldn’t see it.

Since this thread has been recently bumped, perhaps an even easier solution is to just use the ISO from Hiren’s BootCD PE paired with Ventoy? I’ve used that exact combination on other Linux PCs for various reasons including updating an older laptop’s firmware that somehow never got updated in like 10 years.

(I even use it on a Win7 guest VM specifically to take advantage of Win10’s much faster checkdisk process compared to Win7)