【版本】
当前版本号v20221105
版本 | 修改说明 |
---|---|
v20221105 | 增加常见问题3 |
v20221015 | 增加更多的说明和导航标题,增加常见问题解决办法 |
v20221014 | 增加常见问题,解决apic不支持的问题和一些命令错误 |
v20220408 | 修复切换到D盘的命令 |
v20211011 | 增加网卡配置说明 |
v20211005 | 修正centos-vm的网络配置 |
v20211003 | 修正cirros的网卡配置代码 |
v20210930 | 增加一些命令说明 |
v20210928 | 增加 VMWare Workstation 和 AMD CPU的相关命令和说明 |
v20210915 | 初始化版本 |
【实验名称】实验3.1 KVM 的安装使用
【实验目的】
- 掌握KVM的安装和使用
【实验环境】
- CentOS 7.X
- FinalShell
【实验资源】
- cirros 磁盘文件。
- vnc viewer
链接:https://pan.baidu.com/s/1kw7nT7dbonUTSlPqIHVwhQ
提取码:heis
【实验步骤】
开启虚拟化嵌套
如果你使用的是VMWare Workstation Pro,仅需要勾选以下选项,请忽略步骤1-3。
- 启用虚拟化配置。使用管理员权限进入 Windows 系统的命令行
- “Win+R”键可以快速调出运行窗口
- 输入“cmd”、
- 同时按下“Ctrl+Shift+ENter”键启动管理员权限的命令行窗口
- 在 Windows 的命令行窗口输入以下命令。
- 修改以下
D:\"Program Files (x86)"\Oracle\VirtualBox
路径为你的 Virtualbox 安装路径。
d:
cd D:\"Program Files (x86)"\Oracle\VirtualBox
如果你安装在d盘,需要先输入
d:
切换到D盘,再运行 cd 命令 VirtualBox 的安装路径可以通过桌面的 VirtualBox 快捷方式打开
- 执行以下命令启用你的虚拟机的虚拟化扩展特性。以下"Tmpl"需要修改为你的虚拟机名称。
VBoxManage.exe modifyvm "Tmpl" --nested-hw-virt on
- 打开 Virtualbox,查看虚拟化选项是否已经启用。
提升虚拟机CPU和内存配置
- 为了运行 KVM 虚拟机避免卡顿,修改虚拟机的处理器数量为2。内存为2G。
检查 CPU 是否支持虚拟化特性
启动虚拟机,打开 FinalShell,使用 root 用户进行登录。
查看是否有内容输出
grep 'vmx\|svm\|lm' /proc/cpuinfo
- 正常输出类似以下信息,如果有信息输出带有 vmx 或者 svm 字符(FinalShell 会标红色),就说明支持虚拟化指令;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机。
- 一般英特尔(Intel)的 CPU 会有 vmx 字符输出;AMD 的 CPU 会有 svm 字符输出;lm(KVM仅支持x84_64平台,lm即64位)
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq monitor vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single tpr_shadow flexpriority fsgsbase avx2 invpcid rdseed clflushopt md_clear flush_l1d
加载 KVM 模块
- 确保BIOS里开启虚拟化功能,查看是否已加载KVM模块。
modprobe kvm
lsmod | grep kvm
- 正常情况下输出以下信息,均属于正常输出。
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
kvm_amd 170086 0
kvm 566340 1 kvm_amd
irqbypass 13503 1 kvm
kvm 637289 0
irqbypass 13503 1 kvm
安装桥接网络工具
- 安装桥接网络工具,用于配置桥接网络。
yum -y install bridge-utils
- 重启系统网络服务
systemctl restart network
关闭防火墙和一些安全设定
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl stop 表示后台停止服务 systemctl start 表示后台启动服务 systemctl disable 表示禁止开机启动服务 systemctl enable 表示允许开机启动服务
- 查看防火墙状态是否关闭(inactive)
systemctl status firewalld
- 关闭 SELinux
setenforce 0
安装 KVM 和相关管理工具
- 安装 KVM 和相关管理工具
yum install qemu-kvm libvirt qemu-kvm-tools qemu-img virt-install virt-manager virt-viewer -y
- 启用 libvirtd 服务。
systemctl enable libvirtd
systemctl start libvirtd
systemctl status libvirtd
libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。 libvirtd 是服务器端 libvirt 的后台服务进程。
- 检查 KVM 是否安装成功。运行以下命令查看虚拟机系统列表。
virsh -c qemu:///system list
- 正常情况会返回
Id Name State
----------------------------------------------------
配置网桥网络
- 接下来我们将配置网卡的桥接,用于连接KVM上的虚拟机。首先进入以下目录。
cd /etc/sysconfig/network-scripts/
- 查看你的网卡名称。
ls |grep ifcfg-
- 复制你当前网卡配置文件。其中
ifcfg-enp0s3
替换为你的网卡名称(通常使用VMWare Workstation 的默认网卡配置名称为 ifcfg-ens33)。
cp ifcfg-enp0s3 ifcfg-br0
- 修改复制出来的
ifcfg-br0
网卡配置文件,配置为桥接网卡。
vi /etc/sysconfig/network-scripts/ifcfg-br0
- 修改
TYPE="Ethernet"
为TYPE="Bridge"
- 修改
NAME="enp0s3"
为NAME="br0"
- 修改
DEVICE="enp0s3"
为DEVICE="br0"
- 在
UUID=
这一行行首添加#
进行注释
修改以后内容类似以下:
TYPE="Bridge"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0"
#UUID="015214e3-3bda-4a8c-b201-05168f20343b"
DEVICE="br0"
ONBOOT="yes"
IPADDR="10.0.0.70"
PREFIX="24"
GATEWAY="10.0.0.254"
DNS1="223.5.5.5"
IPV6_PRIVACY="no"
桥接网卡:桥接技术通常用于给网卡再生成一个逻辑网口,可以让虚拟机连接新的网口。
- 修改
ifcfg-enp0s3
网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
- 在第2行新增一行,输入
BRIDGE=br0
- 在
IPADDR=
这一行行首添加#
进行注释 - 在
PREFIX=
这一行行首添加#
进行注释 - 在
GATEWAY=
这一行行首添加#
进行注释 - 在
DNS1=
这一行行首添加#
进行注释
修改以后内容类似以下:
TYPE="Ethernet"
BRIDGE=br0
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s3"
UUID="015214e3-3bda-4a8c-b201-05168f20343b"
DEVICE="enp0s3"
ONBOOT="yes"
#IPADDR="10.0.0.70"
#PREFIX="24"
#GATEWAY="10.0.0.254"
#DNS1="223.5.5.5"
IPV6_PRIVACY="no"
- 重启系统网络服务
systemctl restart network
- 查看桥接网卡
brctl show
brctl 是以太网桥接管理命令
- 正常情况会显示类似信息
bridge name bridge id STP enabled interfaces
br0 8000.080027b70551 no enp0s3
virbr0 8000.525400e4b791 yes virbr0-nic
- 查看所有网卡信息
ifconfig|grep 'br0\|enp0s3'
没有此命令可以通过
yum install net-tools -y
来安装
- 正常情况下可以看到以下输出,多出来了
br0
和virbr0
网卡。其中br0
是我们新建的桥接网卡。virbr0
是 KVM 创建的虚拟桥接网卡。 - 三个网卡的状态都应该是UP,表示正常工作状态。
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
新建 KVM 虚拟机 cirros
- 新建一个目录用于保存 KVM 虚拟机文件,并开放授权访问。
mkdir /kvm-images
chmod 777 /kvm-images
- 进入
/kvm-images
目录,上传cirros-0.4.0-x86_64-disk.img
镜像文件。
cd /kvm-images
rz
rz 命令用于上传文件,如果没有可以用以下命令安装
yum install lrzsz -y
- 修改
cirros-0.4.0-x86_64-disk.img
镜像文件权限。
chmod 777 /kvm-images/cirros-0.4.0-x86_64-disk.img
CirrOS 是一个迷你的 Linux 镜像,启动非常快,通常用于虚拟机测试。
- 使用KVM 创建一个虚拟机。
virt-install --connect=qemu:///system --name=cirros --ram=256 --vcpus=1 --disk path=/kvm-images/cirros-0.4.0-x86_64-disk.img,format=qcow2 --import --bridge=br0 --vnc --vncport=5920 --vnclisten=0.0.0.0 --check path_in_use=off
命令解析:–name=虚拟机名称 –ram=内存大小 –vcpus=虚拟处理器核数 –disk path=虚拟磁盘地址 format=磁盘格式 –bridge=连接的网桥 –vncport=VNC的连接端口 –vnclisten=VNC监听地址
创建过程中如果出现“ERROR unsupported format character ‘�’ (0xffffffe7) at index 47”,请忽略,这是软件的bug,不会影响创建的结果。
- 使用命令查看
cirros
虚拟机的状态。
virsh list --all
- 如果
cirros
虚拟机的状态为关闭,可以使用以下命令启动。
virsh start cirros
- 使用以下命令查看
cirros
虚拟机的VNC服务器进程端口5920
是否有信息输出。
yum install net-tools -y
netstat -tulpn|grep 5920
在宿主机 Windows 系统安装 VNC Viewer,过程略。
打开 VNC Viewer, 输入
10.0.0.70:5920
(注意这里的英文的冒号!)进行连接。在 VNC Viewer 使用以下账号登录
cirros
虚拟机。
用户名:cirros
密码:gocubsgo
- 修改
cirros
网卡设置。注意以下命令是在 VNC Viewer 下执行。
sudo vi /etc/network/interfaces
- 修改网卡配置。注意以下命令是在 VNC Viewer 下执行。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.0.71
netmask 255.255.255.0
gateway 10.0.0.254
- 重启网卡。注意以下命令是在 VNC Viewer 下执行。
sudo ifdown eth0 & sudo ifup eth0
- 回到
Finalshell
,在宿主机CentOS
输入以下内容,测试能否连通cirros
。
ping 10.0.0.71
提示:ping命令可以使用
Ctrl
+C
组合键来中止。
- 正常连通应该有类似以下信息返回
PING 10.0.0.71 (10.0.0.71) 56(84) bytes of data.
64 bytes from 10.0.0.71: icmp_seq=1 ttl=64 time=1.52 ms
64 bytes from 10.0.0.71: icmp_seq=2 ttl=64 time=0.883 ms
- 无法连通情况会返回如下消息
From 10.0.0.71 icmp_seq=1 Destination Host Unreachable
- 在
Finalshell
使用 ssh 命令连接cirros
,并使用以上 cirros账号进行登录。
ssh cirros@10.0.0.71
- 在
Finalshell
登录进入cirros
虚拟机以后输入以下命令。请替换以下输出内容为你的学号和姓名拼音。
echo 你的学号和姓名拼音
- 在
Finalshell
输入以下命令,退出cirros
。
exit
- 在
Finalshell
输入以下命令,关闭cirros
。
virsh shutdown cirros
- 在
Finalshell
输入以下命令,查看cirros
状态。
virsh list --all
【实验名称】实验3.2 KVM 安装 CentOS(选做,加分)
【实验目的】
- 掌握 KVM 安装CentOS
【实验环境】
- CentOS 7.X
- FinalShell
【实验资源】
- CentOS 7.9 Minimal iso镜像文件
【实验步骤】
- 创建一个新的目录,用于 KVM 安装 CentOS。
mkdir /kvm-images/centos-vm
chmod 777 /kvm-images/centos-vm
- 进入刚创建的目录,上传
CentOS-7-x86_64-Minimal-2009.iso
到该目录,并修改权限为777。
cd /kvm-images/centos-vm
上传可以使用rz命令,或者直接使用 FinalShell 上传
- 创建虚拟磁盘,并格式化。
qemu-img create -f qcow2 /kvm-images/centos-vm/centos-vm.qcow2 5G
- 正常会返回类似以下信息
Formatting '/kvm-images/centos-vm/centos-vm.qcow2', fmt=qcow2 size=3221225472 encryption=off cluster_size=65536 lazy_refcounts=off
- 修改磁盘和镜像文件的权限为777。
chmod 777 /kvm-images/centos-vm/CentOS-7-x86_64-Minimal-2009.iso
chmod 777 /kvm-images/centos-vm/centos-vm.qcow2
- 使用以下命令安装 CentOS,虚拟机名称为
centos-vm
。
virt-install --name centos-vm \
--ram=1024 --arch=x86_64 --vcpus=1 \
--check-cpu --os-type=linux \
--os-variant='rhel7' -c /kvm-images/centos-vm/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/kvm-images/centos-vm/centos-vm.qcow2,device=disk,bus=virtio,size=6,format=qcow2 \
--bridge=br0 --noautoconsole --vnc --vncport=5922 --vnclisten=0.0.0.0
- 在
Finalshell
输入以下命令,查看centos-vm
状态。
virsh list --all
使用 VNCViewer 连接
10.0.0.70:5922
。可能窗口加载会比较慢。稍等一会将会出现 CentOS 的安装界面。安装选择语言,可以参考 Part1。
时区设置部分参考以下步骤。
语言设置部分参考以下步骤。
禁用 KDUMP。
磁盘分区如下,步骤参考Part1。
swap分区:512M
/boot 分区:300M
/ 根分区:剩余所有空间
网卡设置部分。
开始安装,此过程可能需要三小时以上,实验时请适当评估时间。
设置以下2个用户。
#root用户
用户名:root
密码:123456
#cdcvm用户
用户名:cdcvm
密码123456
- 安装完成以后,请分别使用 VNC Viewer 或 SSH 登录
centos-vm
虚拟机。
【常用命令】
virsh
- 查看正在运行的 KVM 的虚拟机
virsh list
- 查看所有状态的 KVM 的虚拟机
virsh list --all
- 启动 KVM 虚拟机
virsh start 虚拟机名
- 正常关闭 KVM 虚拟机
virsh shutdown 虚拟机名
- 立即中止 KVM 虚拟机(相当于断电)
virsh destroy 虚拟机名
- 移除 KVM 虚拟机
virsh undefine 虚拟机名
- 编辑 KVM 虚拟机配置
virsh edit 虚拟机名
- 重启虚拟机
virsh reboot 虚拟机名
- 虚拟机随宿主机启动
virsh autostart 虚拟机名
【常见问题】
1. cirros 虚拟机无法正常启动,提示not syncing: I0-APIC + timer doesn't work
的错误。
答:需要通过修改内核启动参数,跳过 APIC 检查。
- (1)重新启动cirros
virsh destroy cirros
virsh start cirros
- (2)使用 VNC 连接
10.0.0.70:5920
- (3)在进入 grub 引导界面后,不断按下
Esc
键,随即会跳转到内核参数编辑界面。 - (4)进入内核参数编辑界面,按下
e
键进行编辑。 - (5)按方向键下
↓
,选中kernel
,按下e
键进行编辑。 - (6)在现有参数基础上加上以下参数(参数要有空格隔开),禁止系统进行时间检查和 APIC检查。编辑完按下
Enter
。
no_timer_check noapic
(7)按下
b
键重新启动,应该可以进入到 cirros 系统登录界面。(8)进入 cirros 系统以后,编辑内核启动参数,实现以后每次启动都禁用时间检查。
sudo vi /boot/grub/menu.lst
- (9)进入 cirros 系统以后,编辑内核启动参数,实现以后每次启动都禁用时间检查。
sudo vi /boot/grub/menu.lst
- 找到
console=XXXX
字样,在后面加上以下参数,并保存。
no_timer_check noapic
- (10)编辑网络检查的启动脚本
S40network
。
sudo vi /etc/init.d/S40network
- 在第9行开头加入
#
注释,减少 DHCP 获取时间。
- (11)重启 cirros
sudo reboot
2. 使用 ping 命令无法连通 KVM 虚拟机 cirros,ping 10.0.0.71
失败。
答:
- (1)首先查看 cirros 的状态是否为
running
virsh list --all
- (2)使用 VNC 进入 cirros,查看 IP 是否为 10.0.0.71。
ip addr
- (3)在CentOS上重启 cirros。
virsh reboot cirros
3. VMWare 开启嵌套虚拟化失败,提示类似此平台不支持虚拟化的Intel VT-X/EPT 或 AMD-V
消息。
答:这是因为 VMWare Workstation 和微软 Windows上的 Hyper-V 不兼容导致的,需要关闭 Windows 的 Hyper-V 功能。
- (1)在
控制面板
->程序
-打开或关闭Windows功能
下,去掉Hyper-V
选项。
(2)按下WIN+R组合键打开“运行”,然后输入services.msc回车。在 Windows 的服务禁用
Hyper-V
服务。(3)在Windows 的 CMD 下执行命令彻底关闭 Hyper-V。
bcdedit /set hypervisorlaunchtype off
bcdedit /set hypervisorlaunchtype auto
- (4)重启电脑。