我想要制作一个由 5 台虚拟机组成的“套件”,所有虚拟机都是 Ubuntu Server 12.04 客户操作系统,但操作系统上的软件堆栈截然不同(一台服务器是“构建服务器”,安装了 Subversion、Hudson 等;另一台服务器是应用服务器,安装了 JBoss 等)。
安装和配置 Ubuntu Server 需要几个小时。如果可能的话,我希望只需执行一次(在虚拟机上安装操作系统的“基本”版本),然后将此“基本”版本复制到其他 4 台虚拟机。这样,每台机器我就可以节省 2 - 3 小时,只需专注于安装和配置每台服务器的应用程序。
当我创建虚拟机时,我看到创建了三个文件:
my-vm.vbox
- 我认为这是虚拟机my-vm.vbox-prev
- 不知道这是什么my-vm.vdi
- 我假设这是安装客户操作系统(我的“基础”)的实际磁盘
不幸的是,我已经创建了所有 5 台虚拟机,并且正在第一台虚拟机上安装 Ubuntu Server,因此我的设置如下:
build-srv.vbox
,,(VDI 已初始化,但其中没有任何内容build-srv.vbox-prev
)build-srv.vdi
app-srv.vbox
,,app-srv.vbox-prev
(app-srv.vdi
相同,已初始化,但其中没有任何内容)- 等等... (全部 5 个)
我正在构建服务器 ( build-srv
) 上安装 Ubuntu Server。我希望一旦我完成了,所有的配置信息将只包含在 中build-srv.vdi
。理论上,我应该能够直接复制粘贴build-srv.vdi
到其他每台服务器,然后交换各自的 VDI,对吗?
我确信我还必须进入 VM 设置并以某种方式更改 VDI,但我甚至不确定我是否走在正确的轨道上。
我需要的可以实现吗?如果可以,我需要做什么才能为每个虚拟机配置与我当前所处的操作系统实例相同的副本?如果不可以,我有什么选择(除了为每个虚拟机重复相同的 2 小时安装!)?提前致谢!
答案1
每个 VDI 文件都包含一个 UUID 形式的标识符。Virtualbox
将这些 UUID 记录到数据库中,并拒绝使用您刚刚复制的 VDI(但在另一台计算机上这没问题,因为它不会记录有关此 UUID 的任何信息)。
我知道 2 种方法:
- 复制 VDI(使用文件管理器或命令行),然后使用vboxmanage internalcommands sethduuid "path/yourdisk.vdi"
,您将获得此 VDI 的全新 UUID
- 或使用 Virtualbox mediamanager(进入菜单)。选择要复制的磁盘... 然后单击“复制”按钮。它可以轻松完成相同的操作
my-vm.vbox
- 这是描述虚拟机的 XML 文件。您可以使用文本编辑器或 Web 浏览器打开它my-vm.vbox-prev
- 这是 my-vm.vbox 的备份my-vm.vdi
- 这是虚拟磁盘
编辑:该copy
功能似乎只存在于 Windows 上。我的 Linux 机器没有它,我的 Windows 机器有
答案2
你可能正在寻找的是多附件磁盘模式 - 可以在创建和配置初始磁盘映像后应用。然后,您可以将其用作多个虚拟机的核心,并且每个虚拟机都将拥有基于原始映像的自己的差异映像 - 无需复制或克隆。请参阅以下文档:http://www.virtualbox.org/manual/ch05.html#hdimagewrites