一、KVM虚拟机的克隆
每次安装虚拟机比较浪费时间,KVM提供了虚拟机克隆技术,可以几分钟内克隆出一个新的虚拟机,并不需要安装系统,非常方便迅速。kvm虚拟机的克隆分为两种情况:【使用模板克隆】和【手动克隆】。
1.1、使用模板克隆
1.1.0、安装部署KVM虚拟机
KVM虚拟化与企业应用实践------创建KVM虚拟机实践教程
https://coffeemilk.blog.csdn.net/article/details/161932482
bash
#使用UEFI模式安装部署KVM虚拟机(如:openEuler-24.03-LTS-SP2-x86_64)
#1-OVMF_VARS.fd是UEFI 虚拟机的可变存储(存放 BIOS 启动设置、引导项等),不能直接共用系统默认文件,必须复制一份独立副本给这台虚拟机,防止多台虚拟机篡改同一份文件导致启动异常。
cp /usr/share/edk2/ovmf/OVMF_VARS.fd /data/vmdisk/openeuler2403sp2_VARS.fd
#2-创建虚拟机
#2.1-创建openeuler24.03-lts-sp2虚拟机
virt-install \
--virt-type=kvm \
--os-variant=rhel9.3 \
--name=openeuler2403sp2 \
--description="开发使用的OpenEuler24.03-LTS-SP2服务器---UEFI模式" \
--vcpus=2 \
--cpu host-model \
--memory 4096 \
--disk path=/data/vmdisk/openeuler2403sp3.qcow2,bus=virtio,cache=none,size=40 \
--cdrom /data/AllOS/iso/openEuler-24.03-LTS-SP2-x86_64-dvd.iso \
--network bridge=br0,model=virtio \
--noautoconsole \
--graphics vnc,port=5904,listen=0.0.0.0,password=qwer1234 \
--boot uefi,menu=on,firmware=/usr/share/edk2/ovmf/OVMF_CODE.fd,nvram=/data/vmdisk/openeuler2403sp2_VARS.fd
#2.2-系统安装完成后启动虚拟机
virsh list --all
virsh start openeuler2403sp2
#3-开启通过控制台访问KVM虚拟机
#3.1-打开/etc/default/grub文件,在文件中的GRUB_CMDLINE_LINUX项quite前添加 console=ttyS0
#3.2-【BIOS模式】则更新 GRUB 配置命令如下:
grub2-mkconfig -o /boot/grub2/grub.cfg
#3.2-【UEFI模式】则更新 GRUB 配置命令如下:
grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
#3.3-重启虚拟机
reboot now
#3.4-最后再宿主机上通过【virsh console】命令即可进入虚拟机了(进入后按下【Enter】键输入账号密码即可正式进入虚拟机)
virsh console openeuler2403sp2
#3.5-要退出控制台,只需在kvm虚拟机命令行执行【exit】,然后按键盘【Ctrl + ]】键即可退出控制台。




