创建KVM虚拟机公共镜像

news2025/8/11 14:05:44

手动配置kvm教程:
https://blog.csdn.net/nvd11/article/details/127435990

但是毕竟每次创建新的虚拟机时,还要装一次系统比较麻烦。 打算做个公共的ubuntu镜像出来。

目标:

NoDESCcpu数内存
第一步创建虚拟机vm128g
第二步创建虚拟机镜像文件 ub_2204_com.qcow228g
第三步利用 第二步的镜像文件 创建虚拟机vm214g



第一步, 创建虚拟机vm1



1. 1 创建虚拟硬盘磁盘文件vm1.qcow2

gateman@MoreFine-S500:/link_home/vmdisks$ qemu-img create -f qcow2 vm1.qcow2 50G
Formatting 'vm1.qcow2', fmt=qcow2 size=53687091200 cluster_size=65536 lazy_refcounts=off refcount_bits=16

由于qcow2 文件大小会动态增长, 初始只有几百kb, 设大点没关系



1.2 准备vm1.xml

<domain type='kvm'>  //如果是Xen,则type=‘xen’
  <name>vm1</name> //虚拟机名称,同一物理机唯一
  <uuid>034a0980-b118-437d-9612-7fede1ccc738</uuid>  //同一物理机唯一,可用uuidgen生成
  <memory>8096000</memory>
  <currentMemory>8096000</currentMemory>  //memory这两个值最好设成一样
  <vcpu>2</vcpu>            //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l
  <os>
   <type arch='x86_64' machine='ubuntu'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?
   <boot dev='cdrom'/>  //启动介质,第一次需要装系统可以选择cdrom光盘启动
   <bootmenu enable='yes'/>  //表示启动按F12进入启动菜单
  </os>
  <features>
   <acpi/>  //Advanced Configuration and Power Interface,高级配置与电源接口
   <apic/>  //Advanced Programmable Interrupt Controller,高级可编程中断控制器
   <pae/>   //Physical Address Extension,物理地址扩展
  </features>
  <clock offset='localtime'/>  //虚拟机时钟设置,这里表示本地本机时间
  <on_poweroff>destroy</on_poweroff>  //突发事件动作
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>   //设备配置/
   <emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm
   <disk type='file' device='disk'> //硬盘
      <driver name='qemu' type='qcow2'/>
      <source file='/link_home/vmdisks/vm1.qcow2'/>
      <target dev='vda' bus='virtio'/>  // if windows must ide   else virtio
   </disk>
   <disk type='file' device='cdrom'>//光盘
      <driver name='qemu' type='raw'/>
      <source file='/link_home/isos/ubuntu-22.04.1-live-server-amd64.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
   </disk>
   /* 利用Linux网桥连接网络 */
   <interface type='bridge'>
      <mac address='24:85:52:42:b7:4d'/>
      <source bridge='br0'/>  //配置的网桥网卡名称
      <target dev='vnet0'/>     //同一网桥下相同
      <alias name='net0'/>      //别名,同一网桥下相同
   </interface>

  <graphics type='vnc' port='5901' autoport='yes' listen='0.0.0.0' keymap='en-us'>  //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0
   <listen type='address' address='0.0.0.0'/>
  </graphics>
  </devices>
</domain>

1.3 启动vm1

virsh define vm1.xml
virsh start vm1

1.4 安装 系统

这里当然选English啦
在这里插入图片描述

这里选最小安装
在这里插入图片描述

检查网卡能不能被正确分配同网段的ip, 如果分配失败则要检查宿主机的桥接网卡配置
在这里插入图片描述

