手动配置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~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