1.1.1、使用模板克隆的实践步骤
bash
#使用模板克隆的实践步骤
#1-在宿主机安装virt-sysprep
dnf install /usr/bin/virt-sysprep -y
#2-关闭作为模板的虚拟机【并且还需要知道源虚拟机磁盘镜像的位置和虚拟机磁盘镜像文件的拥有者】
virsh list --all
virsh shutdown openeuler2403sp2
virsh list --all
virsh domblklist openeuler2403sp2
#3-拷贝一个虚拟机磁盘镜像作为模板
cp /data/vmdisk/openeuler2403sp3.qcow2 /data/vmdisk/openeuler2403sp2-template.qcow2
#4-对模板镜像执行各种清理任务(如:删除用户账户信息、重置网络设置等,以确保新克隆的虚拟机拥有干净、未配置的状态)
virt-sysprep -a /data/vmdisk/openeuler2403sp2-template.qcow2
#5-将清理后的磁盘镜像导入一个虚拟机,作为虚拟机模板
cp /usr/share/edk2/ovmf/OVMF_VARS.fd /data/vmdisk/openeuler2403sp2_template_VARS.fd
virt-install \
--virt-type=kvm \
--os-variant=rhel9.3 \
--name=openeuler2403sp2-template \
--description="开发使用的OpenEuler24.03-LTS-SP2服务器---UEFI模式-模板" \
--vcpus=2 \
--cpu host-model \
--memory 4096 \
--disk path=/data/vmdisk/openeuler2403sp2-template.qcow2,bus=virtio,cache=none,size=40 \
--network bridge=br0,model=virtio \
--noautoconsole \
--graphics vnc,port=5905,listen=0.0.0.0,password=qwer1234 \
--boot uefi,menu=on,firmware=/usr/share/edk2/ovmf/OVMF_CODE.fd,nvram=/data/vmdisk/openeuler2403sp2_template_VARS.fd \
--import
virsh list --all
virsh shutdown openeuler2403sp2-template
virsh list --all
#6-使用克隆模板【前提:用作克隆的模板域必须已经关闭】
#6.1-正式克隆模板
virt-clone --original openeuler2403sp2-template --auto-clone
#6.2-模板克隆完成后,可以直接查看所有的虚拟机情况中一个后缀带clone(如:openeuler2403sp2-template-clone)的就是刚克隆好的虚拟机
virsh list --all
#6.3-查看指定虚拟机的磁盘所在位置
virsh domblklist openeuler2403sp2-template-clone
#6.4-查看指定虚拟机的xml配置文件
virsh dumpxml openeuler2403sp2-template-clone
#6.5-启动指定虚拟机
virsh start openeuler2403sp2-template-clone
#6.6-查看指定虚拟机的vnc端口(然后在防火墙放开指定的端口即可)
virsh vncdisplay openeuler2403sp2-template-clone
firewall-cmd --permanent --add-port=5900/tcp
firewall-cmd --reload
firewall-cmd --list-ports
#6.7-也可以直接使用控制台登录
virsh console openeuler2403sp2-template-clone





1.2、手动克隆的实践步骤
bash
#使用手动克隆虚拟机【能够更加灵活的指定"虚拟机名称"与"镜像路径"等内容】
#【前提:用作克隆的模板域必须已经关闭】
#1-检查用作模板的虚拟机的域必须关闭
virsh list --all
virsh shutdown openeuler2403sp2-template
virsh list --all
#2-手动克隆虚拟机
virt-clone -o openeuler2403sp2-template -n openeuler2403sp2-manual-01 -f /data/vmdisk/openeuler2403sp2-manual-01.qcow2
#3-启动指定虚拟机
virsh list --all
virsh start openeuler2403sp2-manual-01
#4-查看指定虚拟机的vnc端口(然后在防火墙放开指定的端口即可)
virsh vncdisplay openeuler2403sp2-manual-01
firewall-cmd --permanent --add-port=5900/tcp
firewall-cmd --reload
firewall-cmd --list-ports
#5-也可以直接使用控制台登录
virsh console openeuler2403sp2-manual-01

二、虚拟机的迁移
虚拟机热迁移是指【把虚拟机从一个物理主机(源主机)迁移到另一个物理主机(目的主机)】。我们所熟知的开源 QEMU\KVM 虚拟机便支持这种技术。
| KVM虚拟机迁移的两种方式 | 说明 |
|---|---|
| 静态迁移(冷迁移) | 对于冷迁移,就是在虚拟机关闭的状态下,将虚拟机的磁盘文件及 .xml 配置文件(这两个文件定义了一个虚拟机)复制到要迁移的目标主机上,然后在目标主机上使用 "virsh define *.xml" 重新定义这个虚拟机即可。 |
| 动态迁移(热迁移) | 对于热迁移,就比较常用,通常是这台服务器上一直跑着的一些业务,而这些业务又不能中断,那么就需要使用热迁移了。 |
bash
#1-KVM虚拟机的xml文件默认所在目录
cd /etc/libvirt/qemu/
ll
#2-KVM虚拟机镜像文件默认所在目录
cd /var/lib/libvirt/images/
ll
#3-查看指定虚拟机镜像文件所在目录
virsh domblklist openeuler2403sp2-manual-01

