操作场景
制作Windows操作系统的私有镜像,首先需要基于对应版本的原始iso镜像文件,创建出对应版本的Windows虚拟机环境。
通常制作镜像的过程需要基于您本地的电脑或服务器启动Windows虚拟机,因此您在这个过程,您本地的电脑即是承载Windows虚拟机的宿主机。
制作工具
为了使您的私有镜像更好地适用于弹性云主机,本文目标为创建出格式为qcow2的私有镜像,因此推荐您使用Linux操作系统,并安装QEMU和Libvirt作为创建工具。
本文下方的示例中所使用的代码,将以Fedora 40 (Workstation Edition)版本的Linux操作系统作为宿主机,并安装QEMU和Libvirt作为安装工具。
说明如果您的本地电脑为Windows或者MacOS,建议您通过虚拟化软件启动一台Linux虚拟机,作为创建Windows虚拟机的宿主机。
安装QEMU和Libvirt
在Fedora 40 (Workstation Edition)操作系统中,打开终端,将下属命令一次性粘贴到终端中,并执行回车。
# 可本机备份后清除此类 ks 文件。
rm -f /root/*-ks.cfg
# 配置 QEMU 和 libvirt。
dnf install -y @virtualization qemu-system-aarch64 qemu-system-loongarch64 telnet vim
dnf autoremove -y
dnf group remove -y LibreOffice
# 配置 QEMU 和 libvirt。
qemu_config='/etc/libvirt/qemu.conf'
[ ! -f "${qemu_config}.bak" ] && cp "$qemu_config" "${qemu_config}.bak"
sed -i 's/^#*group[[:space:]]*=.*/group = "root"/g' "$qemu_config"
sed -i 's/^#*user[[:space:]]*=.*/user = "root"/g' "$qemu_config"
systemctl enable libvirtd
usermod -aG libvirt root
# 禁用 Security-Enhanced Linux (SELinux)。
if command -v getenforce >/dev/null && [ "$(getenforce)" != "Disabled" ]; then
selinux_config='/etc/selinux/config'
[ ! -f "${selinux_config}.bak" ] && cp "$selinux_config" "${selinux_config}.bak"
sed -i 's/^[[:space:]]*SELINUX=.*/SELINUX=disabled/' "$selinux_config"
setenforce 0
fi
systemctl disable --now firewalld
reboot
成功安装后,您可以通过终端执行安装虚拟机命令,也可以通过虚拟系统管理器(virt-manager)继续安装Linux虚拟机
创建Windows虚拟机
注意Windows操作系统安装过程,需要注意镜像需内置 VirtIO 驱动,因此创建虚机时除了将系统 ISO 文件作为第一启动盘外,还需挂载 VirtIO 驱动 ISO 文件。
下方示例中第二个--disk会用到此文件。
以下分别为常用Windows Server版本对应的VirtIO驱动下载链接:
Windows Server 2008 系列:virtio-win-0.1.173-2
Windows Server 2008 R2 系列:virtio-win-0.1.173-4
Windows Server 2012 系列(包括 R2):virtio-win-0.1.215-2
Windows Server 2016/2019/2022 系列:virtio-win-最新稳定版
通过virt-install命令,使用原始iso文件创建Windows虚拟机。
qemu-img create -f qcow2 <镜像文件名>.qcow2 <系统盘大小,即原始镜像大小>
virt-install \
--arch <架构,参考取值:aarch64、x86_64> \
--cdrom <ISO 文件名> \
--channel unix,mode=bind,name=org.qemu.guest_agent.0,target_type=virtio \
--connect qemu:///system \
--debug \
--disk bus=virtio,device=disk,format=qcow2,path=<通过 qemu-img 命令创建的 QCOW2 文件名> \
--disk device=cdrom, path=<适用于当前Windows镜像版本的VirtIO.iso文件路径> \
--graphics vnc,listen=0.0.0.0 \
--name <虚机名称> \
--network default,model=virtio \
--osinfo <如前介绍,根据虚机系统实际情况,选取合适值。若不确定,则可尝试取 unknown> \
--ram <内存大小> \
--vcpus <CPU 核心数> \
--video virtio
其中osinfo可 virt-install --osinfo list
查看。
以安装Windows Server 2022为例:
qemu-img create -f qcow2 Ubuntu-Server_22.04-x86_64-231024-R1.qcow2 40G
virt-install \
--arch x86_64 \
--cdrom zh-cn_windows_server_2022_x64_dvd.iso \
--channel unix,mode=bind,name=org.qemu.guest_agent.0,target_type=virtio \
--connect qemu:///system \
--debug \
--disk bus=virtio,device=disk,format=qcow2,path=Ubuntu-Server_22.04-x86_64-231024-R1.qcow2 \
--disk device=cdrom, path=virtio-win-0,1.262.iso \
--graphics vnc,listen=0.0.0.0 \
--name Windows-Server-2022 \
--network default,model=virtio \
--osinfo win2k22 \
--ram 2048 \
--vcpus 2 \
--video virtio
安装Windows操作系统
以Windows Server 2022为例,在安装操作系统的过程中,请参照以下步骤设置:
- 接受适用的声明和许可条款,选择自定义类型的安装。
- 先从 VirtIO 驱动 ISO 文件中加载匹配的驱动程序,再选择操作系统的安装位置。
注意匹配判定方式为驱动路径中的系统架构和代号,如 amd64 代表 64 位,i386 代表 32 位, 2k22 代表 Windows Server 2022 系列,2k8r2 代表 Windows Server 2008 R2 系列。