这里选整块硬盘, 以后不用再加多块
![在这里插入图片描述](https://img-blog.csdnimg.cn/e74643d1e3ea4ad790a95042b7c48089.png
ssh 服务怎么可以没有
在这里插入图片描述


1.5 配置系统

安装完后, 还是需要配置系统的



1.5.1 安装vi

最小镜像连vi都没有…

sudo apt-get install vim



1.5.2 设置静态dhcp ip

方便以后管理, 当然每次创建虚拟机都要改下1个新的ip

gateman@admeuc-vm1:/etc/netplan$ cat 00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens3:
      dhcp4: false
      addresses: [10.0.1.156/24] # ip地址
      routes:
        - to: default
          via: 10.0.1.1           # 路由其地址
      nameservers:
        addresses: [119.29.29.29, 8.8.8.8]
  version: 2


sudo netplan apply



1.5.3 换成网易镜像源
gateman@admeuc-vm1:~$ cat /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
gateman@admeuc-vm1:~$ sudo apt-get update

到这里已经配置好了, 关机
在这里插入图片描述


第二步, 创建虚拟机镜像



2.1 进入虚拟机vmdisk 目录

复制一份新的qcow2 虚拟磁盘文件

gateman@MoreFine-S500:/link_home/vmdisks$ cp vm1.qcow2 ub_2204.qcow2
gateman@MoreFine-S500:/link_home/vmdisks$ ls -lh
total 21G
-rw-r--r-- 1 gateman      gateman 6.9G Nov 25 02:00 ub_2204.qcow2
-rw-r--r-- 1 libvirt-qemu kvm      20G Nov 25 02:00 vm0.img
-rw-r--r-- 1 root         root    6.9G Nov 25 01:57 vm1.qcow2
gateman@MoreFine-S500:/link_home/vmdisks$ qemu-img info ub_2204.qcow2 
image: ub_2204.qcow2
file format: qcow2
virtual size: 50 GiB (53687091200 bytes)
disk size: 6.86 GiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

可见最小化安装都用了6.9G, 怎么跟centos 比干净。。



2.2 压缩镜像

注意这个命令需要读取一些内核信息,所以必须用root来执行

gateman@MoreFine-S500:/link_home/vmdisks$ sudo virt-sparsify --compress ub_2204.qcow2 ub_2204_com.qcow2
[   0.0] Create overlay file in /tmp to protect source disk
[   0.0] Examine source disk
[   5.5] Fill free space in /dev/sda2 with zero
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[  33.2] Copy to destination and make sparse

[ 224.3] Sparsify operation completed with no errors.
virt-sparsify: Before deleting the old disk, carefully check that the 
target disk boots and works correctly.

gateman@MoreFine-S500:/link_home/vmdisks$ ls -lh
total 22G
-rw-r--r-- 1 root         root    1.1G Nov 25 02:20 ub_2204_com.qcow2
-rw-r--r-- 1 gateman      gateman 6.9G Nov 25 02:00 ub_2204.qcow2
-rw-r--r-- 1 libvirt-qemu kvm      20G Nov 25 02:21 vm0.img
-rw-r--r-- 1 root         root    6.9G Nov 25 01:57 vm1.qcow2
gateman@MoreFine-S500:/link_home/vmdisks$ 

压缩后我们得到1个1G多的镜像文件, 就是我们想要的所谓干净的系统镜像了。



第三步, 基于镜像创建虚拟机vm2



3.1 基于镜像创建1个新的硬盘文件

cp ub_2204_com.qcow2 vm2.qcow2



3.2 基于vm1.xml 创建 vm2.xml

同样, 我们需要
改内存
改名
改uuid
改硬盘文件位置
注释掉光驱启动项
改掉mac

gateman@MoreFine-S500:/link_home/kvmxmls$ virsh define vm2.xml
Domain vm2 defined from vm2.xml

gateman@MoreFine-S500:/link_home/kvmxmls$ cat vm2.xml
<domain type='kvm'>  //如果是Xen,则type=‘xen’
  <name>vm2</name> //虚拟机名称,同一物理机唯一
  <uuid>2d3be0e2-0441-49e8-a9e0-5147c8c2ec2a</uuid>  //同一物理机唯一,可用uuidgen生成
  <memory>4096000</memory>
  <currentMemory>4096000</currentMemory>  //memory这两个值最好设成一样
  <vcpu>1</vcpu>            //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l
  <os>
   <type arch='x86_64' machine='ubuntu'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?
   <bootmenu enable='yes'/>  //表示启动按F12进入启动菜单
  </os>
  <features>
   <acpi/>  //Advanced Configuration and Power Interface,高级配置与电源接口
   <apic/>  //Advanced Programmable Interrupt Controller,高级可编程中断控制器
   <pae/>   //Physical Address Extension,物理地址扩展
  </features>
  <clock offset='localtime'/>  //虚拟机时钟设置,这里表示本地本机时间
  <on_poweroff>destroy</on_poweroff>  //突发事件动作
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>   //设备配置/
   <emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm
   <disk type='file' device='disk'> //硬盘
      <driver name='qemu' type='qcow2'/>
      <source file='/link_home/vmdisks/vm2.qcow2'/>
      <target dev='vda' bus='virtio'/>  // if windows must ide   else virtio
   </disk>
   <disk type='file' device='cdrom'>//光盘
      <driver name='qemu' type='raw'/>
      <source file='/link_home/isos/ubuntu-22.04.1-live-server-amd64.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
   </disk>
   /* 利用Linux网桥连接网络 */
   <interface type='bridge'>
      <mac address='24:35:43:7e:c2:68'/>
      <source bridge='br0'/>  //配置的网桥网卡名称
      <target dev='vnet0'/>     //同一网桥下相同
      <alias name='net0'/>      //别名,同一网桥下相同
   </interface>
    <graphics type='vnc' port='5901' autoport='yes' listen='0.0.0.0' keymap='en-us'>  //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0
        <listen type='address' address='0.0.0.0'/>
  </graphics>

  </devices>
</domain>


3.3 启动vm2,改掉dhcp的网卡地址

在这里插入图片描述

3.4 改掉hostname

sudo hostnamectl set-hostname amdeuc-vm2

到这里大功告成

呵呵

其实上面3步无非是为了快速创建ubuntu虚拟机, 其实可以用1个命令代替

例如我想基于vm2 创建 同样的虚拟机vm3

virt-clone --original=vm2 \
               --name=vm3 \
               --file=/link_home/vmdisks/vm3.qcow2

只不过还是要自己去改掉hostname和 静态ip

至于为什么上面搞这么复杂。。 只是因为创建的公共镜像可以share~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第五章《类的继承》第1节:继承的概念与实现方式

继承是面向对象最显著的一个特性,它是以已存在的类为基础定义新类的技术,新的类可以继承已有类的属性和方法,也可以增加新的类成员。 5.1.1什么是继承 在现实生活中,一类事物往往都可以划分成更小的类别。例如:“人”就是一类事物,按照人的身份和职业,可以把人划分成学…

SSTV慢速扫描的几种模式优劣对比

下面使用的图片是我自己拍摄的照片,无版权问题 原图: 扫描环境: 家中客厅,窗户打开,窗外有鸟叫和人声.模拟了介于野外和户外之间的环境 ,两部设备相隔1厘米,音量35%,所有测试下来设备未移动. Martin1 模式 : 扫描时长: 1分55秒 扫描后图片 Martin2 模式 : 扫描时长: 58秒…

Pywinauto的安装及使用

目录 1.pywinauto简单介绍 2.pywinauto的安装 3. 通过启动windows自带记事本&#xff0c;检查是否可正常使用 1.pywinauto简单介绍 pywinauto是一组用于自动化测试脚本的python模块&#xff0c;用于自动化Microsoft Windows GUI。它允许将鼠标和键盘操作发送到windows对话框…

基于JSP的企业固定资产管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86466989 主要使用技术 SpringStruts2HibernateJSPCSSJSMysql 功能介绍 固定资产管理系统是对高校固定资产的一个信息化管理系统&#xff0c;基本功能包括&#xff1a; 对固定资产的购进、…

基于遥感和GIS技术的生态承载力评价的解决方案

生态承载力的概念最早来自于生态学。1921年&#xff0c;Park和Burgess在生态学领域中首次应用了生态承载力的概念&#xff0c;即在某一特定环境条件下&#xff08;主要指生存空间、营养物质、阳光等生态因子的组合&#xff09;&#xff0c;某种个体存在数量的最高极限。生态承载…

2023-2028年中国化肥行业市场需求预测与投资趋势分析报告

本报告由锐观咨询重磅推出&#xff0c;对中国化肥行业的发展现状、竞争格局及市场供需形势进行了具体分析&#xff0c;并从行业的政策环境、经济环境、社会环境及技术环境等方面分析行业面临的机遇及挑战。还重点分析了重点企业的经营现状及发展格局&#xff0c;并对未来几年行…

m分集2跳OFDM系统中基于功率分配和子载波配对算法的信道容量matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 随着当代无线通信事业的迅猛发展,无线频谱资源已显得越来越匮乏,传统固定静态的无线频谱分配模式和策略,很难为未来的无线通信事业的进一步发展提供更多可利用的无线频谱带宽和更高的频谱…

源码分析 Laravel 重复执行同一个队列任务的原因

发现问题 在 Laravel 中使用 Redis 处理队列任务&#xff0c;框架提供的功能非常强大&#xff0c;但是最近遇到一个问题&#xff0c;就是发现一个任务被多次执行&#xff0c;这是为什么呢&#xff1f; 先说原因&#xff1a; 因为在 Laravel 中如果一个队列&#xff08;任务&a…

Java项目:JSP民宿预订网站信息管理平台

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为前后台&#xff0c;包括管理员与普通用户两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,用户管理,会员管理,…

高斯消元总结

A-Matrix Equation_第 45 届国际大学生程序设计竞赛&#xff08;ICPC&#xff09;亚洲区域赛&#xff08;济南&#xff09;&#xff08;重现赛&#xff09; 自己写一个2维矩阵或者3维矩阵就可以发现对于每一列来说都是独立的&#xff0c;每一列的n个Cij都是都关系的&#xff0c…

Sentinel熔断降级

Sentinel熔断降级 1、介绍 官网地址&#xff1a;https://github.com/alibaba/Sentinel/wiki/熔断降级 Sentinel 提供以下几种熔断策略&#xff1a; 慢调用比例 (SLOW_REQUEST_RATIO)&#xff1a;选择以慢调用比例作为阈值&#xff0c;需要设置允许的慢调用 RT&#xff08;即最…

cesium for ue5中actor的cesium georeference组件的改变

今天&#xff0c;重新回顾下cesium for ue的教程&#xff0c;actor添加cesium georeference组件 发现在ue5中&#xff0c;没有这个组件了&#xff0c; 忍住卸载ue5&#xff0c;重新安装ue4.27的冲动&#xff0c;cesium的组件数量增多了&#xff0c;反而功能减少了&#xff…

hive的安装配置及使用

hive需要MySQL和hadoop的支持 文章目录hive需要MySQL和hadoop的支持安装完毕MySQL之后下载并解压hive添加系统环境变量配置hive修改 vim hive-env.sh修改hive-site.xml(1、简化配置&#xff08;推荐&#xff09;)修改hive-site.xml(2、在简化的基础上添加了部分配置)下载一个my…

Java项目:JSP药店药品商城管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;管理员登录后台&#xff0c;普通用户登录前台&#xff1b; 管理员角色…

VMware使用教程

文章目录下载软件安装软件新建虚拟机自定义安装下载软件 下载VMware软件&#xff08;应该是需要许可证/密钥的&#xff0c;时间长有点忘了&#xff0c;当然建议买&#xff0c;拒绝白嫖&#xff0c;保护产权&#xff08;可以直接百度搜doge&#xff09;&#xff09;。 安装软件…

Sentinel流控规则

Sentinel流控规则 1、基本介绍 资源名&#xff1a;唯一名称&#xff0c;默认请求路径(如&#xff1a;http://localhost:8089/testA) 针对来源&#xff1a;Sentinel可以针对调用者进行限流&#xff0c;填写微服务名&#xff0c;指定对哪个微服务进行限流 &#xff0c;默认defa…

Bioinformatics2021 | FraGAT+:基于分子原始片段的多尺度图注意力机制的分子性质预测模型

原文标题&#xff1a;FraGAT: a fragment-oriented multi-scale graph attention model for molecular property prediction 论文地址&#xff1a;FraGAT: a fragment-oriented multi-scale graph attention model for molecular property prediction | Bioinformatics | Oxfo…

Windows OpenGL ES 图像阴影

目录 一.OpenGL ES 图像阴影 1.原始图片2.效果演示 二.OpenGL ES 图像阴影源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…

SuperMap 云原生动态伸缩不可用该如何解决

最近碰到个别用户在ARM环境国产化操作系统中使用SuperMap iManager for K8S的时候出现服务节点伸缩不生效的问题。今天咱们就以此例来给大家讲解下如何解决该问题。 问题现象&#xff1a;在云套件服务节点管理中&#xff0c;设置伸缩为动态伸缩&#xff0c;设置阈值条件后&…

web前端-javascript-自增++和自减--(a++和++a,都在自身基础上+1,a--和--a都在自增基础上-1,自增和自减的练习)

文章目录自增和自减--1. 自增 1.1 通过自增可以使变量在自身的基础上增加1.2 对一个变量自增以后&#xff0c;原变量的值会立即自增 11.3 自增分为两种&#xff0c;&#xff1a;后(a) 和 前(a)2. 自减 --2.1 通过自减可以使变量在自身的基础上减 12.2 自减分成两种&#xff0c;…