In my previous post I had talked about creating differencing VHDs for use with Hyper-V. While making that post I realized that what I what I was doing doesn’t work with Generation 2 VMs. Investigating a bit into that bought me to my old friend UEFI. I say “old friend” because UEFI is something I have been reading off and on the past few months – mainly due to my interest in encryption. For instance, my laptop with Self Encrypting SSDs can only be managed by BitLocker if I install Windows 8 in UEFI mode. By default it had installed in BIOS mode (and was continuing to when I re-installed) so a few months ago I had read about UEFI and figured how to install Windows 8 on that laptop in UEFI mode.
Then at work we started getting UEFI computers and so I spent some time going through the firmware on those computers just to get a hang of UEFI.
And then last month I bought a Notion Ink Cain tablet, and to get encryption working on it I had to enable Secure Boot (which is a part of UEFI) so once again I found myself reading about UEFI. That was a fun exercise (and something I am yet to post about) so I have been meaning to write about UEFI for a while just that I never got around to it. Since I stumbled upon UEFI again today, might as well do so now.
So what is UEFI? Simply put UEFI is a firmware specification that’s meant to replace BIOS. Most modern laptops and desktops come with UEFI but it looks and behaves like BIOS so you might not notice the difference until you delve in. In this post I’ll focus on the boot process of BIOS and UEFI as that’s what I am interested in.
BIOS boot process
With BIOS you have an MBR (Master Boot Record). In BIOS you specify the boot order of disks, and each of these disks is searched for the MBR by BIOS. The MBR is the first sector of a disk and it contains information on the partitions in the disk as well as a special program (called a “boot loader”) which can load OSes from these partitions. Since the MBR is at a standard location the BIOS can pass control to the boot loader located there. The BIOS doesn’t need to know anything about the OSes or their file systems – things are dumb & simple.
BIOS has limitations in terms of the size of disks it can work with, the limited space available to the boot loader (because of which you have to use quirks like “chain loaders” and such), and so on. BIOS is good, but its time has come … its replacement is UEFI.
What is UEFI?
BIOS stands for “Basic Input/ Output System”. UEFI stands for “Unified Extensible Firmware Interface”. UEFI began as EFI, and was developed by Intel but is now managed by the UEFI Forum. Both BIOS and UEFI aren’t a specific piece of software. Rather, they are specifications that define the interface between the firmware and OS. The UEFI specification is more managed. There are many versions of the specification, with each version adding more capabilities. For instance, version 2.2 added the Secure Boot protocol stuff. Version 2.1 added cryptography stuff. As of this writing UEFI is at version 2.4.
In contrast, BIOS doesn’t have a specification as such. Various BIOS implementations have their own feature set and there’s no standard.
For backward compatibility UEFI can behave like BIOS. The UEFI specification defines a Compatibility Support Module (CSM) which can emulate BIOS. Bear in mind, it is still UEFI firmware, just that it behaves like BIOS firmware without any of the additional UEFI features or advantages. You can’t have both UEFI and BIOS on a computer – only one of them is present, after all they are both firmware!
UEFI classes
The UEFI forum defines four classes for computers:
- Class 0 – The computer has no UEFI, only BIOS.
- Class 1 – The computer has UEFI with CSM only. So it has UEFI but behaves in a BIOS compatible mode.
- Class 2 – The computer has UEFI and CSM. So it can behave as BIOS compatible mode if need be.
- Class 3 – The computer has UEFI only, no CSM.
It’s important to be aware of what class your computer is. Hyper-V Generation 2 VMs, for instance, behave as Class 3 computers. They have no CSM. (Moreover Hyper-V Generation 2 does not have a 32-bit implementation of UEFI so only 64-bit guest OSes are supported).
UEFI and GPT
UEFI has a different boot process to BIOS. For starters, it doesn’t use the MBR. UEFI uses a newer partitioning scheme called GPT (GUID Partition Table) that doesn’t have many of MBRs limitations.
If your disk partitioning is MBR and you system has UEFI firmware, it will boot but in CSM mode. So be sure to choose GPT partitioning if you want to use UEFI without CSM.
Also, even though your machine has UEFI, when trying to install Windows it might boot the Windows installer in CSM mode. When you press F9 or whatever key to select the boot media, usually there’s an option which lets you boot in UEFI mode or BIOS/ CSM mode. Sometimes the option isn’t explicit and if the boot media has both UEFI and BIOS boot files, the wrong one may be chosen and UEFI will behave in CSM mode. It is possible to detect which mode Windows PE (which runs during Windows install) is running in. It is also possible to force the install media to boot in UEFI or CSM mode by deleting the boot files of the mode you don’t want.
My laptop, for instance, is UEFI. But each time I’d install Windows 8 onto it it would pick up the BIOS boot loader files and boot in CSM mode. Since I wanted to use UEFI for some of its features, I used Rufus to create a bootable USB of the media (be sure to select “GPT partitioning for UEFI computers”) and when I booted from it Windows installed in UEFI mode. The trick isn’t the GPT partitioning. The trick is that by telling Rufus we want to boot on an UEFI computer, it omits the BIOS specific boot loader files from the USB. It is not necessariy to use Rufus – the process can be done manually too.
UEFI and GPT work with both 32-bit and 64-bit Windows. The catch is that to booting from GPT is only supported for 64-bit Windows running in UEFI. So while you can have 32-bit Windows running in UEFI, it will need an MBR partition to boot from. What this means is that such a system will be running as UEFI Class 2 as that’s the only one which supports UEFI and MBR partitions (essentially the system has UEFI but behaves as BIOS compatible mode).
UEFI classes and MBR/GPT partitioning
With Windows you can use MBR or GPT partitions on your computer depending on its class. From this Microsoft page:
- UEFO Class 0 – Uses MBR partitions.
- UEFI Class 1 – Uses GPT partitions.
- UEFI Class 2 – Uses GPT partitions. This class of UEFI support includes CSM so if MBR partitions are present UEFI will run in compatibility mode.
- UEFI Class 3 – Uses GPT partitions.
I am not clear why Class 1 only uses GPT partitions. Considering Class 1 is UEFI with CSM only and CSM supports MBR, I would have thought Class 1 supports only MBR partitions.
UEFI boot process
The UEFI boot process is more complicated than BIOS. That doesn’t mean it’s difficult to understand or unnecessarily complicated. What I meant is that it isn’t as simple as having an MBR with a boot loader, as in the case of BIOS. You can’t expect to pass along a VHD file created with BIOS in mind to a machine having only UEFI and expect it to work (as was my case). You need to tweak things so the boot process works with UEFI.
An excellent blog post on the UEFI boot process is this. If you have the time and inclination, go read it! You will be glad you did. What follows are my notes from that post and some others.
- The UEFI specifications define a type of executable (think
.exe
files) that all UEFI firmware must support. Each OS that wishes the UEFI firmware to be able to boot it will provide a boot loader of this type. That’s it. OS provides such a boot loader, UEFI loads it. - In BIOS the boot loader was present in the MBR. Where is it present in UEFI? In order to be not limited by space like BIOS was, UEFI defines a special partition where boot loaders can be stored. The partition doesn’t have to be of a specific size or at a specific location. The spec requires that all UEFI firmware must be able to read a variant of the FAT file system that’s defined in the spec. (UEFI firmware can read other file system types too if they so wish, but support for this variant of FAT is a must). So UEFI boot loaders are stored in a special partition that’s of file system type FAT (the variant defined by UEFI). And to denote this partition as the special partition it has a different type (i.e. it doesn’t say FAT32 or NTFS or EXT2FS etc, it says ESP (EFI System Partition)). Simple! (Oh, and there can be multiple ESP partitions too if you so wish!)
The above design makes UEFI much more reliable than BIOS. Whereas with the latter you could only store a very limited boot loader at a specific space on the disk – and that boot loader usually chain loaded the OSes – with UEFI you can store boot loaders (in the EFI executable format) of each OS in the ESP partition that’s of file system type FAT (the variant defined by UEFI). Already you have a lot more flexibility compared to BIOS.
To tie all these together UEFI has a boot manager. The boot manager is what looks at all the boot loader entries and creates a menu for booting them. The menu isn’t a static one – the firmware can create a menu on the fly based on boot loaders present across multiple disks attached to the computer. And this boot manager can be managed by tools in the installed OS too. (Sure you could do similar things with Linux boot loaders such as GRUB, but the neat thing here is that the functionality is provided by the firmware – independent of the OS – which is really where it should be! It’s because BIOS was so limited that we had fancy boot loaders like GRUB that worked around it).
If you go down to the section entitled “The UEFI boot manager” in the post I linked to earlier you’ll see an example of a boot manager output. No point me paraphrasing what the author has said, so best to go and check there. I’ll mention one interesting point though:
- Remember I said there are ESP partitions and they contain the OS boot loaders? So, for instance, you could have an UEFI boot manager entry like
HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)File(\EFI\fedora\grubx64.efi)
which points to the partition calledHD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)
(the naming convention follows a EFI_DEVICE_PATH_PROTOCOL specification) and specifically the\EFI\fedora\grubx64.efi
file as the boot loader. - What you can also have, however, is a generic entry such as
HD(2,0,00)
. Note there’s no boot loader specified here, and probably no specific ESP partition either. What happens in such cases is that the boot manager will go through each ESP partition on that disk, check for a file\EFI\BOOT\BOOT{machine type short-name}.EFI
, and try loading that. This way the UEFI spec allows for one to boot from a hard disk without specifying the OS or path to the boot loader, as long as the disk contains a “default” boot loader as per the naming convention above. This is what happens, for instance, when you boot a Windows 8 DVD, for instance. If you put in such a DVD in your computer and check, you’ll see the root folder has a folder called EFI that contains a sub folder called BOOT which contains a file called bootx64.efi.
Another example and screenshot of the UEFI boot manager can be found at this link.
Tying this in with my WIM to VHD case
If you have read this far, it’s obvious what’s wrong with my VHD file. When the Gen 2 VM boots up – and it uses UEFI as it’s a Gen 2 VM – it will look for a ESP partition with the UEFI boot loader but won’t find any (as my VHD has only one partition and that too of type NTFS). So what I need to do is create an ESP partition and copy the boot loaders to it as required. Also, I am using MBR style partitioning and a Gen 2 VM firmware is Class 3, so I must switch to GPT.
In fact, while I am at it why don’t I partition everything properly. When I install Windows manually (server or desktop) it creates many partitions so this looks like a good opportunity to read up on the Windows partitioning scheme and create any other required partitions on my base disk.
Understanding (GPT/UEFI) disk partitions for Windows
There are three Microsoft pages I referred to:
- Configure UEFI/GPT-Based Hard Drive Partitions;
- Recommended UEFI-Based Disk-Partition Configurations; and
- Understanding Disk Partitions
Read those for more details than what I post below.
The following partitions are required:
- System partition: This is the EFI System Partition (ESP). Minimum size of the partition is 100 MB, FAT32 formatted. For Windows, the ESP contains the NTLDR, HAL, and other files and drivers required to boot the system. The partition GUID for ESP is
DEFINE_GUID (PARTITION_SYSTEM_GUID, 0xC12A7328L, 0xF81F, 0x11D2, 0xBA, 0x4B, 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B)
(on an MBR partition the ID is 0xEF; but remember, Windows doesn’t support booting into UEFI mode from MBR partitions). The type of this partition isc12a7328-f81f-11d2-ba4b-00a0c93ec93b
. Windows does not support having two ESPs on a single disk. - Microsoft Reserved Partition (MSR): Whereas with BIOS/ MBR one could have hidden sectors, UEFI does away with all that. So Microsoft recommends a reserved partition be set aside instead of such hidden sectors. The size of this partition is 128 MB (for drives larger than 16GB; else the size is 32 MB). It does not have any data – think of the MSR as free space set aside for future use by Windows – it is used when any disk operations require extra space and/ or partitions and they can’t use the existing space and/ or partitions. The partition GUID for MSR is
DEFINE_GUID (PARTITION_MSFT_RESERVED_GUID, 0xE3C9E316L, 0x0B5C, 0x4DB8, 0x81, 0x7D, 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE)
. The type of this partition ise3c9e316-0b5c-4db8-817d-f92df00215ae
.
The order of these partitions is: ESP, followed by any OEM partitions, followed by MSR, followed by the OS & data partitions. (See this link for a nice picture).
Apart from the two above, Microsoft recommends two other partitions (note: these recommended, not required):
- Windows Recovery Environment (Windows RE) tools partition: This must be at least 300 MB, preferably 500 MB or larger, and contains the Windows RE tools image (winre.wim) which is about 300 MB in size. It is preferred that these tools are on a separate partition in case the main partition is BitLocker encrypted, and even otherwise to ensure the files in this partition are preserved in case the main partition is wiped out. The type of this partition is
de94bba4-06d1-4d40-a16a-bfd50179d6ac
. - Recovery image partition: This must be at least 2 GB, preferably 3 GB, and contains the Windows recovery image (install.wim) which is about 2 GB in size. This partition must be placed after all other partitions so its space can be reclaimed later if need be. The type of this partition is
de94bba4-06d1-4d40-a16a-bfd50179d6ac
.
Finally, the disk has basic data partitions which are the usual partitions containing OS and data. These partitions have a GUID DEFINE_GUID (PARTITION_BASIC_DATA_GUID, 0xEBD0A0A2L, 0xB9E5, 0x4433, 0x87, 0xC0, 0x68, 0xB6, 0xB7, 0x26, 0x99, 0xC7)
. The minimum size requirement for the partition containing the OS the 20 GB for 64-bit and 16 GB for 32-bit. The OS partition must be formatted as NTFS. The type of these partitions are ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
.
The order of all these partitions is: Windows RE tools, followed by ESP, followed by any OEM partitions, followed by MSR, followed by the data partitions, and finally the Recovery image partition.
It is worth pointing out that when you are installing Windows via an answer file it is possible to create all the above partitions via an answer file. But in my scenario, I am applying a WIM image to a VHD partition manually and creating all the partitions myself so I need a way to do this manually.
Let’s make some partitions!
Now back to my VHDs. To recap, previously I had shown how I apply an OS image from a WIM file to a (base) VHD and then make differencing VHDs off that base VHD for my Hyper-V VMs. The VHD thus created works well for Generation 1 VMs but fails for Generation 2 VMs. As we have learnt from the current post that’s because (a) I was using MBR partitions instead of GPT and (b) I hadn’t created any ESP partitions for the UEFI firmware to pick a boot loader from. Hyper-V Generation 2 VMs have a Class 3 UEFI firmware, so they don’t do any of the CSM/ BIOS compatibility stuff.
As before, create a new VHD and initialize it. Two changes from before are that I am now using a size of 25 GB instead of 20GB and that I initialize the disk as GPT.
1 |
PS D:\NoBackup> New-VHD -Path '.\Hyper-V\Virtual Hard Disks\2012r2-std-core.vhdx' -SizeBytes 25GB -Dynamic | Mount-VHD -Passthru | Initialize-Disk -PartitionStyle GPT |
Confirm that the disk is visible and note its number:
1 2 3 4 5 6 7 |
PS D:\NoBackup> get-disk Number Friendly Name OperationalStatus Total Size Partition Style ------ ------------- ----------------- ---------- --------------- 0 KINGSTON SV300S37A120G Online 111.79 GB MBR 1 ST1000LM024 HN-M101MBB Online 931.51 GB MBR 2 Microsoft Virtual Disk Online 25 GB GPT |
By default the newly created disk has a 128 MB MSR partition. Since the ESP has to be before this partition let’s remove that.
1 2 3 4 5 6 7 8 9 10 |
PS D:\NoBackup> Get-Partition -DiskNumber 2 Disk Number: 2 PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 1 17408 128 MB Reserved PS D:\NoBackup> Remove-Partition -DiskNumber 2 -PartitionNumber 1 -Confirm:$false |
Then create new partitions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
PS D:\NoBackup> New-Partition -DiskNumber 2 -Size 500MB -GptType "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}" # Recovery Disk Number: 2 PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 1 1048576 500 MB Recovery PS D:\NoBackup> New-Partition -DiskNumber 2 -Size 100MB -GptType "{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}" # ESP Disk Number: 2 PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 2 525336576 100 MB System PS D:\NoBackup> New-Partition -DiskNumber 2 -Size 128MB -GptType "{e3c9e316-0b5c-4db8-817d-f92df00215ae}" # MSR Disk Number: 2 PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 3 630194176 128 MB Reserved PS D:\NoBackup> New-Partition -DiskNumber 2 -Size 20GB -AssignDriveLetter -GptType "{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}" | Format-Volume -FileSystem NTFS -Confirm:$false -NewFileSystemLabel 2012R2-STD-CORE -Force # OS DriveLetter FileSystemLabel FileSystem DriveType HealthStatus SizeRemaining Size ----------- --------------- ---------- --------- ------------ ------------- ---- E 2012R2-STD-CORE NTFS Fixed Healthy 19.94 GB 20 GB PS D:\NoBackup> New-Partition -DiskNumber 2 -UseMaximumSize -GptType "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}" # Recovery y Disk Number: 2 PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 5 22239248384 4.29 GB Recovery |
Just double-checking:
1 2 3 4 5 6 7 8 9 10 11 12 |
PS D:\NoBackup> Get-Partition -DiskNumber 2 Disk Number: 2 PartitionNumber DriveLetter Offset Size Type --------------- ----------- ------ ---- ---- 1 1048576 500 MB Recovery 2 525336576 100 MB System 3 630194176 128 MB Reserved 4 E 764411904 20 GB Basic 5 22239248384 4.29 GB Recovery |
Wunderbar!
Next I apply the image I want as before:
1 |
PS D:\NoBackup> Expand-WindowsImage -ImagePath .\2012r2.wim -Index 1 -ApplyPath E: |
That takes care of the data partition. Let’s look at the other ones now.
WinRE tools partition
This is the first partition on the disk. I will (1) format it as FAT32, (2) mount it to a temporary drive letter, (3) copy the WinRE.WIM file from E:\Windows\System32\Recovery
(change E:
to whatever letter is assigned to the OS partition), (4) register the Windows RE image with the OS, and (5) dismount it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
PS D:\NoBackup> Get-Partition -DiskNumber 2 -PartitionNumber 1 | Format-Volume -FileSystem FAT32 -NewFileSystemLabel RECOVERY -Force -Confirm:$false DriveLetter FileSystemLabel FileSystem DriveType HealthStatus SizeRemaining Size ----------- --------------- ---------- --------- ------------ ------------- ---- RECOVERY FAT32 Fixed Healthy 496 MB 496 MB PS D:\NoBackup> Get-Partition -DiskNumber 2 -PartitionNumber 1 | Set-Partition -NewDriveLetter R PS D:\NoBackup> mkdir "R:\Recovery\WindowsRE" Directory: R:\Recovery Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 06/11/2014 12:07 WindowsRE PS D:\NoBackup> xcopy /H E:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\ PS D:\NoBackup> ReAgentc.exe /setreimage /path R:\Recovery\WindowsRE\ /target E:\Windows REAGENTC.EXE: Windows RE is already enabled. PS D:\NoBackup> Remove-PartitionAccessPath -AccessPath R: -DiskNumber 2 -PartitionNumber 1 |
Thanks to this TechNet article on how to register the Windows RE image. The WinRE.WIM image can be customized too with drivers and other tools if required but I won’t be doing any of that here.
Just double-checking that Windows RE is registered correctly:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PS D:\NoBackup> ReAgentc.exe /info /target E:\Windows Windows Recovery Environment (Windows RE) and system reset configuration Information: Windows RE status: Enabled Windows RE location: \\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE Boot Configuration Data (BCD) identifier: 91d1f9bf-5c91-11e3-8c88-8f43aa31e915 Recovery image location: Recovery image index: 0 Custom image location: Custom image index: 0 REAGENTC.EXE: Operation Successful. |
EFI System Partition
This is the second partition on the disk. As before I will format this as FAT32 and mount to a temporary drive letter. (Note: I use a different cmdlet to assign drive letter here, but you can use the previous cmdlet too).
1 |
PS D:\NoBackup> Get-Partition -DiskNumber 2 -PartitionNumber 2 | Add-PartitionAccessPath -AccessPath Q: |
Format the partition as FAT32. The Format-Volume
cmdlet doesn’t work here (am guessing it can’t work with “System” partitions) so I use the usual format
command instead:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
PS D:\NoBackup> Get-Partition -DiskNumber 2 -PartitionNumber 2 | Format-Volume -FileSystem FAT32 -NewFileSystemLabel EFS Format-Volume : No matching MSFT_Volume objects found by CIM query for enumerating instances of the ROOT/Microsoft/Windows/Storage/MSFT_Volume class on the CIM server, that are associated with the following instance: MSFT_Partition (DiskId = "\\?\scsi#disk&ven_msft&prod_virtual_dis..., Offset = 525336576). Verify query parameters and retry. At line:1 char:50 + Get-Partition -DiskNumber 2 -PartitionNumber 2 | Format-Volume -FileSystem FAT32 ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (MSFT_Volume:String) [Format-Volume], CimJobException + FullyQualifiedErrorId : CmdletizationQuery_NotFound,Format-Volume PS D:\NoBackup> format q: /fs:FAT32 /v:EFS The type of the file system is RAW. The new file system is FAT32. WARNING, ALL DATA ON NON-REMOVABLE DISK DRIVE Q: WILL BE LOST! Proceed with Format (Y/N)? Y Formatting 100.0 MB Initializing the File Allocation Table (FAT)... Format complete. 96.0 MB total disk space. 96.0 MB are available. 1,024 bytes in each allocation unit. 98,303 allocation units available on disk. 32 bits in each FAT entry. |
Get the boot loaders over to this drive, confirm they are copied, and remove the drive letter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PS D:\NoBackup> bcdboot E:\Windows /S Q: /f UEFI Boot files successfully created. PS D:\NoBackup> dir q:\EFI\Boot Directory: q:\EFI\Boot Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 22/08/2013 16:39 1615712 bootx64.efi PS D:\NoBackup> Get-Partition -DiskNumber 2 -PartitionNumber 2 | Remove-PartitionAccessPath -AccessPath Q: |
Phew!
Recovery Image partition
Last thing, let’s sort out the recovery image partition.
I am going to skip this (even though I made the partition as an example) because there’s no point wasting the space in my use case. All one has to do to sort out the recovery image partition is to mount it like with the WinRE tools partition and copy over the install.wim file to it. Then use the ReAgentc.exe
command to register that image with that installation of Windows. (See steps 5-7 of this link).
That’s it!
Now dismount the VHD, make a differencing VHD as before, create a VM with this VHD and fire away!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
PS D:\NoBackup> Dismount-VHD '.\Hyper-V\Virtual Hard Disks\2012r2-std-core.vhdx' PS D:\NoBackup> New-VHD -Differencing -Path '.\Hyper-V\Virtual Hard Disks\WINDC01.vhdx' -ParentPath '.\Hyper-V\Virtual Hard Disks\2012r2-std-core.vhdx' ComputerName : TINTIN Path : D:\NoBackup\Hyper-V\Virtual Hard Disks\WINDC01.vhdx VhdFormat : VHDX VhdType : Differencing FileSize : 4194304 Size : 26843545600 MinimumSize : 26842513920 LogicalSectorSize : 512 PhysicalSectorSize : 4096 BlockSize : 2097152 ParentPath : D:\NoBackup\Hyper-V\Virtual Hard Disks\2012r2-std-core.vhdx DiskIdentifier : a5548da4-bbd1-4259-b97c-b8cf164dc5b4 FragmentationPercentage : Alignment : 1 Attached : False DiskNumber : Key : IsDeleted : False Number : PS D:\NoBackup> New-VM -Name WINDC01 -MemoryStartupBytes 512MB -SwitchName "Internal Switch" -VHDPath '.\Hyper-V\Virtual Hard Disks\WINDC01.vhdx' -Generation 2 # Note I am creating a Generation 2 VM Name State CPUUsage(%) MemoryAssigned(M) Uptime Status ---- ----- ----------- ----------------- ------ ------ WINDC01 Off 0 0 00:00:00 Operating normally PS D:\NoBackup> Set-VM -Name WINDC01 -DynamicMemory # I want to use Dynamic Memory |
And voila! It is booting!
Update: I came across this interesting post by Mark Russinovich on disk signature collisions and how that affects the BCD. Thought I should link it here as it makes for a good read in the context of what I talk about above.