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