2.1、虚拟机的冷迁移
KVM虚拟机跨物理机的冷迁移方式比较简单, 只要拷贝其磁盘文件和xml配置文件,再根据xml来创建域即可,实际的操作步骤如下:
bash
#虚拟机的冷迁移实践步骤
#0-需要在目标服务器【192.168.1.135】安装部署虚拟机环境【请参考https://coffeemilk.blog.csdn.net/article/details/161932482】
#1-从源服务器【192.168.1.29】拷贝需迁移虚拟机的xml文件与磁盘镜像文件到目标服务器上【192.168.1.135如:拷贝openeuler2403sp2-template.qcow2、openeuler2403sp2-template.xml】
#默认虚拟机配置文件路径为:/etc/libvirt/qemu
#默认虚拟机磁盘路径为:/var/lib/libvirt/images
#这里使用rsync的稀疏传输文件,可以远端写入时识别连续全 0 块,创建文件空洞,【du sh *】只占用3.2G,而不会膨胀到40G;从而节省硬盘空间
cd /etc/libvirt/qemu/
rsync --sparse --progress -av openeuler2403sp2-template.xml root@192.168.1.135:/etc/libvirt/qemu/
virsh domblklist openeuler2403sp2-template
cd /data/vmdisk/
ssh root@192.168.1.135 "mkdir -p /data/vmdisk"
rsync --sparse --progress -av openeuler2403sp2-template.qcow2 openeuler2403sp2_template_VARS.fd root@192.168.1.135:/data/vmdisk/
#2-根据xml文件创建域【在目标服务器192.168.1.135操作】
ll /data/vmdisk/
cd /etc/libvirt/qemu/
virsh define openeuler2403sp2-template.xml
virsh list --all
virsh vncdisplay openeuler2403sp2-template
virsh console openeuler2403sp2-template
#3-彻底清理指定虚拟机
virsh destroy openeuler2403sp2-template 2>/dev/null
virsh undefine openeuler2403sp2-template --nvram --remove-all-storage 2>/dev/null
rm -f /data/vmdisk/openeuler2403sp2-template.qcow2 /data/vmdisk/openeuler2403sp2_template_VARS.fd
virsh list --all | grep openeuler2403sp2-template


