云计算&虚拟化-kvm-克隆(clone)虚拟机

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

虚拟化,简单来说就是把一台服务器/PC电脑,虚拟成多台独立的虚拟机,每台虚拟机之间相互隔离,每个虚拟机都有自己独立的操作系统,磁盘,网络资源。虚拟化是一个很庞大的系统,我的介绍主要是帮助你入门,让你了解基本技术原理,具备搭建操作虚拟化的能力。由于涉及到内容较多,这里的目录就只是以简单分类介绍和说明,不再针对单个小节进行目录列出,主要涉及的分类包括以下几个方面:

1.虚拟化介绍

2.kvm基本使用

3.kvm进阶使用(本小节属于)

4.kvm技术原理

5.vmware介绍&使用

6.小结

通过前面的学习,我们已经掌握了创建虚拟机及安装虚拟机的操作,但是我们总不能每创建一个虚拟机都去手工安装一次系统,而且还要对每台虚拟机做一次初始化操作。我们有什么办法可以把系统安装+初始化都封装到一起,然后后面创建虚拟机都基于这个模板创建,加快效率呢?这个就是本小节要讲解的内容,克隆(clone)虚拟机。

  1. 什么是 KVM 克隆
  • KVM(Kernel - Based Virtual Machine)克隆是指在 KVM 虚拟化环境下,通过复制现有虚拟机(源虚拟机)的配置和磁盘数据来创建新虚拟机的过程。这就好比复制一份已有的计算机系统,包括操作系统、应用程序和数据等,以快速创建多个相似的虚拟机实例。
  1. 克隆的类型
  • 全量克隆(完整克隆):

  • 全量克隆会创建一个源虚拟机的完整副本。它复制源虚拟机的所有磁盘内容、配置信息等,生成一个全新的、独立的虚拟机。新虚拟机和源虚拟机在初始状态下几乎完全相同,包括操作系统、已安装的软件、用户数据等。这种克隆方式就像是完全复制了一台物理计算机,新虚拟机有自己独立的磁盘空间,后续对新虚拟机的操作不会影响源虚拟机,反之亦然。

  • 链接克隆(增量克隆):

  • 链接克隆则是一种更节省磁盘空间的克隆方式。它创建的新虚拟机与源虚拟机共享大部分磁盘数据。新虚拟机在初始时只记录与源虚拟机的差异部分,只有当新虚拟机需要修改数据时,才会在自己的磁盘空间中创建新的数据块。这种方式适合创建大量相似的虚拟机,因为它可以大大减少磁盘空间的占用。

  • 简单来说,全量克隆会复制一个新文件和原来文件一样大,链接克隆则不会,他只会产生一个新的连接文件,底层文件和原来的镜像共享。

3.KVM克隆(clone)命令

arduino 复制代码
virt-clone -o vm1 -n vm2 --file /data/image/vm2
  • -o 是原始虚拟机(需要处于关机状态)

  • -n 是新虚拟机

  • --file 是新虚拟机磁盘文件(需要不存在)

确保uuid不冲突

xml 复制代码
[root@localhost qemu]# cat  rocky31.197* |grep uuid -i  
<uuid>d594982d-4b82-4c93-85b3-f6f94899149b</uuid>
<uuid>8e60047d-b2eb-4393-965d-a4196eeadcff</uuid>

确保mac地址不冲突

ini 复制代码
[root@localhost qemu]# cat  rocky31.197* |grep mac -i
    <type arch='x86_64' machine='pc-q35-rhel9.4.0'>hvm</type>
      <mac address='52:54:00:f3:8f:43'/>
    <type arch='x86_64' machine='pc-q35-rhel9.4.0'>hvm</type>
<mac address='52:54:00:19:9e:bf'/>

这样我们就可以预先创建一个虚拟机,并按照我们的要求进行初始化,然后以后创建虚拟机都基于这个模板来创建,我们的创建的虚拟机就可以使用,不用安装系统,也不用做初始化操作。实际上公有云也就是类似操作方式,只是他还会涉及到一个cloud-init的初始化组件,这个我们后面会单独来讲。

这个克隆的主机和原始主机一样,如果系统里面有些配置是固定的,比如ip地址则克隆出来的ip也和以前的ip地址一样,克隆完成以后需要对这些信息进行修改。公有云所有ip地址都是dhcp,没有使用固定ip,也许有这个考量。

4.手工克隆

严格来说,这个可能不叫克隆,应该叫复制好一点。也就是复制虚拟机的xml文件和镜像文件,然后修改这个xml里面需要修改的内容,包括名字,uuid,镜像文件,mac地址,然后在执行重新定义命令。

bash 复制代码
#复制xml文件
cp /etc/libvirt/qemu/vm1.xml /etc/libvirt/qemu/vm2.xml

#复制镜像文件,具体路径以现场为准
cp /data/image/vm1.qcow2 /data/image/vm2.qcow2

#修改名字,uuid,镜像文件路径,mac,其他根据需要修改
vi /etc/libvirt/qemu/vm2.xml

#重新定义虚拟机
virsh destroy /etc/libvirt/qemu/vm2.xml

#这样配置就完成,可以启动和查看

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
坏柠26 分钟前
使用内网穿透工具,为树莓派配置公网地址实现远程ssh
运维·ssh
花晓木1 小时前
SSH无法启动问题:OpenSSL version mismatch. Built against 30000070, you have 30200020
linux·运维·ssh
vvw&1 小时前
如何在 Ubuntu 22.04 上安装并开始使用 RabbitMQ
java·linux·运维·服务器·spring·ubuntu·rabbitmq
Tfly__1 小时前
ubuntu 18.04安装GCOPTER(最新)
linux·c++·ubuntu·github·ros·无人机·运动规划
小白也有IT梦1 小时前
Ubuntu 系统配置指南:Fcitx5 输入法与 KDE 桌面环境安装教程
linux·ubuntu
数巨小码人1 小时前
vim文本编辑器常用命令和快捷键
linux·编辑器·vim
皓月盈江2 小时前
Linux Debian安装ClamAV和命令行扫描病毒方法,以及用Linux Shell编写了一个批量扫描病毒的脚本
linux·运维·ubuntu·debian·clamav·开源杀毒
steveqobs2 小时前
Debian-linux运维-locale配置(locale failed)
linux·运维·debian
hahaqi95272 小时前
uniapp生成h5后发布到服务器碰到的问题解决
运维·服务器·uni-app
女王の专属领地2 小时前
产品初探Devops!以及AI如何赋能Devops?
运维·devops