阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

KVM之实现批量创建KVM虚拟机

493次阅读
没有评论

共计 5505 个字符,预计需要花费 14 分钟才能阅读完成。

KVM 之通过 virsh 制作 image 实现批量创建 KVM 虚拟机

******* 通过 KVM 虚拟机 xml 模板文件创建虚拟机(制作一个 raw 格式的 image,并安装 Ubuntu 操作系统)******************
一、准备工作
1、准备一个 KVM 虚拟机配置文件模板
KVM 虚拟机配置文件模板文件已上传至附件:kvm_vm_raw_template.xml
复制一份虚拟机配置文件模板:kvm_vm_raw_template.xml
2、确定 image 的存储路径
3、创建 raw 格式的 image 文件
4、准备 ubuntu14.4 的 ISO 文件

二、定义 kvm_vm_raw_template.xml 虚拟机配置文件
注意:xml 文件中的所有“%%”均为变量,比如:%VM_NAME%
通过 sed 替换变量,这时候,虚拟机名称为:ubuntu14.04_temp

1、虚拟机整体信息配置
  <name>%VM_NAME%</name> 虚拟机名字
  <uuid>%UUID%</uuid>    UUID 值
  <memory>1048576</memory>    内存总大小,已 KB 为单位
  <currentMemory>1048576</currentMemory>    当前内存大小
  <vcpu>1</vcpu>    CPU 数量
配置如下:
sed -i “s,%VM_NAME%,ubuntu14.04_temp,g” ubuntu14.04.xml

通过 uuidgen 命令生成 UUID 值
uuid=`uuidgen`
sed -i “s,%UUID%,$uuid,g” ubuntu14.04.xml

2、系统信息配置
<os>
    <type arch=’x86_64′ machine=’pc-0.14′>hvm</type> 系统架构和机器类型,hvm 代表是基于硬件虚拟化,如要查看支持的机器类型:qemu-system-x86_64 -M ?
    <boot dev=’hd’/>    启动介质,首先使用 hard disk 作为首选启动介质,比如 cdrom,floppy
    <bootmenu enable=’yes’/>    是否开启启动选项菜单,虚拟机启动时可按 F12 进入启动菜单
  </os>

3、创建 image 文件和配置
3.1、创建一个 raw 格式 image
qemu-img create -f raw ubuntu14.04.raw 20G

sed -i “s,%IMAGE_PATH%,/datapool/vm/ubuntu14.04.raw,g” ubuntu14.04.xml

    <disk type=’file’ device=’disk’>
      <driver name=’qemu’ type=’raw’ cache=’none’/>
      <source file=’/datapool/vm/ubuntu14.04.raw’/>
      <target dev=’vda’ bus=’virtio’/>
      <address type=’pci’ domain=’0x0000′ bus=’0x00′ slot=’0x08′ function=’0x0’/>
    </disk>

4、挂载 ISO
    <disk type=’file’ device=’cdrom’>
      <driver name=’qemu’ type=’raw’ cache=’none’/>
      <source file=’/datapool/iso/ubuntu-14.04.3-server-amd64.iso’/> #指定 ISO 文件路径
      <target dev=’hda’ bus=’ide’/>
      <readonly/>
      <address type=’drive’ controller=’0′ bus=’1′ unit=’0’/>
    </disk>

5、虚拟网卡
随机生成 mac 地址命令:openssl rand -hex 6 | sed ‘s/(..)/1:/g; s/.$//’
40:d9:44:0c:55:ac

    <interface type=’bridge’>
      <mac address=’40:d9:44:0c:55:ac’/>
      <source bridge=’br100’/>
      <target dev=’vnet0’/>
      <alias name=’net0’/>
      <address type=’pci’ domain=’0x0000′ bus=’0x00′ slot=’0x03′ function=’0x0’/>
    </interface>

6、定义虚拟机
virsh define ubuntu14.04.xml    定义虚拟机,define 告诉 libvirt, 要被 libvirt 管理

# 查看虚拟机列表
root@kvmhost1:/datapool/vm# virsh list –all
 Id    名称                        状态
—————————————————-
 –    ubuntu14.04_temp              关闭

# 启动虚拟机
virsh start ubuntu14.04_temp

7、vnc 查看虚拟机,# 查看 VNC 端口
root@kvmhost1:/datapool/vm# virsh vncdisplay ubuntu14.04_temp   
:0

安装 vncviewer 工具
apt-get -y install vncviewer
vncviewer 192.168.89.3:0    连接,注意这里的 IP 地址为 br100 的 IP

8、接着开始安装操作系统,当操作系统和需要的软件安装好之后,将虚拟机关闭,并且将虚拟机 raw 格式 image 保存

至此,一个 raw 格式 image 文件就已经创建完成,而且操作系统也完成安装,等会利用 raw 格式的 image 作为 backing_file, 批量创建 qcow2 磁盘(作为虚拟机的磁盘)

