月度归档:2025年06月

从 iso 到 qcow2 的坎坷之路

之前在云上部署下一代防火墙(NGFW)的时候,须订购云主机并安装指定的 NGFW 产品系统镜像。大致步骤:将该 NGFW 的镜像包(qcow2 格式)先上传至云内对象存储,再导入至自定义操作系统列表,就可以灌装到云主机中。再把 VPC 内的其他主机路由表下一跳指向该主机,就可以实现 NGFW 对 VPC 内流量统一管理。

此次,某客户在订购了裸金属服务器后,须安装指定的某版本操作系统,但不在标准操作系统选单中,于是紧急以 iso 安装包起手,拿出指导帮助文档,利用手头的环境边走边学 qcow2 镜像的制作过程,是为记。

手头 VMware 的虚拟机中已有 CentOS 7.9,但没有 GUI,制作工具 virt-manager 是底层 python 、表层 GTK 或 Qt 写就的 GUI 工具,那么纯命令行的系统则不行。于是第一步便是把 CentOS 的 GUI 给出弄出来:

yum groupinstall "GNOME Desktop" "Graphical Administration Tools" -y
systemctl get-default 可以看到当前默认的模式为 multi-user.target
systemctl set-default graphical.target 修改为图形界面模式


将 CentOS 7.9 GUI 设置好之后,virt-manager 装好之后,一通折腾,最后仍然以缺 python 的 gi 库告终,摊手。点亮斜门初级技能:把命令行系统变出 GUI 。

最后还是想到了自己那台万能的 N100 小主机。含 GNOME 的 Manjaro,各方面都符合要求,于是准备用其从 iso 制作 qcow2 。 sudo pacman -S virt-manager,并把其他缺失包一一装好后,又出现了新的问题:Virtual Machine Manager 里面没有 QEMU,只有 LXC 。

搜了下,LXC(Linux Containers)是基于容器的虚拟化,KVM(Kernel-based Virtual Machine)是更底层的内核级虚拟化。那为什么没有 KVM 呢,问了下最近觉得技术方面比较给力的 Google Gemini,回答如下:

在使用 Manjaro 安装 virt-manager 后,出现 LXC 而没有 QEMU,通常意味着 virt-manager 默认连接到了 LXC hypervisor,而不是 QEMU/KVM 。
这里有几个常见的原因和解决方法:

1. 确保你已经安装了 QEMU 和 Libvirt 相关的必要包。在 Manjaro 上,这通常包括 libvirt virt-manager 以及可选的 KVM 模块 qemu-arch-extra;
2. libvirtd.socket 或 libvirtd.service 的启用问题,要确保 libvirtd.socket 或 libvirtd.service 已经启动并启用;
3. 用户权限问题:用户需要添加到 libvirt 用户组才能无密码地使用 virt-manager 连接到 QEMU/KVM;

之后又给出了一些复查命令。

照做之后,果然在 Virtual Machine Manager 中出现 QEMU/KVM 。之后就是在 virt-manager 的 QEMU 中新建虚拟机,这里的界面很像 VMware 的硬件配置界面。

把 iso 文件导入虚拟 CDROM,简单配置下硬件,Begin Installation,得到的磁盘镜像文件就是 qcow2,类似于 VMware 的 vmdk 。

最后 qemu-img convert -c -O 把镜像文件压缩一下就行。写到这里,我突然想到:在 VMware 里制作 vmdk,用 qemu-img convert 直接转成 qcow2 呢,应该也可以吧。如果绕路了,那也一定是为了看风景。:D