准备工作
首先需要检查一下CPU是否支持虚拟化,执行一下命令来检查/proc/cpuinfo文件中是否又虚拟化相关的字眼,如果有的话表明CPU支持虚拟化技术。
1 | egrep -c '(svm|vmx)' /proc/cpuinfo |
上面命令执行结果如果返回0,表示CPU不支持虚拟化技术。当然主板BIOS中的虚拟化技术也可能不是默认开启的,如果没有开启需要手动开启一下。
安装KVM
执行以下命令安装KVM
1 | sudo apt update |
然后执行下面的命令看KVM是否安装成功
1 | kvm-ok |
输出如下:
1 | INFO: /dev/kvm exists |
如果输出是这样:
1 | INFO: Your CPU does not support KVM extensions |
这表明你的CPU不支持硬件虚拟化。 这时你还是可以跑虚拟机,不过会非常慢。如果你的CPU支持硬件虚拟化, 但BIOS没有打开,也会提示给你的
查看kvm内核模块是否已加载
1 | sudo lsmod | grep kvm |
若KVM内核没加载执行下面命令加载:
1 | sudo modprobe kvm |
打开一个命令行窗口, 输入以下命令启动虚拟机管理程序
1 | birt-manager |
将libvirtd添加自启动
1 | sudo systemctl start libvirtd.service |
网络模式
KVM安装完成后,首先需要进行网络设定,KVM支持四种网络模式:
- 桥接模式
- NAT模式
- 用户网络模式,即创建 vm 时默认的网络模式
- 直接分配设备模式
桥接(Bridge)模式
在桥接模式下,宿主机和虚拟机共享同一个物理网络设备,虚拟机中的网卡和物理机中的网卡是平行关系,所以虚拟机可以直接接入外部网络,虚拟机和宿主机有平级的IP。 原本宿主机是通过网卡eth0连接外部网络的,网桥模式会新创建一个网桥br0,接管eth0来连接外部网络,然后将宿主机和虚拟机的网卡eth0都绑定到网桥上。使用桥接模式需要进行以下操作:
编辑/etc/network/interfaces,增加如下内容1
2
3
4
5auto br0
iface br0 inet dhcp # 网桥使用DHCP模式,从DHCP服务器获取IP
bridge_ports enp3s0 # 网卡名称,网桥创建前连接外部的网卡,可通过ifconfig命令查看,有IP地址的就是
bridge_stp on # 避免数据链路出现死循环
bridge_fd 0 # 将转发延迟设置为0
接下来需要重启networking服务(如果是通过SSH连接到宿主机上的,这一步会导致网络中断,如果出现问题可能导致连不上宿主机,最好在宿主机上直接操作)
1 | systemctl restart networking.service |
使用ifconfig命令查看IP是否从enp3s0(网桥创建前的网卡)变到了br0上,如果没有变化则需要重启。如果宿主机ip已经成功变到网桥上,并且宿主机能正常上网而虚拟机获取不到ip,可能是ufw没有允许ip转发导致的,编辑/etc/default/ufw
允许ip转发。
1 | DEFAULT_FORWARD_POLICY="ACCEPT" |
重启ufw服务让设置生效
1 | systemctl restart ufw.service |
NAT(Network Address Translation)模式
NAT模式是KVM默认的网络模式,KVM会创建一个名为virbr0的虚拟网桥,但是宿主机和虚拟机对于网桥来说不是平等的了,网桥会把虚拟机藏在背后,虚拟机会被分配一个内网IP,而从外网访问不到虚拟机。
安装Linux虚拟机
使用如下命令安装安装Linux虚拟机
1 | sudo virt-install -n ubuntu_3 |
安装Windows 10虚拟机
安装Windows 10虚拟机会出现没有virtio驱动的问题,导致安装程序找不到硬盘,需要先下载virtio驱动。
1 | https://fedoraproject.org/wiki/Windows_Virtio_Drivers |
创建虚拟机时,将其加入到CD-ROM中
1 | sudo virt-install -n win10 |
使用VNC客户端连接虚拟机
执行以下命令查看虚拟机的列表
1 | sudo virsh list |
通过上一步查处的虚拟机列表,查看单台机器的VNC端口
1 | sudo virsh vncdisplay ubuntu_3 # ubuntu_3是虚拟机名称 |
知道了VNC端口号,就可以使用VNC客户端连接到虚拟机完成安装了。
QEMU内部用户模式网络
用户模式网络(默认的网络模式)完全由qemu实现,不依赖其他工具,是qemu使用slirp实现的一整套TCP/IP协议栈,并使用这个协议栈实现了一整套虚拟的NAT网络
这种方式优点在于简单、独立性好、不需要root权限,但存在以下三个缺点
- 性能较差
- 不支持部分网络功能,例如ICMP协议
- 不能从宿主机和外部网络访问客户机