跳转到正文
莫尔索随笔
返回

KVM 虚拟机创建指南:Ubuntu 系统下的 virt-install 实践

预计 3 分钟

第一时间捕获有价值的信号

本教程详细讲解了在 Ubuntu 系统中创建 KVM 虚拟机。通过 virt-install 命令,您将学会配置权限、设置参数并管理虚拟机生命周期,快速掌握 KVM 虚拟化技术。

核心内容

记上周末折腾 KVM 搭建好环境以后,这周终于有时间尝试创建虚拟机试试,我用的系统是ubuntu-16.04-server-amd64,所以安装途中的坑都以这个为准。

虚拟机创建

设置权限

为了让非 root 用户可以直接使用 virsh 命令管理虚拟机,需要将普通用户加入到 kvm 和 libvirt 用户组中,重新登录就会使新的用户组成员生效了:

$ sudo adduser <youruser> kvm
$ sudo adduser <youruser> libvirtd

注意: 添加到 libvirtd 用户组可能遇到错误 error : virPidFileAcquirePath:422 : Failed to acquire pid file '/var/run/libvirtd.pid': Resource temporarily unavailable 解决:

mv /var/run/libvirtd.pid /var/run/libvirtd.pid.old
systemctl stop libvirt-bin
systemctl start libvirt-bin

使用 virt-install 创建虚拟机