2.2、虚拟机的热迁移
2.2.1、虚拟机热迁移的具体过程
| 虚拟机热迁移的具体过程 | 说明 |
|---|---|
| 《1》全量迁移阶段 | 迁移开始时,客户机依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上。 |
| 《2》增量迭代迁移阶段 | QEMU/KVM 会监控并记录下迁移过程中所有已被传输的内存页上的修改,并在所有内存页都传输完成之后开始传输在前面过程中内存页的更改内容。 |
| 《3》停机迁移阶段 | QEMU/KVM 会估计迁移过程中的传输速度,当剩余内存数据量能够在一个可以设定的时间周期(默认30毫秒)内传输完成时,QEMU/KVM 会关闭宿主机上的客户机,再将剩余的数据量传输到目的主机上,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态。也就是说,当剩余内存脏数据能够在停机时间内完成迁移,就会暂停虚拟机,将剩余的内存一次性迁移到目的主机。 |
至此,KVM虚拟机的动态迁移操作就完成了。其虚拟机上的运行的业务不会受到影响。
2.2.2、热迁移的注意事项
| 热迁移的注意事项 |
|---|
| 《1》热迁移过程中,需要保证网络状态的良好,如果发生网络中断,热迁移会暂停,直到网络恢复后才会继续,当发生超时,热迁移会失败; |
| 《2》迁移过程中,不允许对虚拟机进行生命周期管理以及硬件设备操作管理; |
| 《3》只支持同构热迁移(即源端和目的端CPU型号需要相同); |
| 《4》跨业务网段虚拟机迁移可以成功,但是到目的端后会出现网络异常,为了防止该情况的发生,需要用户保证迁移业务的网段一致。 |
2.2.3、虚拟机的热迁移(非共享存储场景)实践步骤
| virsh migrate参数 | 作用 | 生产必要性 |
|---|---|---|
| --live | 在线热迁移,业务不中断 | 必选✅ |
| --unsafe | 强制跳过所有兼容性校验,忽略软硬件不兼容警告,强行发起迁移(若存在不兼容,则迁移后可能虚拟机黑屏、崩溃、业务异常) | 删除❌ |
| --auto-converge | 自动收敛脏页,解决大内存业务迁移卡住 | 必选✅ |
| --timeout 300 | 默认是30秒;迁移 5 分钟未完成自动中断,释放资源;单位是秒 | 推荐 |
| --copy-storage-all | 本地存储场景,完整复制磁盘至目标宿主机 | 本地存储必选;共享存储删除 |
| --migrate-disks vda | 只迁移 vda 磁盘,忽略其他挂载盘 | 根据磁盘需求使用 |
bash
#虚拟机的热迁移(非共享存储场景)实践步骤
#0-防火墙临时放行端口(源、目标两台机器都要开);若要永久放行,则在后面添加--permanent
#【基础控制通道(qemu+ssh)使用 qemu+ssh://root@xxx,SSH 标准 22 端口必须放行,用于建立 libvirt 控制会话、下发迁移指令】
#【QEMU 迁移数据流端口:ibvirt/QEMU 实时迁移内存、块存储(--copy-storage-all)走一组 TCP 端口;默认基础端口:49152;QEMU 会自动向上连续占用端口,默认端口范围:49152 ~ 50176(49152 + 1024)迁移多磁盘、大内存、复制全存储时会一次性占用多个连续端口,只放 49152 会直接卡死存储拷贝阶段】
#【libvirt 管理后台端口(可选但建议放行)16509:libvirt TLS 管理端口(远程 virsh 连接标准端口);16514:libvirt unix 代理 / 日志,跨机迁移校验资源会用到】
#【NBD 块存储迁移端口(关键!--copy-storage-all 依赖)--copy-storage-all 本地导出磁盘为 NBD 服务传给目标机,NBD 默认端口:10809:QEMU NBD 标准端口;如果不放 10809,磁盘拷贝阶段会报错、迁移卡住,仅内存迁移能走,存储复制失败。】
firewall-cmd --add-port=22/tcp --add-port=10809/tcp --add-port=49152-50176/tcp --add-port=16509/tcp
#firewall-cmd --reload
firewall-cmd --list-ports
#1-执行热迁移之前,需要在目的端主机【192.168.1.135】相同磁盘目录下创建一个虚拟磁盘文件,注意磁盘的格式和大小必须保持一致。
#1.1-在与源宿主机相同磁盘目录下创建一个相同名称、大小、格式的虚拟镜像文件
virsh domblklist openeuler2403sp2-template
mkdir -p /data/vmdisk/
ll -ah /data/vmdisk/
qemu-img create -f qcow2 /data/vmdisk/openeuler2403sp2-template.qcow2 40G
#1.2-先检查目的主机【192.168.1.135】主机名称是否设置且本地DNS是否有配置,没有则配置
hostname
cat /etc/hosts
#没有则按照如下命令配置
hostnamectl set-hostname virtualserver-kvmqemu
echo "127.0.0.1 virtualserver-kvmqemu" >> /etc/hosts
echo "192.168.1.135 virtualserver-kvmqemu" >> /etc/hosts
systemctl restart systemd-hostnamed
systemctl restart NetworkManager
exec bash
#2-在源宿主机【192.168.1.29】使用 virsh migrate 进行迁移,迁移的时候会将存储也一并迁移到目的端【192.168.1.135】
#2.1-在源宿主机【192.168.1.29】上新增迁移目的端的DNS本地解析并验证
echo "192.168.1.135 virtualserver-kvmqemu">>/etc/hosts
getent hosts 192.168.1.135
exec bash
#2.2-直接迁移【语法:virsh migrate [参数] 虚拟机名 目标连接URI】
#(需要耐心等待传输完成,传输完成的标志是【热迁移完成后源宿主机的命令返回,且源宿主机的虚拟机关闭;而目的端的虚拟机正常运行】)
virsh migrate --live --copy-storage-all --migrate-disks vda openeuler2403sp2-template qemu+ssh://root@192.168.1.135/system
#virsh migrate --live --auto-converge --timeout 900 --copy-storage-all --migrate-disks vda openeuler2403sp2-template qemu+ssh://root@192.168.1.135/system
#3-让临时放开的端口失效
firewall-cmd --reload








