使用 Windows 10,我有一个运行 scientifix linux 的虚拟机。我现在需要模拟一个“真正的”硬盘,正如谷歌、论坛和超级用户教给我的那样,这可以这样实现:
C:\Program Files\Oracle\VirtualBox>vboxmanage setextradata "Testinstall" "VBoxInternal/Devices/piix4ide/0/Config/PrimaryMaster/FirmwareRevision" "ISD000081"
C:\Program Files\Oracle\VirtualBox>vboxmanage setextradata "Testinstall" "VBoxInternal/Devices/piix4ide/0/Config/PrimaryMaster/SerialNumber" "83CJ0015"
C:\Program Files\Oracle\VirtualBox>vboxmanage setextradata "Testinstall" "VBoxInternal/Devices/piix4ide/0/Config/PrimaryMaster/ModelNumber" "INTEL SSD1602CW"
....这些命令和我输入的完全一样。
然而,输出hdparm -I /dev/sda
仍然列出了库存“VBOX HARDDISK”及其相关数据。
我尝试过的事情:
- 再次检查磁盘控制器。它被设置为 PIIX4。
setextradata
为了以防万一,我还尝试了 piix3,但结果没有改变。 - 由于
vboxmanage
提供的详细程度很低,我决定弄乱我的命令,看看是否有任何方法可以发现明显的错误:- 错误地输入了机器名称:“TestInstallaoeu”。抛出一个错误,表明我最初输入的机器名称是正确的
- 错误输入了要更改的参数:
"VBoxInternal/Bogus/Parameter" "BogusData"
。这不会产生错误,表明我的命令中可能存在拼写错误(即使我无法发现拼写错误)。
- 我尝试过使用和不使用上述双引号来包裹命令,但似乎没有什么区别,因为无论如何都没有任何空格。
我不知道该怎么做。我读到的所有内容都表明它应该可以正常工作,但我的经验却恰恰相反。
编辑1:
根据(部分)要求提供附加数据。
- Virtualbox 版本:5.1.4 r110228
- 主机操作系统:Windows 10
- 客户操作系统:Scientific Linux 6.7(内核 2.6.32)
虚拟机目录中的所有元数据文件似乎都不包含我输入的数据。检查了文件.vbox
和.vbox-prev
文件。
硬盘条目.vbox
:
<HardDisks>
<HardDisk uuid="{808541e0-6629-47cd-96b3-7ff6021d9dcc}" location="TestDisk.vdi" format="VDI" type="Normal"/>
</HardDisks>
.vbox
存储控制器的条目:
<StorageController name="IDE" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
<AttachedDevice passthrough="false" type="DVD" hotpluggable="false" port="1" device="0"/>
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
<Image uuid="{808541e0-6629-47cd-96b3-7ff6021d9dcc}"/>
</AttachedDevice>
</StorageController>
我在文件中注意到的一件事是,其中有我输入的虚假命令的残留:
<ExtraDataItem name="VboxInternal/Bogus/Parameter" value="asdf"/>
...所以至少我的一些命令是按预期执行的。
.vbox
完整内容可在此处查看:Pastebin 链接
注意: 我刚才注意到,为了匿名化数据,我在本帖和链接的 pastebin 中伪造了机器名称和磁盘名称。阅读任何对“TestDisk”和“Testinstall”的引用时,请记住,这些是替换标签,实际上是相同的名称。因此,在这种情况下,“Testinstall”和“TestDisk”可以互换。
编辑2:
尝试了各种组合后,我现在找到了一组真正可以放入文件中的命令.vbox
。很可能是打字错误导致我之前无法执行此操作。这些命令是:
C:\Program Files\Oracle\VirtualBox>vboxmanage setextradata Testinstall "VboxInternal/Devices/piix4ide/0/Config/PrimaryMaster/ModelNumber" "INTEL SSD1602CW"
C:\Program Files\Oracle\VirtualBox>vboxmanage setextradata Testinstall "VboxInternal/Devices/piix4ide/0/Config/PrimaryMaster/FirmwareRevision" "1602CW.1.3"
C:\Program Files\Oracle\VirtualBox>vboxmanage setextradata Testinstall "VboxInternal/Devices/piix4ide/0/Config/PrimaryMaster/SerialNumber" "1602CW1800200926"
但是,输出hdparm -I /dev/sda
仍然显示磁盘型号为“VBOX HARDDISK”。换句话说,问题仍然存在。
答案1
我认为你误解了这个选项的含义setextradata/getextradata
。根据VBox 手册,
这些命令允许您将字符串数据附加到虚拟机或 VirtualBox 配置并检索该数据(通过指定全局而不是虚拟机名称)。
所提出的用例如下:
# VBoxManage setextradata Fedora5 installdate 2006.01.01
# VBoxManage getextradata Fedora5 installdate
VirtualBox Command Line Management Interface Version 5.1.6
(C) 2005-2016 Oracle Corporation
All rights reserved.
Value: 2006.01.01
这installdate
是与以下字符串关联的关键字2006.0.1.01
;调用该关键字将返回关联的字符串。换句话说,setextradata/getextradata
是一种将某种类型的数据放入 VM 中的方法,burning
这些数据的检索可能在将来有所帮助。
这与模拟“真实”硬盘据我所知,VBox 中没有这样的选项;如果您不这么认为,您能提供一些参考资料吗?
从你写的内容来看,你提到的命令来自某人,他在虚拟机上附加了一些标签,详细说明了虚拟机正在运行的硬盘的属性。按照手册给出的语法,字符串“ISD000081”、“83CJ0015”、“英特尔 SSD1602CW”被分配到一个名为测试安装,在文件路径所代表的(长)关键字下。如果你有一个名为 TestInstall 的虚拟机,那么这些字符串将可以通过使用上面给出的命令查询虚拟机来获取,例如
vboxmanage getextradata "Testinstall" "VBoxInternal/Devices/piix4ide/0/Config/PrimaryMaster/FirmwareRevision"
应该返回字符串
"ISD000081"
你可以尝试一下,检查一下我说的是否正确,或者你也可以直接打开xml描述虚拟机的文件通常称为测试安装.vbox,你会发现一条这样的新线,
<ExtraDataItem name="keyword" value="character_string"/>
这再次显示了命令设置额外数据/获取额外数据用于。
答案2
设想
我相信虚拟机上有一些软件可以检查它是否在特定硬盘上运行,并通过读取其品牌和型号来做到这一点。因此,该软件将在真实机器上运行,但会拒绝在虚拟机上运行。
同样地,你也不是希望软件意识到它是在虚拟机上运行,并且软件会检查硬盘是否有“VBOX”的工厂品牌等迹象。
如果这种情况正确,那么您的方法也是正确的 - 让 VirtualBox 报告与真实机器相同的信息。这是使用 ExtraData 属性树的特殊分支完成的。
如果不正确,你想模仿其他的,可能甚至硬盘的物理属性(寻道时间、延迟或其他内容),那么@MariusMatutiae 的答案就是正确的——你所做的不是正确的做法,而且根本行不通。
有用!
您可能使用了错误的 VBoxManage 语法,或者可能引用了错误的控制器(例如,您没有使用 PIIX4,而是使用 AHCI)。即使使用 AHCI 或 PIIX3,您仍然可以设置 PIIX4 额外数据,当然,它们不会影响机器。
我刚刚在我的其中一台使用 AHCI 硬盘的虚拟机上尝试过(全部在一行上):
D:\Programmi\Oracle\VirtualBox>vboxmanage setextradata
"Aladdin-Clone" "VBoxInternal/Devices/ahci/0/Config/Port0/ModelNumber"
"HITACHI HTD723216L9SA61"
我确实得到了(我只更改了型号,但没有理由相信其他两个键不起作用)
/dev/sda:
ATA device, with non-removable media
Model Number: HITACHI HTD723216L9SA61
Serial Number: VB35affeb2-744b8198
Firmware Revision: 1.0
Standards:
Used: ATA/ATAPI-6 published, ANSI INCITS 361-2002
Supported: 6 5 4
更新
github 上有一个完整的 Python 脚本,“反病毒检测“,它允许定制 VirtualBox 机器,使其与另一台机器非常相似。您可以在机器上运行脚本来保存数据,它将生成一个脚本来修改虚拟机……或者您可以查看源代码并从那里提取命令。请注意,根据控制器的不同,有多个命令可以设置驱动器品牌和型号。