[Crammed a fair amount of tech info in here, hoping some might find a small bit that's useful.]
Windows 10 has a smaller disk footprint than earlier versions of Windows [as small as 10-12GB], will run unactivated with fewer restrictions than earlier versions, and it will boot & run on a USB drive [earlier versions will not], VHD [Virtual Hard Disk], regular hard drive, or as a VM [Virtual Machine]. In fact, the same copy of Windows 10 will run on all of those, and that same copy will usually run on different hardware than where it was originally installed, without having to use a specialized migration tool or do any extra work.
All of that gives you some extra flexibility. While I've personally had no problems using keys purchased on sale at SCDKey for $10-$12 for win10 Pro, you don't really have to pay anything, and certainly don't have to shell out $120 or so for a win10 license if you can't or don't want to. The biggest hassles of running win10 unactivated are that I can't set the wallpaper or use a PIN to sign in, which to me hardly matters. Win10's smaller disk footprint means that you can use the smallest, cheapest SSDs -- my Beebox does fine using a 60GB SSD, while my tablets make do with 32GB of storage. That small footprint IMHO also makes booting to win10 on a VHD [Virtual Hard Disk] more practical &/or viable... there's nothing difficult about performing, or restoring a disk/partition image backup, but copying a 20GB [or less] file somewhere safe is quicker/easier.
Make a backup copy of a .vhd file with win10 on it, install whatever you want to in that copy of win10, and if/when you want to reset, copy/paste the backup file over the top of that .vhd file, and you're back to square one, no leftovers of any sort to worry about. Want to be safest every 6 months or so when a new version of win10 comes out? Install a copy of the new version on a VHD to make sure it works with your device. Want to avoid much of the hassle of booting to a USB stick for recovery, restoring a backup, partitioning the drive etc.? A copy of win10 on a VHD, in addition to the copy of Windows you normally use, can accomplish the same things without the hassle of using a USB stick, plus it's a full version of Windows so you can add whatever software, rather than having one USB stick for your backup app, one for the partitioning app etc., and as a plus, since that VHD is on your hard drive, it'll probably start & run faster than most WinPE-based USB sticks.
Running that same, or a different VHD as a VM lets you work with that copy of win10 while you're already in Windows [or Linux], so none of the minor hassles of rebooting or restarting, but you pay the price for that convenience with reduced performance... running Windows takes a certain amount of hardware resources, and running 2 copies of Windows at once takes twice as much. The host OS, the one you booted into, will be slower when the VM's running because of that, as will the guest copy in the VM.
Putting a working copy of win10 on a USB drive gives you a full copy of win10 that you can use with *most* Windows compatible devices. Install whatever software and it can take the place of most rescue USB sticks. While a 2nd copy of win10 on a VHD or regular partition would probably be faster for that sort of thing, e.g. restoring an image backup, win10 on a USB drive is often a better answer if you need to work with hard disks, e.g. replacing the drive where your regular copy of Windows lives. Install the software you want/need to use, and you can carry that copy of Windows with you, along with that software. Note that you don't have to sacrifice a USB drive to put win10 on it -- depending on how much software you install, you'll still have about 100GB of storage that you can use on a roughly $20 120GB SSD. That all said, win10 on a USB drive is not, strictly speaking, portable.
One problem I've run into isn't critical, but it really effects usability... a full copy of win10 may be smaller than previous versions of Windows, but it's magnitudes larger than the WinPE that's usually stuck on USB sticks, so it Really helps to use a SSD. If you use one of the cheapest [i.e. smallest] SSDs, that'll currently cost about $20, & adding a USB 3 housing for that SSD will probably cost between $5 - $15, so it's still cheaper than the most common external USB drives. The more serious problem I've encountered running a copy of win10 on different hardware, is that sometimes installed drivers are incompatible with the hardware you're trying to use. Drivers are used to allow Windows to talk to the hardware it's running on, and once a driver is installed, Windows keeps it -- that driver's never removed unless you do it manually. *For the most part* win10 will not actually use every installed driver if it's not needed for the current hardware, so you can run the same copy of win10 on a USB drive plugged into several devices. BUT, it is possible for a driver that was installed on one device to keep win10 from starting on some other device.
Sometimes fixing that is easy... VirtualBox has an optional Guest Additions package that you install in a VM, making it work a bit better, & one of the drivers in that package is incompatible with *this* PC -- trying to start that copy of win10 on a USB drive throws an error. Fortunately the error message told me which driver was at fault -- I had to start the VM, uninstall those Additions, & then clone that copy of win10 to the USB drive a 2nd time, and it was fine. Sometimes it's much harder... An Asus Z97 motherboard automatically added a file that was/is incompatible with a few other devices. It's not a driver file, but something that one of the installed drivers uses, making it Very difficult to track down as the source of problems. The more devices you run a copy of win10 on, the more drivers that are added, the more potential incompatibilities from those drivers. I try to mitigate that by making a disk/partition image backup of the USB drive with win10 on it, & I can restore that backup as a sort of reset.
OK, with some of the pros & cons out of the way, how do you do this stuff?
Windows 10 as a VM...
To get win10 running as a VM you 1st need to have your choice of VM Host software installed in your choice of OS. VirtualBox is a free, open source VM Host that's been ported to Windows, OS X, Linux, & Solaris -- Hyper-V is a VM host that's included in some versions of win10, e.g. win10 Pro. You create a win10 VM by creating a new machine in your VM Host software, then installing win10 to that machine's hard drive [VHD], which works pretty much the same as installing win10 on a regular hard drive in a PC/laptop. If you want to use an already working copy of win10 as a VM, clone the drive or restore a disk/partition backup to a VHD, then create a new machine in your VM Host software, and set it to use that VHD.
Currently [v.1809] win10 seems to create 4 drive partitions when you install it fresh. There's the Boot partition, with the boot files; the Windows or system partition where win10 is installed; a Recovery partition with the files to run recovery from the boot menu; and a [puzzling] 16MB partition. To use a working copy of win10 in a VM you need the Windows partition, should be able to skip the 16MB partition, and don't need the recovery partition unless you're planning on putting that copy of win10 back on a hard drive in the future, and even then it's optional [there's no need for recovery if you've got good backups, right?]. You also need a set of Windows boot files to be able to start your VM.
The easiest way to manage the boot files creating a VM when you're using an existing, working copy of Windows, is to create and mount a .vhd format MBR VHD file in Windows, clone or restore a backup to that mounted [attached] VHD, then use EasyBCD or Windows own BCDBoot to put the CSM boot files on the same drive as Windows. Optionally you can create a 100-300MB FAT32 partition on the attached VHD before cloning Windows to it, and use one of the same two software tools to add the boot files once Windows has been copied to that VHD. Option 2, you can create a GPT VHD instead of MBR [you're given the choice when you create it], checking the "Enable EFI" box in the VirtualBox machine settings under System -> Motherboard, adding the boot files as with the previous option to a FAT32 partition. Option 3, if *you* feel that it's faster &/or easier, you can clone or restore a partition image backup of the device's boot partition to the mounted VHD before you put Windows on a separate partition.
I'm unaware of any advantage to using UEFI rather than CSM BIOS with a VM, and while getting a copy of your device's existing boot files on a VHD is pretty straightforward, stuff happens, so IMHO the easiest route is as I've written above, adding the boot files to the Windows partition, but all of the above should work. If you've got something like Macrium Reflect Free installed, you can back up your device's hard drive, select that backup archive, and see which partitions have been included. You can then select just the boot partition, & restore or copy that to a mounted VHD. Note that you need to specify MBR or GPT when you create that VHD, & it's probably safest to choose the option that matches the drive you're copying the Windows boot files from. Next you can select just the Windows partition in Macrium Reflect Free, restore it to the remaining space on the VHD, but because you did it in 2 steps, you can enlarge the Windows partition *IF* needed to take up all the available space on your VHD. Detach the VHD when you're done, have VirtualBox use it with a VM, check the box in settings if you need UEFI, and you should be good to go.
The existing boot files on your device [PC, laptop etc.] are in a Boot or EFI folder [you might have both] that may be located on a special partition that you can't access, or on a regular partition, sometimes the same one with Windows on it. And for your VM, the boot files can be on the same partition as Windows, or on a boot partition. If the device's BIOS uses UEFI mode, the boot files will be in a EFI folder on a [usually restricted access] FAT32 partition on a usually GPT drive. If the BIOS uses CSM [Legacy mode], Windows will use the boot folder, which may or may not be on a separate partition, on a MBR drive. The VirtualBox VM Host software defaults to CSM, but UEFI mode can easily be turned on in the VM's settings.
Google for EasyBCD -- it's been quite a while since I downloaded it, but at that time is was a small PITA to download from the developer's site. The BCDBoot command line tool comes with Windows -- the options used with it, along with examples are here: docs[.]microsoft[.]com/en-us/windows-hardware/manufacture/desktop/bcdboot-command-line-options-techref-di . You can find out if your device's hard drive(s) are GPT or MBR using Control Panel -> Admin. Tools -> Computer Management -> Disk Managment... On the lower half of the window, right click to the left of a drive -- the pop-up will either show convert to MBR or convert to GPT, so if you see convert to GPT for example, that drive's MBR. This is also where you create & attach [mount] .vhd format VHDs -- right click Disk Management on the left. Right clicking next to a mounted VHD gives you the option to Detach [un-mount] that VHD, which you need to do before you can use it in VirtualBox.
Booting Windows 10 on a VHD...
The easiest way to set win10 up to boot from a .vhd or .vhdx file is to 1st create the VHD & mount [attach] it using Control Panel -> Administrative Tools -> Computer Management, then clone or restore a partition backup of a working copy of win10 to that VHD. If you want a fresh copy of win10, starting out by creating a win10 VM using a .vhd file, rather than say the default VirtualBox .vdi format VHD file, generally works great -- you can use/boot to the same .vhd file you used for the VM. You do need to have the boot files outside of the .vhd/.vhdx file with Windows on it, and since the pagefile.sys & swapfile.sys Windows creates & uses are also outside the .vhd file, you need enough disk space for those. The free EasyBCD is the easiest way to add a .vhd or .vhdx file with Windows on it to your existing boot menu [Windows Vista through 10 all have a boot menu, but it can be (& usually is) set to not display].
If you don't want to bother going the VM route, and/or you want the cleanest fresh install possible, use Dism to copy the files win10 needs to the mounted .vhd/.vhdx file you want to use. A quick detour to a side note on VHDs... They can be a fixed size, taking up a fixed amount of disk space, which is faster in use, but takes longer to create. Or they can start out small, & Dynamically Expand as needed, which means they're fast to create, but slower to use *when the disk size has to expand* -- otherwise there's no difference. The software to mount & use .vhd files is built into Windows 7-10. You can also use newer .vhdx files, which provide some benefits, but aren't as widely compatible.
Dism is a command line app [included in the Windows\System32 folder] that you can use to expand the files in a install.wim, adding the files that win10 needs to run to a storage drive, including mounted .vhd/.vhdx files, to get a fresh install of Windows. Because Dism just expands & copies the files into place, that puts you maybe half way through the win10 installation process -- when you boot to that drive, Windows will look at the hardware being used etc., adding the necessary drivers and finishing the install. Microsoft developed the .wim image file format to compress & store the files making up a Windows install, so as to use less storage space. There's a .wim file at the heart of every Windows 10 setup ISO, though it may be in the form of an encrypted .wim file, called an .esd, while WinPE bootable USB sticks, and the USB sticks you create with backup software, use a .wim image file that's expanded [decompressed] to a RAM disk. docs[.]microsoft[.]com/en-us/windows-hardware/manufacture/desktop/dism-image-management-command-line-options-s14
Windows 10 on a USB drive -- Windows To Go...
Putting a fresh copy of win10 on a USB drive is normally simpler, because there are a few apps that'll do the work for you -- they'll run Dism, getting the needed files in place & set up the boot files. One example is the free rufus, and another is the Windows To Go app in win10's Control Panel. Rufus can use a win10 setup disc ISO, any version, while win10's Windows To Go wizard wants you to mount an ISO of Windows 10 Enterprise. Rufus gives you some options on setting up the boot files, e.g. Legacy or Compatibility mode [CSM], UEFI, or both -- the wizard in win10 automatically creates both. Sometimes having both CSM & UEFI sets of boot files can cause problems, with the BIOS getting confused over which set to use, so the options in rufus may come in handy, though it's not a big deal to simply delete one of the 2 boot file sets after using the wizard in win10 -- usually you have to jump through hoops to get to the boot files, since they're normally on a special disk partition that you can't access, but the Windows To Go drive that you get by using win10's wizard just uses a normal partition to store them.
Sometimes when you use rufus or win10's Windows To Go app to put a fresh copy of win10 on a USB drive, the result won't work -- Windows will refuse to start, throwing errors -- or you might have some other reason for putting an already working copy of win10 on a USB drive. The USB drives I created using both apps wouldn't work with this X470 board running a Ryzen 2 CPU, so I had to upgrade an older backup from a Windows To Go drive, running it as a VM, then clone that to the USB drive. Running win10 on a USB drive or on a VHD sets a registry flag that prevents that copy from upgrading to a new version of win10. [The registry entry you need to remove is: HKLM\SYSTEM\CurrentControlSet\Control\"PortableOperatingSystem"=dword:00000001 ]. If you clone or restore a backup of that copy of win10 to a VM, then start that VM & remove that registry entry, it'll upgrade just fine -- then you just have to reverse the processs, cloning the copy of win10 in the VM back to the USB drive or VHD. When you're dealing with win10 on a USB drive, in these and similar situations, you can however get into trouble with the boot files. The paid version of FlashBoot *may* overcome this potential issue.
Setting up the boot files is a regular part of the win10 install process, or using rufus or the Windows To Go wizard etc., so you don't really have to bother with them. If you add a VHD that will boot [start] a copy of Windows, EasyBCD lets you add that VHD to the existing boot files, and you presumably got those set up when you installed the copy of Windows you're using. If you clone or restore a disk image backup you can include the boot files, and if the target drive is a conventional hard drive, those boot files should work just fine. If the copy of win10 you want to boot is on a conventional hard drive, or VHD, with or without a VM, EasyBCD or Windows' command line app, BCDBoot, will easily add the needed boot files, and they'll work -- with win10 on a USB drive, or on some newer SSDs, or on a NVMe drive, They Will Not. Generally neither will cloning the boot files from a conventional hard drive.
The heart of Windows' boot files is a file named: "BCD", and it's a registry hive. It has lots of possible keys & values, and many of those are undocumented. The only way to get some keys &/or values set may be to install Windows 10, or in the case of USB drives, use something like rufus or the win10 wizard. What I normally do is preserve the boot files that are set up when I originally create the Windows To Go drive. I'll create a disk image backup of the USB drive, restore that to a VHD, start that copy of win10 on that VHD as a VirtualBox VM, add or remove whatever software &/or perform any upgrades/updates, then clone just the Windows partition back to the USB drive. Updating to a new version of win10 in that VM can alter those boot files, and will often also create a recovery partition that you don't want or need -- recovery won't work on a USB drive -- so the Windows partition is the only one I want. It's a small bit of a hassle to upgrade versions this way, but upgrading allows me to keep any GOTD apps I've added, and I only have to bother with a new win10 version once every 6 months.
This time I was working with 2 external drives, one with a conventional 2.5" hard drive, & one with a new, small SSD in a new external housing [I wasn't sure if the new drive or the new drive housing would boot with this PC's motherboard]. After replacing the Windows partition with the one I updated as a VM, the conventional USB drive worked, but I had to change the SSD's disk ID to get it to work. Note that while I was able to get the USB drive working this way, the same strategy would not work with a NVMe drive or with some newer SATA SSDs. Note also that a disk ID mismatch is only one thing among many that can go wrong.
Changing the actual disk ID to match the disk ID stored in the BCD isn't hard, but it can seem a bit complicated. Since the one USB drive worked, and/or since I could assume that the wizard-created disk ID matched the ID in the BCD, the easiest route was 1st using Diskpart to determine the wizard-created disk ID, before I replaced that partition, then 2nd, confirming that the SSD's ID didn't match, & 3rd, using Diskpart to change the SSD ID. Starting with the Command Prompt running as Admin., typing diskpart + Enter starts Windows partitioning utility. List disk + Enter shows the currently attached disks & their disk number. Select disk X + Enter, where X = the disk number, gets me working with the disk I want to query & potentially change. Uniqueid disk + Enter shows me the current disk ID. UniqueID disk id=xxxxxxxx + Enter, where xxxxxxxx = the disk ID, sets the disk ID to xxxxxxxx. Exit + Enter closes Diskpart -- Exit + Enter closes the command prompt.
Checking to see what disk ID the BCD stores is more complcated -- you mount the BCD hive, loading it into a new key in Regedit, then find the disk ID, which is stored in reverse order. This link is to a blog that shows how to find the disk ID that the BCD has stored. The intent of the blog however is also worth noting -- you can clone a copy of Windows, but you can't [normally] have the original and the clone coexist because they have the same disk ID.
blogs[.]technet[.]microsoft.com/markrussinovich/2011/11/06/fixing-disk-signature-collisions/
The Windows 10 Windows To Go app requires that you use the win10 Enterprise ISO, which I personally prefer because it will never try to activate [unless you use it in a corporate environment where win10 Ent. is in use], staying somewhat anonymous. If you've got an activated copy of win10 installed on your device, in my experience you can add another copy, really as many copies as you want, and each one will automatically activate. If/when you're running win10 on a USB drive, activating it *may* cut down on the number of hardware changes Microsoft allows before it deactivates win10 on that device. If you run that copy of win10 [on a USB drive] on more than one device, trying to activate on each one *might* become an issue.