到这里,恭喜你,在【非共享存储场景】【进行虚拟机的热迁移完成】!
2.2.4、虚拟机的热迁移(共享存储场景)实践步骤
bash
#虚拟机的热迁移(共享存储场景)实践步骤
#1-使用【virsh domblklist】命令查询虚拟机的存储设备信息(若虚拟机的所有存储设备都在远端共享存储之上,则说明该虚拟机为共享存储虚拟机;否则为非共享存储虚拟机)
#2-开始迁移虚拟机(如:将openeuler2403sp2-template迁移到目的主机上)
#<destination-host-ip>为目的主机IP地址,热迁移之前需要进行ssh认证以获取目的端主机管理员权限;
#virsh migrate命令还有【--auto-converge】和【--timeout】子选项来保证迁移的顺利完成;
#【--live】选项:在线热迁移,虚拟机全程不关机、业务不中断;
#【--unsafe】选项:项强制跳过所有兼容性校验,忽略软硬件不兼容警告,强行发起迁移(正常 libvirt 在线迁移有安全校验机制:迁移前会对比源宿主机、目标宿主机的 CPU 型号、内核版本、QEMU 版本、设备架构、固件类型等,若存在不兼容,直接拒绝迁移,防止迁移后虚拟机黑屏、崩溃、业务异常。)。
#【--auto-converge】选项:会对CPU进行降频限速,确保热迁移流程能够收敛。
#【--timeout】选项:会指定一个热迁移超时时间,热迁移超过指定时间后会强制挂起虚拟机让热迁移得以收敛。
virsh migrate --live --unsafe openeuler2403sp2-template qemu+ssh://<destination-host-ip>/system
#3-最后,热迁移完成后命令返回,虚拟机在目的端主机正常运行。
三、本地使用阿里云镜像与虚拟机磁盘管理
3.1、本地虚拟机使用Alibaba Cloud Linux镜像
3.1.1、在本地使用Alibaba Cloud Linux镜像创建虚拟机实践步骤
Alibaba Cloud Linux是阿里云ECS使用的主机操作系统,此系统开源,可供下载并在本地使用,阿里云提供了VHD和QCOW2格式的本地镜像,有多个版本(如:【Alibaba Cloud Linux 2 images】【Alibaba Cloud Linux 3 images】【Alibaba Cloud Linux 4 images】)各个版本之间只是内核不同而已。
本文以Alibaba Cloud Linux 4为例,下载x86平台下qcow2格式的文件,以及seed.img文件。然后在本地创建一个xml配置文件alinux4.xml实现创建虚拟机的实践操作步骤如下:
bash
#本地虚拟机使用Alibaba Cloud Linux镜像创建虚拟机的实践步骤
#1-下载Alibaba Cloud Linux 4镜像与seed.img文件到指定目录下
cd /data/vmdisk/
wget https://alinux4.oss-cn-beijing.aliyuncs.com/images/aliyun_4_x64_20G_nocloud_alibase_20260430.qcow2 -c
wget https://alinux4.oss-cn-beijing.aliyuncs.com/images/seed.img -c
mkdir -p alicloudlinux4
mv aliyun_4_x64_20G_nocloud_alibase_20260430.qcow2 seed.img ./alicloudlinux4/
#2-创建阿里云镜像的配置文件alinux4.xml
vi alinux4.xml
#【alinux4.xml】文件的完整内容
<domain type='kvm'>
<name>alinux4</name>
<memory>1048576</memory><!-- 1 GB内存[单位是kb] -->
<vcpu>1</vcpu>
<cpu mode='host-passthrough'><!-- 需要在对应架构的服务器上启动实例。 -->
</cpu>
<os>
<type arch='x86_64'>hvm</type><!-- 如果是ARM64架构的服务器,则需设置为arch='aarch64'。 -->
<boot dev='hd'/>
</os>
<clock sync="localtime"/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator><!-- 请根据不同的操作系统设置对应的kvm路径。例如:Ubuntu对应的kvm路径是/usr/bin/kvm。 -->
<disk type='file' device='disk'><!-- 请根据镜像格式设置下面的type参数:qcow2对应type='qcow2'、vhd对应type='vpc'。 -->
<driver name='qemu' type='qcow2' cache='none' dataplane='on' io='native'/> <!-- 如果要创建qcow2快照,需要关闭dataplane。 -->
<source file='/data/vmdisk/alicloudlinux4/aliyun_4_x64_20G_nocloud_alibase_20260430.qcow2'/> <!-- 填写Alibaba Cloud Linux 4镜像的绝对路径。 -->
<target dev='vda' bus='virtio'/>
</disk>
<!-- 加入seed.img的信息。 -->
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/data/vmdisk/alicloudlinux4/seed.img'/> <!-- 填写seed镜像的绝对路径。 -->
<target dev='vdb' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<console type='pty'>
<target type='virtio' port='0'/>
</console>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<alias name='video0'/>
</video>
<input type='tablet' bus='usb'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
</devices>
</domain>
#3-从alinux4.xml文件定义的虚拟机配置创建持久化虚拟机,并启动该虚拟机
virsh define alinux4.xml
virsh list --all
virsh start alinux4
#4-进入启动好的虚拟机中【默认登录帐号为alinux,密码为aliyun,具有sudo权限,可通过alinux用户设置root用户密码,开启root登录、且修改默认alinux用户的密码、查看是否可以获取到ip地址(这里设置为桥接模式)】
virsh console alinux4
sudo passwd root
su - root
whoami
passwd alinux
ip a
#5-清空已创建的虚拟机命令
virsh destroy alinux4 2>/dev/null
virsh undefine alinux4
virsh list --all | grep alinux4








