我编写了一个脚本,该脚本可以生成适用于用户模式 Linux 的根文件系统映像(基于 Debian lenny)。(本质上,这个脚本创建了一个文件系统映像,用一个循环设备挂载它,使用 debootstrap 创建一个 lenny 安装,为 TUN/TAP 网络设置一个静态 IP,添加用于通过 SSH 登录的公钥并安装一个 Web 应用程序。)
这些文件系统映像与 UML 配合得很好,但如果能够生成人们可以在替代虚拟化软件上使用的类似映像,那就太好了,而且我根本不熟悉这些选项。特别是,因为这个想法是使用这个图像作为一个独立的服务器来测试 Web 应用程序,所以网络工作很重要。
我想知道是否有人可以建议在自定义此类根文件系统映像时会涉及哪些内容,以便它们可以与其他虚拟化软件一起使用,例如 VMware、Xen 或作为 Amazon EC2 实例?两个特别关注的是:
如果此类系统不使用原始文件系统映像(例如,它们需要带有元数据的标头或以某种特定方式压缩),是否存在用于在不同格式之间进行转换的工具?
我假设在文件系统中,至少
/etc/network/interfaces
必须进行定制,但是否需要进行更多涉及的更改?
非常感谢您的任何建议...
VirtualBox 具有“VBoxManage convertdd”,可以将原始磁盘映像(使用 dd 生成)导入到它自己的特殊 .vdi 格式中。我相信 VMWare 等也有类似的东西。
各种虚拟化产品通常具有一些内核扩展(如 VirtualBox 来宾扩展),它们使来宾操作系统能够以各种方式与主机协作,安装这些通常很有帮助。
开放虚拟化格式 (OVF) 似乎正在获得支持 - 请参阅http://en.wikipedia.org/wiki/Open_Virtualization_Format了解介绍。
与 OP 不同,我使用的是 Centos7,主要的管理程序是 HyperV。也就是说,其中大部分将适用于其他发行版和虚拟机管理程序。
我已将 systemd-networkd 配置为在任何连接的接口上默认为 DHCP,并且我没有遇到网络配置问题。虽然我喜欢 systemd-networkd 的强大功能,但对于 DNS,它需要 systemd-resolved - 这与传统的解析器行为大相径庭。我坚持……暂时。
我遇到的问题是内核模块。首先,没有安装用于各种管理程序的许多模块。其次,
dracut
(它在 centos 和其他一些发行版上构建 initramfs)着眼于当前的硬件,并且只包括与该硬件一起工作的模块。可以通过 强制它包含其他模块--add-drivers
,但您必须知道模块的确切文件名。对于任何给定的管理程序,您可能需要虚拟存储和虚拟网络模块,可能还需要一个气球内存驱动程序等。在为 dracut 设计参数时,请注意 a
dracut module
和 a之间的区别kernel module
。可以在http://man7.org/linux/man-pages/man8/dracut.8.html#OPTIONS找到 dracut 选项列表;我最终得到了类似于以下内容的内容(注意,我不确定内核模块名称是否准确 - 如果它们是仅用于 HyperV):
dracut --kver 0 -f --xz -a "busybox mdraid" -o "bootchart dash plymouth btrfs dmraid fcoe-uefi iscsi nbd biosdevname" --no-kernel --add-drivers "hv_storvsc hv_vmbus hv_utils"
另一个答案建议使用 OVF 格式。IIRC OVF 导入 HyperV 需要下载一个插件,该插件需要一个非常旧的 .NET 版本......换句话说,如果 HyperV 将成为您的 vm 最常用的管理程序,那将是痛苦的。
幸运的是,许多虚拟机管理程序都可以导入 VHD,并且可以通过 qemu-img 从 raw、qcow2 等轻松创建。
另一种方式,可能是直接附加分区。
在qemu中,它只是在命令行中。
在 VirtualBox,您必须按照 VirtualBox 用户手册第 9 章中所述的步骤 - “高级存储配置”小节:http: //www.virtualbox.org/manual/ch09.html#id504534看起来或多或少像这样:
当然/dev/sda可以更改为任何块设备,尤其是分区(可能在 LVM2 上)。
在 VMWare 上,也可以直接附加分区或磁盘。
多亏了这一点,在这样的配置中,您甚至可以使用相同的安装从一个 VM切换到另一个 VM。
你知道这个根文件系统站点吗?那里的所有文件系统最初都是为与 UML 一起使用而开发的,但它们应该与任何虚拟化解决方案一起使用。但是请注意,没有安装引导加载程序,因为映像是由单个循环安装的磁盘(没有分区表)组成的。您仍然可以使用其
-kernel
命令行选项使用 kvm 引导它们,对于其他图像,您将需要引导另一个映像(也许是恢复 cd/image?)并自己安装引导加载程序。显然,您可能必须使用相关工具将此原始格式转换为您需要的任何格式(vdi/vmware/..)。如果您想自己创建文件系统,则包含这些脚本。