我有一个现有的 Linux 系统,我想用它来创建一个虚拟机。
我已经安装了 VirtualBox。
我能够使用https://unix.stackexchange.com/questions/16299/using-a-lvm-partition-as-a-virtualbox-drive从逻辑卷创建 VMDK。
我不确定下一步应该采取什么步骤来填充该逻辑卷并使其 VMDK 成为从现有系统复制的可用系统映像。
这样做相对简单mkfs.ext3 /dev/vg1/vm_puppy
,挂载它,并通过网络复制所有文件,但我不知道这是否会使它成为可用的虚拟机映像。
假设我已经知道如何执行文件复制步骤,那么用可启动系统填充该 VMDK 的正确步骤是什么?
答案1
您可以在虚拟机中使用两个硬盘,一个是要映像的物理硬盘,另一个是该物理硬盘的虚拟映像。要访问物理驱动器,请在 vmdk 中创建一个“指针”,如下所示
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
-rawdisk /dev/vg1/vm_puppy
然后在 VirtualBox 中创建两个额外的虚拟驱动器,一个用于物理驱动器的映像,一个用于一些简单的轻量级操作系统。
当你完成“简单轻量级操作系统”的设置并在其中完成后,只需使用dd
命令即可制作物理硬盘的完整映像。
当您完成映像处理并想要使用克隆的系统(来自物理硬盘)时,创建一个新的虚拟机并将克隆的虚拟映像作为虚拟硬盘提供给它。
PS 如果您有一个相当大的硬盘(您想要克隆的原始系统)并且不想牺牲克隆映像上的空间,您可以用其他方式执行此操作,使用tar
命令创建原始的完整存档并在虚拟机中扩展它。这样您可以减少虚拟驱动器使用的空间。您可以通过共享的 VirtualBox 文件夹将 tar 的存档移动到虚拟机。您唯一需要额外做的事情是在解压存档的虚拟驱动器上安装 grub
(我希望我理解你的意思)
答案2
我最终使用的解决方案是创建两个虚拟磁盘(借用 Alex 的想法)以连接到设置 > 存储 > SATA 控制器。
我使用VirtualBox
GUI 创建了一个 128M VMDK 来包含 MBR 和一个/dev/sda1
作为/boot
。
我之前从 LVM 逻辑卷创建的另一个 VMDK 成为了虚拟的/dev/sdb
(没有分区)。
我将 gentoo 安装 ISO 加载到虚拟机的虚拟 CDROM(设置 > 存储 > IDE 控制器)并从中启动。一旦 gentoo 安装环境启动并运行,我就可以分区/dev/sda
和创建/dev/sda1
/boot
文件系统,并从源主机复制内核和其他文件。我没有分区,/dev/sdb
因为它已经包含我之前构建的根文件系统。
我安装/dev/sdb
并/boot
根据准备磁盘并根据挂载必要的文件系统准备好文件系统后,我可以 chroot 并开始重新配置 VM,以解决源机器磁盘和 VM 磁盘之间的差异。
我必须/etc/lilo.conf
在虚拟机内部进行更新才能使用boot=/dev/sda
和root=/dev/sdb
。
同样/etc/fstab
需要进行修改,因为源主机使用了许多单独的分区(这种风格在过去十年中已经不再流行)并且 VM 仅具有/dev/sdb
根/dev/sda1
和/boot
。
我还必须重新编译内核以支持ahci
sata 模块和e1000
以太网。源机器非常旧。
此过程的一个缺点是,我必须sda
在正在运行的虚拟机内对虚拟机进行分区。我不知道是否有一个过程可以让我对 VMDK 进行分区,并在其分区中填充文件系统和数据,而无需启动使用它的虚拟机。
我不确定如果我尝试使用主机操作系统和 chroot 重新编译客户机内核而不是在 VM 内部重新编译(这无论如何都需要使用 gentoo 安装 ISO)会发生什么问题。
我无法使用 Debian live ISO,因为在启动过程中的某个时刻,屏幕变成了彩色的字符条纹。我猜想虚拟显卡存在一些不兼容问题,直接获取 gentoo 比翻阅有关该错误的所有相关讨论来测试所有建议的解决方案要容易得多。