KVM之实现批量创建KVM虚拟机(2)

*在这里选择方案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公社资源站下载:

------------------------------------------分割线------------------------------------------

免费下载地址在

用户名与密码都是

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

下载方法见

------------------------------------------分割线------------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/79a135a42b20e6b7b66d44cc7ffd90a5.html