记录一下kvm安装windows过程中的步骤以及注意点。

先说明一下环境:

  • host: ubuntu server 20.04
  • vm: windows server 2019

安装前准备

  1. winddows server 2019 的镜像: 可以去msdn I tell you上下载
  2. virtio驱动:注意windows server 2019对应的是0.1.171, 下载其中的virtio-win-0.1.171_amd64.vfd文件 : 下载地址

安装kvm

1
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager

配置网络

这里使用桥接模式, 这样就可以保证虚拟出来的windows server与主机是平级的, 其他设备和该虚拟机能够互通。

编辑文件 /etc/netplan/00-installer-config.yaml(每个人在/etc/netpaln下的文件名可能不一样)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
network:
version: 2
ethernets:
eno1:
dhcp4: true
enp2s0:
dhcp4: no
addresses: [10.0.0.239/24]
optional: true
gateway4: 10.0.0.1
nameservers:
addresses: [8.8.8.8,114.114.114.114]
bridges:
br2:
interfaces: [enp2s0]
dhcp4: no
addresses: [10.0.0.240/24]
optional: true
gateway4: 10.0.0.1
nameservers:
addresses: [8.8.8.8,114.114.114.114]

有几点需要注意:

  • eno1是另外一个网卡, 没用, 可以不用配置
  • 此处使用的是网卡是enp2s0
  • 设置桥接的关键是bridges配置, 此处指定了虚拟机的IP: 10.0.0.240, 后续都会用这个IP来访问虚拟机

编辑保存完之后, 执行sudo netplan apply

安装虚拟机

上传文件

  1. 新建文件夹 mkdir -p /opt/kvm/ws2019
  2. 将之前准备好的windows server镜像文件和virtio驱动文件上传到该文件夹下, 例如:
    1. cn_windows_server_2019_updated_march_2019_x64_dvd_c1ffb46c.iso
    2. virtio-win-0.1.171_amd64.vfd

创建虚拟硬盘文件

1
qemu-img create -f qcow2 /opt/kvm/ws2019/win_server_2019.qcow2 50G

此处创建的虚拟硬盘大小为50G。

创建虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
virt-install \
--name win_server_2019 \
--memory 4096 \
--vcpus sockets=2,cores=2,threads=1 \
--cdrom=/opt/kvm/ws2019/cn_windows_server_2019_updated_march_2019_x64_dvd_c1ffb46c.iso \
--os-type=windows \
--os-variant=auto \
--disk /opt/kvm/ws2019/win_server_2019.qcow2,bus=virtio,size=50 \
--disk /opt/kvm/ws2019/virtio-win-0.1.171_amd64.vfd,device=floppy \
--network bridge=br2,model=virtio \
--graphics vnc,password=12358,listen=::,port=5910 \
--hvm \
--virt-type kvm

对其中几项进行说明:

  • 分配给虚拟机的vCPU个数由sockets、cores、threads三个参数的乘积来控制,sockets指代CPU插槽数目,cores指代每个插槽芯片的核心数,threads指代那个核心的超线程,如上所示创建的虚拟机共有4个逻辑cpu。
  • network中填的网络名就是配置桥接网络时指定的名称。
  • listen 指代的是虚拟机的VNC监听接口,默认是localhost,0:0:0:0指带所有的IPv4接口,::指代所有接口,包括IPv4和IPv6。password是vnc连接的密码, port是vnc连接的端口
  • 顺便说一下, 如果要安装linux虚拟机, 需要将os-type设置为linux

windows server 安装

  1. 使用vnc软件连接虚拟机,例如MobaXterm, 地址: 10.0.0.240, 密码:12358, 端口:5910
  2. 进入windows server安装界面,使用自定义, 安装过程会出现看不见磁盘的情况,是因为没有加载virtio驱动的原因。
  3. 选择“加载驱动”,“浏览”,找到“软盘驱动器”,选择 amd64 -> Win10, 然后点击确定, 会发现有两个驱动,一个是Ethernet网卡,一个SCSI磁盘,操作两次驱动加载完成后,磁盘就出现了,继续安装即可。

注意:在安装的过程中, 可能会出现无法连接的问题, 不要慌, 按如下步骤执行

  1. virsh undefine [name] name是虚拟机名称
  2. 然后继续执行之前的virt-install命令

虚拟机管理常用命令

可通过lib-virt的virsh来完成虚拟机生命周期管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看虚拟机运行状态
virsh list [--all]

# 启动
virsh start [name]

# 关机
virsh shutdown [name]

# 暂停(挂起)
virsh suspend [name]

# 删除
virsh destroy [name]

# 重启
virsh reboot [name]

# 显示虚拟机相关信息
virsh dominfo [name]

# 进入虚拟机的console
virsh console [name]

要彻底删除某个虚拟机, 需要如下几个步骤:

  • virsh destroy [name]
  • 删除/etc/libvirt/qemu/下的同名xml文件
  • 重启libvirt服务 service libvirtd restart
  • 删除创建的虚拟硬盘文件

修改已有虚拟机配置

1
2
3
4
# 关闭虚拟机
virsh shutdown [name]
# 编辑, 首次需要选择编辑器
virsh edit [name]

参考资料:

  1. https://ylong.net.cn/KVM_install_windows.html