3.1.2、使用Alibaba Cloud Linux镜像的优缺点
| 使用Alibaba Cloud Linux镜像创建虚拟机的优点 | 说明 |
|---|---|
| ✅线上线下环境高度统一(最大优势) | * 阿里云 ECS 默认操作系统,本地开发 / 测试和生产环境内核、系统参数、软件源、系统服务完全一致,避免 "本地正常、线上出 bug"。 * 配套工具对齐:aliyun-cli、云监控、cloud-init、ACK 容器组件预装,本地可完整模拟云上运维流程。 * 原生 qcow2 镜像,无需手动安装系统,下载后直接配合virsh define创建虚机,快速批量部署测试节点。 |
| ✅兼容 CentOS 生态,迁移成本极低 | * Alibaba Cloud Linux 4 对标 RHEL9、Alinux3 对标 RHEL8、Alinux2 对标 CentOS7,使用 yum/dnf 包管理器。 * 原有 CentOS 脚本、Ansible 剧本、rpm 包、中间件基本无需修改即可运行,CentOS 停服后的绝佳替代。 |
| ✅内核深度优化,虚拟化性能优秀 | * Alinux4 搭载 6.6 LTS、Alinux3 搭载 5.10 LTS 内核,针对 virtio 磁盘 / 网卡、cgroup、内存调度做大规模业务调优(阿里双 11 打磨)。 * 多开本地虚拟机时内存开销更低,Web、数据库、Java 服务并发性能优于通用 CentOS 原版。 * 内置增强 perf、内核诊断工具,本地压测、性能排查更方便。 |
| ✅安全能力强,自带加固基线 | * 默认最小化安装,关闭无用服务,攻击面小;SELinux 默认开启,内置弱密码拦截、端口安全策略。 * 支持内核热补丁,高危漏洞在线修复,无需频繁重启虚拟机。 * 原生内置国密 SM2/SM3/SM4,适合政务、金融本地测试。 |
| ✅云原生友好,容器开箱即用 | 默认开启 cgroup v2,预装适配 ACK 的 containerd、镜像加速工具,本地搭建 K8s 测试集群无需额外配置。 |
| 使用Alibaba Cloud Linux镜像创建虚拟机的缺点 | 说明 |
|---|---|
| ❌生态偏向阿里云,纯本地离线场景冗余组件多 | 镜像内置大量阿里云云主机专属组件(cloud-init、aliyun 监控、云账号工具),如果完全不对接阿里云,这些进程占用少量内存、磁盘资源。 |
| ❌社区通用资料少于 CentOS、Ubuntu | Alinux 是阿里自研发行版,网上通用教程、第三方问题解决方案比 CentOS、Ubuntu 少;遇到小众 bug,优先只能查阅阿里云官方文档。 |
| ❌小众软件兼容性偶尔不如通用发行版 | 部分极冷门开源软件、老旧私有 rpm 包,仅针对原生 CentOS 做适配,在 Alinux 上可能出现依赖不匹配,需要手动调整 yum 源或编译安装。 |
| ❌适配仅 x86/ARM 云架构,本地特殊硬件适配弱 | 主要面向云服务器硬件优化,本地老旧 PC、特殊外设(工业采集卡、老旧显卡)驱动适配不如 Ubuntu、Debian 完善;本地桌面场景几乎无优化,不适合做桌面虚拟机。 |
| ❌cloud-init 依赖云端元数据,纯本地使用需额外配置 | 如果本地不用 NoCloud 镜像初始化,默认 cloud-init 会持续尝试连接阿里云元数据服务,产生大量无用日志,需要手动关闭或配置本地数据源。 |
3.1.3、Alibaba Cloud Linux镜像的适用场景与不适用场景
| Alibaba Cloud Linux镜像的适用场景 | 说明 |
|---|---|
| ✅对接阿里云业务的开发 / 测试环境 | 业务最终部署在阿里云 ECS/ACK,本地 KVM 搭建预发、联调集群,保证环境一致性,提前发现线上问题。 |
| ✅CentOS 停服后的替代服务器环境 | 原有业务基于 CentOS7/8,不想更换 Debian/Ubuntu 体系,本地搭建测试、运维节点。 |
| ✅本地搭建 K8s、容器测试集群 | 模拟 ACK 阿里云容器服务,验证镜像、调度、监控、日志采集流程。 |
| ✅高并发中间件、数据库本地压测 | Nginx、Redis、MySQL、Java 微服务性能验证,依托优化内核获得更贴近云上的性能数据。 |
| ✅政务、金融等需要国密、等保测试 | 自带国密内核、默认安全加固,本地做安全基线、等保合规验证。 |
| ✅批量自动化创建虚拟机 | 配合 virsh、virt-clone、cloud-init 批量拉起多台测试节点,快速搭建分布式集群。 |
| Alibaba Cloud Linux镜像的不适用场景 | 说明 |
|---|---|
| ❌完全不接触阿里云,纯本地个人 / 内网小型服务 | 无云上业务,冗余云组件增加资源消耗,选用 Ubuntu、Debian 更轻量化。 |
| ❌虚拟机需要桌面图形界面、本地外设直通 | Alinux 无桌面优化,硬件驱动适配差,优先 Ubuntu。 |
| ❌大量老旧私有软件、传统工业程序 | 依赖原生 CentOS 底层 ABI,容易出现依赖兼容问题。 |
| ❌离线长期单机、极低资源小型虚拟机 | 内置服务多,内存占用高于极简版 Debian/CentOS Minimal。 |
3.2、虚拟机磁盘管理工具qemu-img
qemu-img是管理qemu虚拟磁盘的命令行工具集,功能包括查看,创建,检查,转换,快照,调整大小等。这个命令支持多种磁盘镜像格式,包括但不限于 raw, cow, qcow2, vdi, vmdk 等。
bash
#1-创建一个新的镜像文件
qemu-img create -f qcow2 myimage.qcow2 10G
#2-检查镜像文件的信息
qemu-img info myimage.qcow2
#3-调整镜像大小
qemu-img resize myimage.qcow2 +5G
#4-检查并修复镜像文件
qemu-img check -r all myimage.qcow2
#5-转换镜像文件格式(如将myimage.vmdk文件转为myimage.qcow2)
qemu-img convert -O qcow2 Rocky-9.5-x86_64.vmdk Rocky-9.5-x86_64.qcow2
#5.1-可将转换好的镜像文件导入创建虚拟机
cp /usr/share/edk2/ovmf/OVMF_VARS.fd /data/vmdisk/rocky9.5_VARS.fd
virt-install \
--virt-type=kvm \
--os-variant=rocky9.0 \
--name=rocky9.5 \
--description="开发使用的rocky9.5服务器---UEFI模式" \
--vcpus=2 \
--cpu host-model \
--memory 4096 \
--disk path=/data/vmdisk/Rocky-9.5-x86_64.qcow2,bus=virtio,cache=none,size=40 \
--network bridge=br0,model=virtio \
--noautoconsole \
--graphics vnc,port=5908,listen=0.0.0.0,password=qwer1234 \
--boot uefi,menu=on,firmware=/usr/share/edk2/ovmf/OVMF_CODE.fd,nvram=/data/vmdisk/rocky9.5_VARS.fd \
--import
#5.2-彻底删除rocky9.5虚拟机
virsh destroy rocky9.5 2>/dev/null
virsh undefine rocky9.5 --nvram --remove-all-storage 2>/dev/null
rm -f /data/vmdisk/Rocky-9.5-x86_64.qcow2 /data/vmdisk/rocky9.5_VARS.fd
virsh list --all | grep rocky9.5

