如何设置VirtualBox bios UUID
How to set VirtualBox bios UUID
我正在尝试在 VirtualBox 中使用我的本机 Windows 安装,因为它有 OEM 许可证,我需要重新使用 bios UUID 才能激活。
一些系统信息:
OS:Arch Linux,内核 4.1.6-1
虚拟机:5.0.4_OSEr102546
机器使用原始 vmdk 磁盘限制为本机 Windows 安装使用的 6 个分区。
我已经为大量 dmi 数据应用了诸如 modifyvm --hardwareuuid 和 setextradata 之类的命令。
配置中的相关行是:
<ExtraData>
...
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardLocInChass" value="Type2 - Board Chassis Location"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" value="Lancer 5A5"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardSerial" value="string:1052326401165"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardVendor" value="LENOVO"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardVersion" value="31900058WIN"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisSerial" value="YB10465037"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisVendor" value="LENOVO"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisVersion" value="Lenovo Z50-70"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiProcManufacturer" value="Intel(R) Corporation"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiProcVersion" value="Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="1abbb2fc-c938-11e4-a961-68f728a77e71"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/UUID" value="bytes:Gruy/Mk4EeSpYWj3KKd+cQ=="/><!-- UUID in BASE64 -->
</ExtraData>
<Hardware version="2" uuid="{1abbb2fc-c938-11e4-a961-68f728a77e71}">
<CPU count="1" hotplug="false">
<HardwareVirtEx enabled="true"/>
<HardwareVirtExNestedPaging enabled="true"/>
<HardwareVirtExVPID enabled="true"/>
<HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
<LongMode enabled="true"/>
<HardwareVirtExLargePages enabled="false"/>
<HardwareVirtForce enabled="false"/>
</CPU>
<Memory RAMSize="2560" PageFusion="false"/>
<Firmware type="EFI"/>
<HID Pointing="USBTablet" Keyboard="PS2Keyboard"/>
<HPET enabled="false"/>
<Chipset type="PIIX3"/>
Vboxmanage showvminfo returns 这一行:
Hardware UUID: 1abbb2fc-c938-11e4-a961-68f728a77e71
如您所见,我使用了 VirtualBox 的 hardwareuuid 设置、dmi 设置 DmiSystemUuid 和 UUID(这个我不得不从日志中进行逆向工程并找出如何传递它 - 通过 base64 并转换为字节)。
然而,当我 运行 机器时,VirtualBox 以某种方式决定它更了解并使用机器的初始 UUID。它在日志中显示(最后一行):
00:00:00.586671 ************************* CFGM dump *************************
00:00:00.586674 [/] (level 0)
00:00:00.586680 CSAMEnabled <integer> = 0x0000000000000001 (1)
00:00:00.586683 CpuExecutionCap <integer> = 0x0000000000000064 (100)
00:00:00.586686 EnablePAE <integer> = 0x0000000000000001 (1)
00:00:00.586687 HMEnabled <integer> = 0x0000000000000001 (1)
00:00:00.586689 MemBalloonSize <integer> = 0x0000000000000000 (0)
00:00:00.586690 Name <string> = "Windows 8" (cb=10)
00:00:00.586692 NumCPUs <integer> = 0x0000000000000001 (1)
00:00:00.586693 PATMEnabled <integer> = 0x0000000000000001 (1)
00:00:00.586695 PageFusionAllowed <integer> = 0x0000000000000000 (0)
00:00:00.586696 RamHoleSize <integer> = 0x0000000020000000 (536 870 912, 512 MB)
00:00:00.586699 RamSize <integer> = 0x00000000a0000000 (2 684 354 560, 2 GB)
00:00:00.586701 RawR0Enabled <integer> = 0x0000000000000001 (1)
00:00:00.586702 RawR3Enabled <integer> = 0x0000000000000001 (1)
00:00:00.586704 TimerMillies <integer> = 0x000000000000000a (10)
00:00:00.586705 UUID <bytes> = "fc b2 bb 1a 38 c9 e4 11 a9 61 68 f7 28 a7 7e 71" (cb=16)
不幸的是,这个是重要的 UUID。在 Windows 8 中,如果我使用 wmic 命令,它会报告 UUID:fcb2bb1a-38c9-e411-a961-68f728a77e71 而我想要 1abbb2fc-c938-11e4- a961-68f728a77e71.
我推断它可能被从 root 开始的 extradata 操纵,所以我试着加入:
<ExtraDataItem name="VBoxInternal/UUID" value="bytes:Gruy/Mk4EeSpYWj3KKd+cQ=="/>
这将日志值更改为正确的值,但 wmic 仍然报告以 'fc' 开头的值。另外 Windows 激活无效。
所以现在我真的没主意了。
有没有人成功地设置了这个,如果是的话如何?
重要的一行是:
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="1abbb2fc-c938-11e4-a961-68f728a77e71"/>
但是前四组的字节顺序是颠倒的,所以需要写成:
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="fcb2bb1a-38c9-e411-a961-68f728a77e71"/>
既然你写的是事实上你真正想做的是重用你的激活,而不仅仅是克隆硬件 UUID,以下信息可能对你有用(其中大部分来自最高级 post https://forums.gentoo.org/viewtopic-t-1071844-start-0.html(对于任何试图虚拟化 windows 安装的人来说非常有用的读物)其中一些是我最近看到的:
上面 post 声称,为了让 Windows 激活服务器相信它们正在被 "same" 机器作为物理机器查询,机器必须具有以下硬件参数配置与原机中的值相同:
- 整机硬件UUID
- 安装Windows的磁盘序列号
- 安装Windows的分区的分区UUID
- 如果许可证是 pre-installed OEM 许可证,或从此类许可证升级,则 SLIC 固件也需要安装在新机器上。
备注:
1. 分区 UUID 与该分区上文件系统的文件系统 UUID 不同。如果在原来的机器上可以运行linux,就是blkid所说的分区的PARTUUID。
2. 磁盘或分区 "on which windows is installed" 是包含文件 Windows\System32\winload.exe 的磁盘或分区。就是MS恶作剧的叫"the Boot partition"的分区。 (之所以这样称呼是因为它包含所有系统文件。包含引导机器所需文件的分区(当然)称为“系统分区”)。
3. 我不知道 if/how 将 SLIC 导入 virtualbox VM。上面的 post 解释了如果您使用 KVM/libvirt/virsh 如何做到这一点。
4.肯定有VIrtualBox VBoxManage命令来设置硬件UUID,虚拟甚至原始磁盘的分区UUID,以及磁盘序列号。不幸的是,在 VirtualBox 中(截至我撰写本文时),只能为连接到(虚拟)SATA 或 IDE 控制器的磁盘设置磁盘序列号。因此,使用 virtio 或 nvme 控制器的 VIrtualBox VM 目前是 SOL。据推测,这将在某个时候得到解决。
最后,在 HKLM\SYSTEM\HardwareConfig 有一组注册表项,其值似乎是 "System Information." 显示的信息的来源通过阅读 VIrtualBox 手册,我成功了使系统信息的输出在原始物理机和 VirtualBox VM 之间几乎相同。 (我什至制作了一个 Win 10 VM 报告系统信息,就好像它是一个 Win 8 盒子一样 - 看看结果是否很有趣,输入 Win 8 产品密钥会让机器认为它已激活。相关部分手册的内容是关于 "Vendor Product Information" 和 "Dmi BIOS Information"。
我成功地激活了在带有虚拟 SATA 磁盘的机器上工作的激活,但在带有虚拟 vnme 磁盘的机器上却不行——所以我假设至少(其中之一)硬盘和分区 UUID 是必填。
我正在尝试在 VirtualBox 中使用我的本机 Windows 安装,因为它有 OEM 许可证,我需要重新使用 bios UUID 才能激活。
一些系统信息:
OS:Arch Linux,内核 4.1.6-1
虚拟机:5.0.4_OSEr102546
机器使用原始 vmdk 磁盘限制为本机 Windows 安装使用的 6 个分区。
我已经为大量 dmi 数据应用了诸如 modifyvm --hardwareuuid 和 setextradata 之类的命令。
配置中的相关行是:
<ExtraData>
...
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardLocInChass" value="Type2 - Board Chassis Location"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" value="Lancer 5A5"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardSerial" value="string:1052326401165"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardVendor" value="LENOVO"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardVersion" value="31900058WIN"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisSerial" value="YB10465037"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisVendor" value="LENOVO"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisVersion" value="Lenovo Z50-70"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiProcManufacturer" value="Intel(R) Corporation"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiProcVersion" value="Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="1abbb2fc-c938-11e4-a961-68f728a77e71"/>
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/UUID" value="bytes:Gruy/Mk4EeSpYWj3KKd+cQ=="/><!-- UUID in BASE64 -->
</ExtraData>
<Hardware version="2" uuid="{1abbb2fc-c938-11e4-a961-68f728a77e71}">
<CPU count="1" hotplug="false">
<HardwareVirtEx enabled="true"/>
<HardwareVirtExNestedPaging enabled="true"/>
<HardwareVirtExVPID enabled="true"/>
<HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
<LongMode enabled="true"/>
<HardwareVirtExLargePages enabled="false"/>
<HardwareVirtForce enabled="false"/>
</CPU>
<Memory RAMSize="2560" PageFusion="false"/>
<Firmware type="EFI"/>
<HID Pointing="USBTablet" Keyboard="PS2Keyboard"/>
<HPET enabled="false"/>
<Chipset type="PIIX3"/>
Vboxmanage showvminfo returns 这一行:
Hardware UUID: 1abbb2fc-c938-11e4-a961-68f728a77e71
如您所见,我使用了 VirtualBox 的 hardwareuuid 设置、dmi 设置 DmiSystemUuid 和 UUID(这个我不得不从日志中进行逆向工程并找出如何传递它 - 通过 base64 并转换为字节)。
然而,当我 运行 机器时,VirtualBox 以某种方式决定它更了解并使用机器的初始 UUID。它在日志中显示(最后一行):
00:00:00.586671 ************************* CFGM dump *************************
00:00:00.586674 [/] (level 0)
00:00:00.586680 CSAMEnabled <integer> = 0x0000000000000001 (1)
00:00:00.586683 CpuExecutionCap <integer> = 0x0000000000000064 (100)
00:00:00.586686 EnablePAE <integer> = 0x0000000000000001 (1)
00:00:00.586687 HMEnabled <integer> = 0x0000000000000001 (1)
00:00:00.586689 MemBalloonSize <integer> = 0x0000000000000000 (0)
00:00:00.586690 Name <string> = "Windows 8" (cb=10)
00:00:00.586692 NumCPUs <integer> = 0x0000000000000001 (1)
00:00:00.586693 PATMEnabled <integer> = 0x0000000000000001 (1)
00:00:00.586695 PageFusionAllowed <integer> = 0x0000000000000000 (0)
00:00:00.586696 RamHoleSize <integer> = 0x0000000020000000 (536 870 912, 512 MB)
00:00:00.586699 RamSize <integer> = 0x00000000a0000000 (2 684 354 560, 2 GB)
00:00:00.586701 RawR0Enabled <integer> = 0x0000000000000001 (1)
00:00:00.586702 RawR3Enabled <integer> = 0x0000000000000001 (1)
00:00:00.586704 TimerMillies <integer> = 0x000000000000000a (10)
00:00:00.586705 UUID <bytes> = "fc b2 bb 1a 38 c9 e4 11 a9 61 68 f7 28 a7 7e 71" (cb=16)
不幸的是,这个是重要的 UUID。在 Windows 8 中,如果我使用 wmic 命令,它会报告 UUID:fcb2bb1a-38c9-e411-a961-68f728a77e71 而我想要 1abbb2fc-c938-11e4- a961-68f728a77e71.
我推断它可能被从 root 开始的 extradata 操纵,所以我试着加入:
<ExtraDataItem name="VBoxInternal/UUID" value="bytes:Gruy/Mk4EeSpYWj3KKd+cQ=="/>
这将日志值更改为正确的值,但 wmic 仍然报告以 'fc' 开头的值。另外 Windows 激活无效。
所以现在我真的没主意了。
有没有人成功地设置了这个,如果是的话如何?
重要的一行是:
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="1abbb2fc-c938-11e4-a961-68f728a77e71"/>
但是前四组的字节顺序是颠倒的,所以需要写成:
<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="fcb2bb1a-38c9-e411-a961-68f728a77e71"/>
既然你写的是事实上你真正想做的是重用你的激活,而不仅仅是克隆硬件 UUID,以下信息可能对你有用(其中大部分来自最高级 post https://forums.gentoo.org/viewtopic-t-1071844-start-0.html(对于任何试图虚拟化 windows 安装的人来说非常有用的读物)其中一些是我最近看到的:
上面 post 声称,为了让 Windows 激活服务器相信它们正在被 "same" 机器作为物理机器查询,机器必须具有以下硬件参数配置与原机中的值相同:
- 整机硬件UUID
- 安装Windows的磁盘序列号
- 安装Windows的分区的分区UUID
- 如果许可证是 pre-installed OEM 许可证,或从此类许可证升级,则 SLIC 固件也需要安装在新机器上。
备注: 1. 分区 UUID 与该分区上文件系统的文件系统 UUID 不同。如果在原来的机器上可以运行linux,就是blkid所说的分区的PARTUUID。 2. 磁盘或分区 "on which windows is installed" 是包含文件 Windows\System32\winload.exe 的磁盘或分区。就是MS恶作剧的叫"the Boot partition"的分区。 (之所以这样称呼是因为它包含所有系统文件。包含引导机器所需文件的分区(当然)称为“系统分区”)。 3. 我不知道 if/how 将 SLIC 导入 virtualbox VM。上面的 post 解释了如果您使用 KVM/libvirt/virsh 如何做到这一点。 4.肯定有VIrtualBox VBoxManage命令来设置硬件UUID,虚拟甚至原始磁盘的分区UUID,以及磁盘序列号。不幸的是,在 VirtualBox 中(截至我撰写本文时),只能为连接到(虚拟)SATA 或 IDE 控制器的磁盘设置磁盘序列号。因此,使用 virtio 或 nvme 控制器的 VIrtualBox VM 目前是 SOL。据推测,这将在某个时候得到解决。
最后,在 HKLM\SYSTEM\HardwareConfig 有一组注册表项,其值似乎是 "System Information." 显示的信息的来源通过阅读 VIrtualBox 手册,我成功了使系统信息的输出在原始物理机和 VirtualBox VM 之间几乎相同。 (我什至制作了一个 Win 10 VM 报告系统信息,就好像它是一个 Win 8 盒子一样 - 看看结果是否很有趣,输入 Win 8 产品密钥会让机器认为它已激活。相关部分手册的内容是关于 "Vendor Product Information" 和 "Dmi BIOS Information"。
我成功地激活了在带有虚拟 SATA 磁盘的机器上工作的激活,但在带有虚拟 vnme 磁盘的机器上却不行——所以我假设至少(其中之一)硬盘和分区 UUID 是必填。