设想

设想

使用 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 机器,使其与另一台机器非常相似。您可以在机器上运行脚本来保存数据,它将生成一个脚本来修改虚拟机……或者您可以查看源代码并从那里提取命令。请注意,根据控制器的不同,有多个命令可以设置驱动器品牌和型号

相关内容