ubuntu20通过virsh安装ubuntu虚拟机

ubuntu20通过virsh安装ubuntu虚拟机

1. 环境准备

宿主机环境为ubuntu-20.04桌面版。

1.1 安装qemu

新版ubuntu直接使用apt安装即可,无需手动编译qemu。

sudo apt-get install qemu
sudo apt-get install qemu-system

1.2 安装libvirt

安装3个软件包libvirt0、libvirt-daemon、libvirt-daemon-system
安装命令

sudo apt-get install 包的名称

如果不安装libvirt-daemon-system,会有如下错误,尽管安装了libvirt-daemon后/usr/sbin下已经有libvirtd。
在这里插入图片描述通过apt list --installed |grep libvirt,可以查看安装的libvirt相关的包。

1.3 下载iso镜像

使用的镜像为ubuntu-20.04.2-live-server-amd64.iso,复制下载链接使用迅雷下载速度会很快哦。值得一说,虚拟机是服务器版的系统,而宿主机是桌面版的。

2 使用virsh创建虚拟机

2.1 创建磁盘

qemu-img主要使用raw和qcow2两种格式的磁盘,磁盘的大小需考虑系统的大小,这里分了30G。

qemu-img create -f raw ubuntu.img 30G

格式化磁盘如下,也可以使用mkfs.ext4。

mkfs -t ext4 ubuntu.img

2.2 编写xml文件

virsh通过xml定义虚拟机,这里给出一种方案,相对来说还是比较简洁的。模拟器使用的是qemu-system-x86_64,有很多其他文章使用qemu-kvm,具体的目录得看安装在哪里。graphics的配置是为了提供vnc访问,这样可以登录到虚拟机。在首次安装时,,意思是从光盘启动。前面创建的磁盘还是空的,没有装系统,所以要从光盘启动安装系统。当系统安装完成后,同时注释光盘对应的磁盘描述。

<domain type='kvm'>
  <name>ubuntu-20.04</name>
  <memory unit='GiB'>4</memory>
  <currentMemory unit='GiB'>4</currentMemory>
  <vcpu>2</vcpu>
  <os>
   <type arch='x86_64' machine='pc-i440fx-4.2'>hvm</type>
   <boot dev='hd'/>
   <boot dev='cdrom'/>//在找不到硬盘启动时选择该项,也就是在第一次安装时使用该项
   <bootmenu enable='no'/>
  </os>
  <features>
   <acpi/>
   <apic/>
   <pae/>
  </features>
  <clock offset='localtime'/> 
  <on_poweroff>destroy</on_poweroff> 
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>   
   <emulator>/usr/bin/qemu-system-x86_64</emulator> 
   <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/home/pl/vm/ubuntu-20.04_disk/ubuntu.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
   </disk>
   
   <!-- <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/pl/vm/ubuntu-20.04_disk/ubuntu-20.04.2-live-server-amd64.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
   </disk> --> //仅在安装系统时使用,这里<!--   -->是xml文件特有的多行注释

  <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'> 
   <listen type='address' address='0.0.0.0'/>
  </graphics>//为了登录到虚拟机

  </devices>
</domain>

2.3 创建虚拟机

使用xml文件创建虚拟机,如下即可。

virsh define *.xml

然后,启动虚拟机。启动虚拟机用的是xml中描述的虚拟机的名称,启动成功会有提示。

virsh start ubuntu-20.04

如果要修改xml配置,那么就要先关闭虚拟机。然而,如果配置文件没有配置graphics,vnc通信没有建立,也没有其它可替代的通信方式,或者启动panic,virsh shutdown根本就不能关闭虚拟机,这时要找到虚拟机相关的进程kill强制结束才能关闭。

virsh shutdown ubuntu-20.04

使用vnc连接虚拟机。那么宿主机要安装vnc连接的程序,这里安装的gvncviewer。ubuntu20的apt-get没有vncviewer了,所以换成gvncviewer。查看虚拟机vnc端口,virsh vncdisplay ubuntu-20.04,说明使用端口0。
在这里插入图片描述使用vnc即可连接虚拟机,进入的页面正好是ubuntu安装的引导界面,安装即可。安装完成之后,要拔除cdrom,可是这里cdrom是虚拟的。直接shutdown虚拟机,修改xml为硬盘启动,再启动虚拟机即可。

gvncviewer 127.0.0.1:0

3 虚拟机配置网络

虚拟机配置网络的方式主要有两种,一种是桥接,一种是NAT接口。桥接方式虚拟机可以配置ip,外部网络可以访问虚拟机网络,虚拟机也可以共享主机物理网卡,这种方式可以用于登录虚拟机也可以访问外网。另外一种是NAT接口,虚拟机可以访问主机可以访问的外部网络。在主机xml文件中的配置方式如下:

<!--桥接方式-->
   <interface type='bridge'>   
      <mac address='fa:92:01:33:d4:fa'/> //不能和主机mac地址相同
      <source bridge='virbr0'/>  //主机中使用ifconfig查看
      <target dev='vnet0'/>     //同一网桥下相同,可以不设置
      <alias name='net0'/>      //别名,同一网桥下相同,可以不设置
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>  //注意slot值唯一,slot值会决定虚拟机网卡名称
   </interface>
<!--NAT方式,一般不需要使用该方式-->
   <interface type='network'>   //基于虚拟局域网的网络
     <mac address='52:54:00:52:70:9a'/>  //主机中使用virsh net-dumpxml default可以查看
     <source network='default'/> //默认是nat方式
     <model type='virtio'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>  //注意slot值
   </interface>

虚拟机网络配置,ubuntu18开始ubuntu系列使用netplan进行网络配置。相应的配置文件为*.yaml,不同环境有所差别。使用命令:netplan apply可以让配置生效。
在这里插入图片描述*.yaml的配置如下,ens3是网卡名称,在虚拟机上使用ifconfig或者ip link可以查看。注意对于virsh控制的虚拟机,地址一般都是192.168.122.?,其中?表示可选。而网关地址必须是virsh net-dumpxml default中显示的ip地址。

network:
  ethernets:
    ens3:
      addresses: [192.168.122.11/24]
      gateway4: 192.168.122.1
      nameservers:
        addresses: [8.8.8.8]
  version: 2

让ubuntu中的apt能使用正确的源可以使用如下配置:
/etc/apt/source.list

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse

如果需要配置代理可以在apt.conf中配置。

你可能感兴趣的:(linux,linux)