新手第一次推荐使用图形化界面创建虚拟机,建议使用 MobaXterm 连接服务器,原生支持x11,所以直接在shell中运行virt-manager就可以了。(我是直接在宿主机操作的,然后销毁,用 virsh-install 又尝试了一遍,毕竟 CLI 才是常态😂) 注意:

  • 选择英文系统,后面安装阶段会出现一个只有中文系统才存在的bug,没有找到解决的方案
  • 分区磁盘选项:选择向导-使用整个磁盘并设置LVM(这里开个坑,另起一篇详解LVM

其他步骤按照提示就可以了

$ virt-install \
# virt-type=kvm: 使用KVM作为虚拟机监视器
  --virt-type=kvm \
# name:虚拟机实例的名字
  --name=ubuntvm1 \
# ram: 指定虚拟机内存大小,单位是Mb
  --ram=512 \
# vcpus: 为虚拟机指定分配的虚拟CPU核数
  --vcpus=1 \
# os-variant: 指定虚拟机系统所属系列以优化虚拟机参数,可以通过命令osinfo-query os 来显示所有支持的系统列表,osinfo-query在包libosinfo-bin中 sudo apt-get install libosinfo-bin
  --os-variant=ubuntu16.04 \
# hvm: 启用全虚拟化,KVM虚拟机支持全虚拟化,属于优化性参数
  --hvm \
# cdrom: 指定作为虚拟机光驱内容的设备或文件,可以是主机的CDROM或者iso文件。
  --cdrom=/tmp/ubuntu-16.04-server-amd64.iso \
# 将虚拟机连接到主机网络,此处连接到一个名为defalut的虚拟网络(默认让虚拟机使用NAT模式上网),网卡模式设置为virtio。如果使用桥接模式,则改为network=bridge=br0,model=virtio即可  
  --network=default,model=virtio \
# 设置虚拟机的console并将其输出到VNC,这样就可以通过VNC来连接虚拟机了,可以指定vnc的端口和监听范围以及密码
  --graphics vnc \
# 指定虚拟机所使用的存储路径,大小为5G,disk bus类型为virtio,如果不指定fortmat,磁盘默认格式即为raw
  --disk path=/var/lib/libvirt/images/ubuntuvm1.qcow2,size=5,bus=virtio,format=qcow2
# 网络和磁盘建议都设置为virtio,virtio即启动优化的虚拟机专用IO驱动,性能更好。磁盘格式使用qcow2更好,因为qcow2格式即QEMU支持的QEMU Copy On Write磁盘格式,是优化后的磁盘格式,支持快照,并且是使用多少占用多少空间。这两种格式可以使用qemu-img进行转换,qemu-img在包qemu-utils中。

常用操作

# 查看虚拟机描述文进(xml文件)
ls /etc/libvirt/qemu
# 查看磁盘镜像文件       
ls /var/lib/libvirt/images
# 列出虚拟机
virsh list --all
# 查看指定虚拟机详细信息
virsh dominfo vm-name
# 查看virt-install所支持的OS参数列表
osinfo-query os

更改虚拟机名

# 关闭虚拟机
virsh shutdown vm-name 
# 导出域,并编辑replacename.xml文件,将里面的vmname全部替换成replacename
virsh dumpxml /etc/libvirt/qemu/vm-name > replace-name.xml 
# 通过虚拟机配置文件重新定义虚拟机
virsh undefine vm-name
virsh define replace-name.xml
# 编辑虚拟机xml文件
virsh edit vm-name

虚拟机生命周期管理

# 虚拟机开机/关机
virsh start/shutdown vm-name
# 挂起虚拟机
virsh suspend vm-name
# 软重启(安全重启,相当于在虚拟机内部点击重启选项)虚拟机
virsh reboot vm-name
# 硬重启虚拟机(不安全,有可能数据丢失,相当于强制按主机上的重启按钮)
virsh reset vm-name
# 强制关机
virsh destroy vm-name
# 移除虚拟机定义,即从虚拟机列表中移除虚拟机 该命令只是删除/etc/libvirt/qemu/目录下名为vm-name.xml的配置文件,并不会删除虚拟机磁盘文件
virsh undefine vm-name
# 设置/取消虚拟机随宿主机启动
virsh autostart [--disable] vm-name
# 登录虚拟机
virsh console vm-name

启用 virsh console 终端访问

使用 ssh 登录到 KVM 里的某个 ubuntu 16.04 虚机 ssh user@192.168.1.22 在 ubuntu 虚机里配置串口信息,执行下面的两个命令来启用虚机里的串口访问,这样就可以使用virsh console来创建出一个新的连接

$ sudo systemctl enable serial-getty@ttyS0.service
$ sudo systemctl start serial-getty@ttyS0.service

virt-clone 虚机克隆工具

Options(一些基本的选项): —version:查看版本 -h,—help:查看帮助信息 —connect=URI:连接到虚拟机管理程序 libvirt 的URI General Option(一般选项): -o ORIGINAL_GUEST, —original=ORIGINAL_GUEST:原来的虚拟机名称 -n NEW_NAME, —name=NEW_NAME:新的虚拟机名称 —auto-clone:从原来的虚拟机配置自动生成克隆名称和存储路径。 -u NEW_UUID, —uuid=NEW_UUID:克隆虚拟机的新的UUID,默认值是一个随机生成的UUID Storage Configuration(存储配置): -f NEW_DISKFILE, —file=NEW_DISKFILE:指定新的虚拟机磁盘文件 —force-copy=TARGET:强制复制设备 —nonsparse:不使用稀疏文件复制磁盘映像 Networking Configuration:(网络配置) -m NEW_MAC, —mac=NEW_MAC:设置一个新的mac地址,默认是一个随机的mac

virt-clone --connect=qemu:///system -o ubuntuvm1 -n ubuntuvm2 -f /var/lib/libvirt/images/ubuntuvm2.img

查看确认

$ virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     ubuntuvm2                      running
 3     ubuntuvm1                      running

MAC 地址

sudo grep "mac address" /etc/libvirt/qemu/ubuntuvm*
/etc/libvirt/qemu/ubuntuvm1.xml:      <mac address='52:54:00:c7:fa:c0'/>
/etc/libvirt/qemu/ubuntuvm2.xml:      <mac address='52:54:00:45:c8:a6'/>

其他工具

virt-v2v

virt-v2v是虚机格式迁移工具,将外部虚拟化平台上的虚拟机转化到KVM平台上运行,它可以读取在VMware、Xen和其他虚拟机管理程序上运行的Windows和Linux虚拟机。

virt-top

类似于linux系统下的top命令,可以显示所有虚拟机CPU、内存等使用情况,该工具需要单独安装sudo apt-get install virt-top

安全工具sVirt

参考链接

How to create and manage KVM virtual machines from CLI