*************************** 利用 raw 格式 image 作为 backing_file, 批量创建 qcow2 磁盘(作为虚拟机的磁盘)********************************
一、批量创建 ubuntu 虚拟机解决方案:
方案 1、手动安装,繁琐、蛋疼
方案 2、直接复制,复制已经安装好系统的 raw 格式 image 文件,需要创建多少台虚机就复制多少份,分别利用备份文件创建虚拟机,但主要的时间会花费在复制 image 上
方案 3、qcow2 快速创建,利用已经安装好系统的 raw 格式 image 文件作为 backing_file 文件,需要创建多少台虚机就复制多少份 qcow2 格式 image,再分别利用 qcow2 文件创建虚拟机,时间花费非常少

* 在这里选择方案 3
之前制作好的 raw 格式 image(操作系统已安装好),需要注意的地方:
1、尽量不要修改 image
2、不要直接利用这个 image 创建虚拟机
3、避免人为读写进程对这个 image 进行操作,比如挂载

二、开始编写批量创建脚本
1、脚本已经写完
脚本文件可参考:create_qcow2_vm.bash 脚本文件已上传至附件

2、利用这种方法建立起来的虚拟机,有如下问题:
2.1、主机名完全相同
2.2、虚拟机内存保存的 MAC 地址仍然是 backing_file 中 MAC 地址(经测试发现,较新版本的 KVM 不会出现 MAC 地址相同的情况)

解决方案:将 qcow2 image 挂载之后,再对主机名和 MAC 地址进行修改
1、挂载 qcow2 文件,首先需要安装依赖包 kpartx, 使用 kpartx 工具来挂载虚拟机磁盘镜像文件
2、使用 nbd 模块挂载 qcow2 文件(modprobe 命令用于智能地向内核中加载模块或者从内核中移除模块。modprobe 可载入指定的个别模块,或是载入一组相依的模块。modprobe 会根据 depmod 所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在 modprobe 会卸载整组的模块。)

#******************** 命令如下:***********************
apt-get -y install kpartx

# 激活 nbd 模块
modprobe nbd max_part=63

# 将 qcow2 文件挂载到 /dev/nbd0 设备(注意:如果 /dev/nbd0 被占用,可以使用 /dev/nbd1 设备)
qemu-nbd -c /dev/nbd0 ubuntu14.04_vm5.qcow2

# 处理 /dev/nbd0 下的分区
kpartx -a /dev/nbd0   

# 这里需要暂停一下
sleep 1

# 查看 qcow2 文件中的各种分区(这里看到带 nbd 字样的才是可挂载的分区,哪个分区是根分区需要尝试之后才能确定)
ls /dev/mapper

# 确定根分区
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# temp_file=`mktemp`
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# rm -rf $temp_file; mkdir -p $temp_file
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# mount /dev/mapper/nbd0p1 $temp_file
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# ls $temp_file/usr    #没有挂载的这个分区 /usr 这个目录,说明不是根分区
ls: 无法访问 /tmp/tmp.nmt6d15vlK/usr: 没有那个文件或目录
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# ls $temp_file    #查看了一下,这个估计是 /boot 分区
abi-3.19.0-25-generic  config-3.19.0-25-generic  grub  initrd.img-3.19.0-25-generic  lost+found  memtest86+.bin  memtest86+.elf  memtest86+_multiboot.bin  System.map-3.19.0-25-generic  vmlinuz-3.19.0-25-generic
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# umount $temp_file #取消这个分区的挂载 
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# mount /dev/mapper/nbd0p2 $temp_file #挂载 nbd0p2 分区
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# ls $temp_file #挂载成功后,查看分区的内容,原来这个就是根分区了
bin  boot  dev  etc  home  initrd.img  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  vmlinuz
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# ls $temp_file/usr    #这个分区有 /usr 目录
bin  games  include  lib  local  sbin  share  src

# 确保无误后,下面开始修改主机名
HOST_NAME=”vm5″
sed -i “s,127.0.0.1.*,127.0.0.1 $HOST_NAME,g” $temp_file/etc/hosts
echo $HOST_NAME > $temp_file/etc/hostname

# 修改 MAC 地址
经测试发现,较新版本的 KVM 不会出现 MAC 地址相同的情况,我的环境是 ubuntu14.04
下面是我批量创建的 4 台 VM,可以看出 MAC 地址真的没有重复,或许真的和版本有关系
vm4 fa:92:28:bd:1a:79
vm2 fa:92:15:28:d7:d5
vm3 fa:92:ad:51:87:54 
vm1 fa:92:38:68:52:e0

# 卸载挂载的分区(一定要注意卸载顺序)
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# umount $temp_file
root@kvmhost1:/datapool/vm/ubuntu14.04_vm5# qemu-nbd -d /dev/nbd

自此全部完成,就可以启动 qcow2 磁盘的虚拟机了

配置文件和脚本到

Linux 公社资源站下载:

—————————————— 分割线 ——————————————

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2016 年资料 /12 月 / 9 日 /KVM 之实现批量创建 KVM 虚拟机 /

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

—————————————— 分割线 ——————————————

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138112.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5505字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7985964
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...