记录一次在迷你主机上安装KVM虚拟机并运行windows
自己的小服务器系统由于硬盘升级, kvm重装一遍, 因此趁这个机会记录下KVM安装历程, 我在里面安装Windows server 2019系统, 本文将安装qemu+kvm with virt
(English version translate by GPT-3.5)
准备安装
先检查自己的CPU是否支持虚拟化(如今的宿主机CPU基本没有不支持的)
1
cat /proc/cpuinfo | egrep 'vmx|svm'
如果返回如下的内容(其实只要如果有内容返回, 就行), 就表示支持。
1
2
3
4
5
6
7
8flags : fpu vme de pse tsc ...... monitor ds_cpl vmx est tm2 ssse3 ......
flags : fpu vme de pse tsc ...... monitor ds_cpl vmx est tm2 ssse3 ......
flags : fpu vme de pse tsc ...... monitor ds_cpl vmx est tm2 ssse3 ......
flags : fpu vme de pse tsc ...... monitor ds_cpl vmx est tm2 ssse3 ......
flags : fpu vme de pse tsc ...... monitor ds_cpl vmx est tm2 ssse3 ......
flags : fpu vme de pse tsc ...... monitor ds_cpl vmx est tm2 ssse3 ......
flags : fpu vme de pse tsc ...... monitor ds_cpl vmx est tm2 ssse3 ......
flags : fpu vme de pse tsc ...... monitor ds_cpl vmx est tm2 ssse3 ......如果没有任何返回, 那么就表示。。。不支持虚拟化
安装基础包
关闭SELinux, 将
/etc/sysconfig/selinux
中的SELinux=enforcing
改成SELinux=disabled
, 改完后如下1
2
3
4
5
6
7
8
9
10
11# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled // 更改这里
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted执行以下命令
1
yum -y install qemu-kvm libvirt virt-install bridge-utils
然后就是建议重启机器(虽然不重启也没关系)
使用
lsmod | grep kvm
来检查kvm模块是否运行, 如下输出表示运行成功1
2
3[root@localhost ~]# lsmod | grep kvm
kvm_intel 188688 0
kvm 636931 1 kvm_intel
设置网络为桥接网络
这里不讲述NAT网络具体设置
这一步建议到宿主机上进行操作, 不要用ssh, 因为这一步设置网络时用ssh可能会断开网络导致设置中断
进入目录:
/etc/sysconfig/network-scripts/
找到自己的网卡, 并编辑它(网卡名可以通过ip addr), 例如我输入ip addr出现如下, 我的主网卡是enp1s0
1
2
3
4
5
6
7
8[root@Ruter-Home ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
...
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
inet 10.0.0.80/24 brd 10.0.0.255 scope global noprefixroute dynamic br0
3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
......为什么不是eth0, 是因为从v197版本之后的systemd都将更改命名方式, 原来的ethN更改为为en[x][M]s[N], 原来的wlanN更改为wl[x][M]s[N], 从上面可以看到我有一个网口enp1s0, 以及1个无线网口wlp2s0
具体参考该网址 Predictable Network Interface Names
- Names incorporating Firmware/BIOS provided index numbers for on-board devices (example:
eno1
) - Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (example:
ens1
) - Names incorporating physical/geographical location of the connector of the hardware (example:
enp2s0
) - Names incorporating the interfaces’s MAC address (example:
enx78e7d1ea46da
) - Classic, unpredictable kernel-native ethX naming (example:
eth0
)
- Names incorporating Firmware/BIOS provided index numbers for on-board devices (example:
备份你的主网卡配置,并运行如下命令(命令中的网卡改为自己网卡名)
如果要删除网桥, 参考这个网站CentOS7.4 删除virbr0虚拟网卡
1
2
3[root@Ruter-Home kvm]# virsh iface-bridge enp1s0 br0
Created bridge br0 with attached device enp1s0
....如果这里没有错误最好, 但是我这边遇到错误了, 出现了如下的报错
1
2
3error: Failed to start bridge interface br0
error: internal error: failed to create(start) interface br0: failed to execute external program - Running 'ifup br0' failed with exit code 1:
Determining IP information for br0... failed: no link present. Check cable?这个问题好像是br0无法指定IP,我查了下并做了如下更改
修改ifcfg-enp1s0
vi /etc/sysconfig/network-scripts/ifcfg-enp1s0
1
2
3
4
5DEVICE="enp1s0"
ONBOOT="yes"
BRIDGE="br0"
# 下面的BOOTPROTO是新增的, 值为None
BOOTPROTO=none修改ifcfg-br0如下 ``vi /etc/sysconfig/network-scripts/ifcfg-br0`
1
2
3
4
5
6
7
8DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="dhcp"
# 注释了这1/2行
#STP="on"
# 注释了这2/2行
#DELAY="0"停用网卡, 再启用网卡, 并重启网络服务
1
2
3
4
5
6
7
8
9ifdown enp1s0
ifdown br0
ifup enp1s0
ifup br0
此时依然没有IP, 然后我重启了network, IP有了
systemctl restart network配置完成
ifconfig
1
2
3
4
5
6
7
8br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.*.*.* netmask 255.255.255.0 broadcast 10.0.0.255
inet6 ************ prefixlen 64 scopeid 0x20<link>
ether ********* txqueuelen 1000 (Ethernet)
RX packets 244 bytes 16938 (16.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 171 bytes 34132 (33.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
执行安装操作系统
在这之前, 还得准备好这2个软件
Download VNC-Viewer VNC连接软件, 因为CentOS是server版的, 通过该软件来进行系统安装
Download virtio-win-0.1.173-2 这个软件是windows驱动, 需要用它来识别出虚拟磁盘, 这个放到kvm主机上的某个位置
别忘了准备好windows的iso镜像, 这里提供 MSDN我告诉你 的镜像ed2k地址
1 | 文件名: cn_windows_server_2019_updated_march_2019_x64_dvd_c1ffb46c.iso |
准备好后, 创建虚拟磁盘
其实下面的格式后缀不一定是qcow2, 可以是.img 只是一个文件而已, 我创建在了/mnt/kvm中
1 | qemu-img create -f qcow2 kvm-winserver2019.qcow2 50G |
执行命令, 启动虚拟机
关于virt-install的详细命令解释如下
-n –name= 客户端虚拟机名称
-r –ram= 客户端虚拟机分配的内存
-u –uuid= 客户端UUID 默认不写时,系统会自动生成
–vcpus= 客户端的vcpu个数
-v –hvm 全虚拟化
-p –paravirt 半虚拟化
-l –location=localdir 安装源,有本地、nfs、http、ftp几种,多用于ks网络安装
–vnc 使用vnc ,另有–vnclient=监听的IP –vncport =VNC监听的端口
-c –cdrom= 光驱 安装途径
–disk= 使用不同选项作为磁盘使用安装介质
-w NETWORK, –network=NETWORK 连接客户机到主机网络
-s –file-size= 使用磁盘映像的大小 单位为GB
-f –file= 作为磁盘映像使用的文件
–cpuset=设置哪个物理CPU能够被虚拟机使用
–os-type=OS_TYPE 针对一类操作系统优化虚拟机配置(例如:‘linux’,‘windows’)
–os-variant=OS_VARIANT 针对特定操作系统变体(例如’rhel6’, ’winxp’,’win2k3’)进一步优化虚拟机配置
–host-device=HOSTDEV 附加一个物理主机设备到客户机。HOSTDEV是随着libvirt使用的一个节点设备名(具体设备如’virsh nodedev-list’的显示的结果)
–accelerate KVM或KQEMU内核加速,这个选项是推荐最好加上。如果KVM和KQEMU都支持,KVM加速器优先使用。
-x EXTRA, –extra-args=EXTRA 当执行从”–location”选项指定位置的客户机安装时,附加内核命令行参数到安装程序
–nographics “virt-install” 将默认使用–vnc选项,使用nographics指定没有控制台被分配给客户机
————————————————
版权声明:本文为CSDN博主「翟海飞」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhaihaifei/article/details/51153402
1 | virt-install \ |
如果希望NAT网络, 将
--network bridge=br0,model=virtio
更改为--network network=default
这里我用的名字是kvm-winserver2019, 如果名字不一样后面别忘了替换
会输出如下内容
1 | WARNING Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package. |
打开vnc-viewer, 连接到这台机器的5910端口
如果无法连接5910端口, 估计是centos的防火墙拦截掉了, 运行以下命令可以放通5910端口
[root@Ruter-Home ~]# firewall-cmd –zone=public –add-port=5910/tcp –permanent
success
[root@Ruter-Home ~]# firewall-cmd –reload
success
输入密码123456后, 出现这样的画面, 剩下的就是正常的安装流程了, 就不介绍了
如果安装过程中硬盘找不到, 通过这样子安装驱动
选择第二个, 然后磁盘就出来了, 接下来就是正常的安装
安装完毕后, 可能没有网卡, 进入设备管理器, 然后选择手动更新, 并选择软盘驱动器里面的win10 文件夹, 安装后就有网卡了
如果希望看到真实的CPU名字的话
如果看到CPU名字是Qemu Virtual CPU
不顺眼, 可以进行如下配置
执行 virsh edit 你虚拟机名字
1
virsh edit kvm-winserver2019
在首行文本中更改为如下, 其中
xmlns:qemu
是增加的内容1
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
在
<domain>
和</domain>
之间添加如下, 就搞定了1
2
3
4<qemu:commandline>
<qemu:arg value='-cpu'/>
<qemu:arg value='host'/>
</qemu:commandline>
好了, 安装完毕了, 放一点virsh的基本操作
查看虚拟机列表
1 | virsh list |
启动和关闭
1 | virsh start 虚拟机名 # 启动虚拟机 |
查看/编辑 virsh XML配置(加硬盘会用到)
1 | virsh edit 虚拟机名 |
导出xml配置
1 | virsh dumpxml 虚拟机名 > 导出到的文件名 |
如果希望开机启动
1 | virsh autostart 虚拟机名 |