说明:本人不喜欢图形化界面,太臃肿,所有都是在命令行里进行的操作,特此记录!

首先是安装

安装前检查环境这里就不赘述了,参考这篇:Ubuntu 22.04 之 KVM 安装手札.
前提:这里是在root权限下进行的操作,普通用户需要sudo
apt install -y qemu-kvm libvirt-daemon-system virtinst libvirt-clients bridge-utils.

  • qemu-kvm : 一个提供硬件仿真的开源仿真器和虚拟化包
  • libvirt-daemon-system : 为运行 libvirt 进程提供必要配置文件的工具
  • virtinst : 一套为置备和修改虚拟机提供的命令行工具
  • libvirt-clients : 一组客户端的库和API,用于从命令行管理和控制虚拟机和管理程序
  • bridge-utils : 一套用于创建和管理桥接设备的工具

对应的相关服务在安装后会自动拉起来,也可以参考链接进行检查。

普通用户在需要管理虚拟机时倘若没有权限,则需要将对应用户添加至用户组:

1
2
usermod -aG kvm your_user
usermod -aG libvirt your_user

创建网桥

以下是修改后的/etc/netplan/xxxxxx.yaml文件,注意后面bridges下的内容是需要手动添加的,其他的是默认就有的,照猫画虎即可

1
2
3
4
5
6
7
8
9
network:
ethernets:
enp1s0:
dhcp4: true
bridges:
br0:
interfaces: [enp1s0]
dhcp4: false
version 2

准备创建虚拟机

这里需要准备两个,一个是你要安装的系统镜像,另一个是虚拟磁盘

前备芝士

  • 虚拟机可以使用虚拟磁盘和物理磁盘,其中虚拟磁盘本质是宿主机的一个文件
  • 常用的虚拟磁盘格式是qcow2和raw这两种
    • qcow2 : 特点是动态大小和支持压缩,动态大小理解为创建20G大小,但是实际用了200M,则占用空间就是200M。用于宿主机空间紧张情况,代价是IO效率低于raw
    • raw : 特点是直接读写,IO效率高,但是创建多大就会占用多大的空间

镜像自己下载,这里主要说明虚拟磁盘的创建

1
2
qemu-img create -f qcow2 virdisk 20G
qemu-img create -f raw virdisk2 20G

这里的virdisk是个名字,按自己喜好起就可以,后面20G是大小,单位常用的是M和G

创建虚拟机

再次说明,倘若需要图形化,则参考上面大佬的教程即可,这里是命令行方式
virt-install --name test1 --memory 4096 --vcpus=2 --os-info ubuntu22.04 --graphics vnc,password=123456,listen=::,port=5910 --network bridge=br0 --disk path=/your/path/virdisk2,size=50 --cdrom /your/path/ubuntu.iso
参数说明:

  • --name : 虚拟机的名字,自己喜好就行
  • --memory : 给虚拟机分配的内存,不能等于和高于你设备的内存,建议不要超过一半
  • --vcpus : 给虚拟机分配的cpu个数,怎么查看自己的cpu个数和内存大小自己百度
  • --os-info : 要安装的os信息,也就是说你要选择对应你下载的os进行填写这个值,可以通过virt-install --os-info list 进行查询当前版本支持的类型
  • --graphics : 该参数可以用来设置vnc界面信息,因为安装时需要用该窗口进行操作虚拟机内部
  • --network : 用来设置网桥,也就是虚拟机网络接口,参数名称和上面创建的网桥名称要一致
  • --disk : 上面准备阶段所创建的虚拟磁盘的路径,以及它的大小
  • --cdrom : 你要安装的那个系统镜像的路径

这里埋个坑,有的参数值我用的是空格,有的是等号,什么时候用等号,什么时候用空格,后面有空了整一篇

参数确认无误后就可以进行安装了,倘若报错,则需要检查,一般是参数问题或者文件权限问题导致的无法安装,之前的报错没有保留记录,后面遇到了再补充
一般是虚拟磁盘和镜像文件的权限或者属主不合适会导致
倘若一切顺利,则该命令会卡住等待 接着执行下一步即可

安装虚拟机里的系统

此时需要使用vnc工具(可以在其他图形化界面平台进行操作,这里操作是必须的,不要杠)进行连接到刚刚创建好的虚拟机,连接方法自行百度

  • vnc连接的ip是你宿主机的ip,linux下可以通过ip a进行查看
  • vnc使用的端口是5901,倘若有防火墙的话则需要放通,不然无法访问
  • 登陆密码就是上述命令设置的123456
    vnc登陆成功后就可以看到自己镜像的操作系统安装界面了,自己操作安装完成后会重启
    重启后创建虚拟机的命令才会返回,表示虚拟机创建并安装完成
    到此为止,整个虚拟机创建和安装过程结束!!!

Tips: 如果你觉得很复杂,那么慢慢学吧

以下是常用的命令行操作

1
2
3
4
5
6
7
virsh list --all    # 列出当前所有的虚拟机,如果不加--all则只列出启动的
virsh start test1 # 启动虚拟机
virsh reset test1 # 重启虚拟机
virsh destroy test1 # 关闭虚拟机,相当于强制关机
virsh edit test1 # 编辑虚拟机的xml文件,里面可以设置虚拟机的各项配置,包括cpu,内存等等,倘若不懂,不要随意修改
# 这里注意一点,修改完xml文件后如果要使其生效,则需要触发start动作,start才会重新加载xml文件,可以先destroy掉然后在start,又或者虚拟机里面关机,然后宿主机里start都可以
virsh autostart test1 # 设置虚拟机在宿主机启动时自动启动

虚拟机挂载物理磁盘

在安装过程中有指定虚拟磁盘,相同的也可以指定物理磁盘,创建时写物理磁盘路径即可,那如果已经安装好了,如何挂载已有的物理盘呢
此时需要编辑对应虚拟机的xml文件
使用virsh edit test1命令进行编辑xml文件,找到disk区域,添加以下内容

1
2
3
4
5
<disk type='block' device='disk'>
<driver name='qemu' type='raw'/>
<source dev='/dev/vg_server/devp_opt'/>
<target dev='sdb' bus='virtio'/>
</disk>

这里需要修改的事source那一行,dev就是对应的设备,也就是你的物理磁盘。target那一列的dev需要修改,不要和当前xml里已有的设备名称冲突就行