技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录

下次自动登录
现在的位置: 首页KVM>正文
Linux下使用KVM虚拟机制作系统镜像模板
2025年07月15日 KVM 暂无评论 ⁄ 被围观 62次+

相关连接:

1、Rocky Linux 10.0下安装使用KVM虚拟机

2、Linux下使用KVM虚拟机安装Windows系统

在 KVM 虚拟化环境中,你可以将已经安装好的Linux虚拟机制作成系统镜像模板,供后续快速创建新虚拟机使用。

1、创建一个模板虚拟机

我们使用Rocky-10.0-x86_64-minimal.iso镜像来创建虚拟机

#创建虚拟机

virt-install \

--name rocky10 \

--vcpu 2 \

--memory 4096 \

--disk path=/data/libvirt/images/rocky10.qcow2,size=40,bus=virtio \

--cdrom /data/libvirt/iso/Rocky-10.0-x86_64-minimal.iso \

--network bridge=br0 \

--graphics vnc \

--os-variant rocky10 \

--noautoconsole

#虚拟机创建完成后,我们进入web控制台安装系统,直到系统安装完成

2、登录模板虚拟机中进行操作

#模板虚拟机中安装cloud-init工具

#cloud-init工具是实现自动化配置的工具

yum install cloud-init cloud-utils-growpart

#验证安装是否成功

rpm -qa | grep cloud-init

#查看版本

cloud-init -v

#启用cloud-init相关服务,不启动服务

systemctl enable cloud-init-local.service

systemctl enable cloud-init.service

systemctl enable cloud-config.service

systemctl enable cloud-final.service

#配置文件位于/etc/cloud目录,主配置文件为/etc/cloud/cloud.cfg‌

vi /etc/cloud/cloud.cfg

preserve_hostname: false #避免克隆出的虚拟机有相同主机名

:wq! #保存退出

#清除已有实例数据

执行rm -rf /var/lib/cloud/*

#清除ssh密钥

rm -f /etc/ssh/ssh_host_*

#清除缓存

cloud-init clean

#重置机器ID,这个配置特别适合需要批量部署相同配置但不同主机名的虚拟机场景。

truncate -s 0 /etc/machine-id

#网络配置保持DHCP模式

3、登录kvm宿主机操作

3.1关闭模板虚拟机

virsh list --all #查看虚拟机

virsh shutdown rocky10 #关闭

virsh destroy #或强制关闭(如果无法正常关机)

3.2清理模板虚拟机(移除临时文件、主机名等)‌

#清理模板虚拟机

virt-sysprep -d rocky10

#验证清理效果

virt-cat -d rocky10 /etc/machine-id

3.3将原始磁盘镜像转换为压缩优化的模板镜像

qemu-img convert -O qcow2 -c /data/libvirt/images/rocky10.qcow2 /data/libvirt/images/rocky10_template.qcow2

‌3.4使用模板创建新虚拟机

#编辑创建新虚拟机的执行脚本

vi create_vm_rocky10.sh

#!/bin/bash

#生成随机主机名和密码

HOSTNAME="rocky10-vm-$(date +%s | md5sum | head -c 4)"

#生成6位密码

PASSWORD=$(openssl rand -base64 9 | tr -dc 'A-Za-z0-9!@#$%^&*' | head -c6)

#创建cloud-init配置临时文件

cat > /tmp/user-data-${HOSTNAME} <<EOF

#cloud-config

hostname: ${HOSTNAME}

fqdn: ${HOSTNAME}

manage_etc_hosts: true

chpasswd:

list: |

root:${PASSWORD}

expire: false

ssh_pwauth: true

EOF

#显示生成的密码(生产环境建议记录到安全位置)

echo "VM ${HOSTNAME} 的 root 密码: ${PASSWORD}" | tee /tmp/vm_${HOSTNAME}_cred.txt

#定义虚拟机模板镜像,40GB

DISK_TEMPLATE=/data/libvirt/images/rocky10_template.qcow2

#定义虚拟机磁盘镜像目录

VM_DIR=/data/libvirt/images

#拷贝模板镜像为新的虚拟机磁盘镜像

cp $DISK_TEMPLATE $VM_DIR/${HOSTNAME}.qcow2

#扩容到60GB,文件系统仍然是40GB,需要在虚拟机内部扩展分区

#qemu-img resize $VM_DIR/${HOSTNAME}.qcow2 60G

#启动虚拟机

virt-install \

--name ${HOSTNAME} \

--memory 2048 \

--vcpus 2 \

--disk path=$VM_DIR/${HOSTNAME}.qcow2,size=40,bus=virtio \

--import \

--os-variant rocky10 \

--network bridge=br0 \

--graphics vnc \

--noautoconsole \

--cloud-init user-data=/tmp/user-data-${HOSTNAME}

:wq! #保存退出

chmod +x create_vm_rocky10.sh #添加执行权限

sh create_vm_rocky10.sh #执行脚本创建新虚拟机

3.5登录到web控制台可以看到刚才创建的虚拟机

输入虚拟机账号密码即可登录到虚拟机内部。

可以继续执行创建脚本,继续创建新的虚拟机。

扩容虚拟机:

登录到虚拟机里面进行操作

#修复 GPT 分区表

parted -l /dev/vda

fdisk -l

再对磁盘进行扩容操作

至此,Linux下使用KVM虚拟机制作系统镜像模板完成。

     

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2025 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接
陕ICP备11001040号-3