0x01 前言

最近因为工作需要接触到一些和windows server系统有关的技术,但我对于windows server系统知之甚少,所以我计划最近一段时间通过KVM学习相关的知识。

安装系统是最基础的,这部分内容很简单。因为是用于测试环境,同时又是windows系统,所以涉及的KVM知识很少。

0x02 准备

首先我的实体服务器运行的是centos 7,所以使用KVM安装运行windows server 2012 R2。KVM 虚拟化环境的准备工作请参考以下链接:

基于centos7的KVM配置

然后是系统镜像,可以通过以下链接下载:

文件名:   cn_windows_server_2012_r2_with_update_x64_dvd_6052725.iso
SHA1:    82292FA197E6C9DD9AF8F7E68E7A79A5DA1DDA2B
文件大小: 5.16GB
发布时间: 2014-12-15
下载链接: ed2k://|file|cn_windows_server_2012_r2_with_update_x64_dvd_6052725.iso|5545705472|121EC13B53882E501C1438237E70810D|/

也可以通过以下网址寻找你需要的版本下载:

MSDN,我告诉你

因为安装的是windows系统,而我偏向于使用virtio,所以还需要准备virtio驱动:

#请通过以下命令获取virtio-win
[root@server ~]# yum install virtio-win

#如果你还没有安装相关源,可以通过以下命令安装
[root@server ~]# wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo

virtio-win的相关资料可以在以下链接找到:

Windows Virtio Drivers

0x03 KVM操作

安装命令如下:

virt-install --name 2012-1 \
--memory 8192 \
--vcpus sockets=1,cores=2,threads=2 \
--disk device=cdrom,path=/usr/local/kvm/iso/cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso \
--disk device=cdrom,path=/usr/share/virtio-win/virtio-win.iso \
--disk path=/disk_2/kvm/image/2012-1.img,size=100,bus=virtio \
--network bridge=br0,model=virtio \
--noautoconsole \
--accelerate \
--hvm \
--graphics vnc,listen=0.0.0.0,port=20007 \
--cpu host-passthrough \
--video cirrus

安装命令的简单说明:

virt-install \ #通过virt命令安装
--name 2012-1 \ #定义虚拟机名称
--memory 8192 \ #定义内存大小,这里为8GB
--vcpus sockets=1,cores=2,threads=2 \ #定义CPU核心数,这里模拟1颗2个核心、2条线程的CPU。
--disk device=cdrom,path=/usr/local/kvm/iso/cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso \ #定义系统镜像
--disk device=cdrom,path=/usr/share/virtio-win/virtio-win.iso \ #定义驱动镜像
--disk path=/disk_2/kvm/image/2012-1.img,size=100,bus=virtio \ #定义磁盘路径和大小,这里是100GB
--network bridge=br0,model=virtio \ #定义网卡
--noautoconsole \ #不启用console
--accelerate \ #启用加速
--hvm \ #使用全虚拟化
--graphics vnc,listen=0.0.0.0,port=20007 \ #指定VNC的端口
--cpu host-passthrough \ #让虚拟机直接获取物理CPU的指令集
--video cirrus #指定显卡

实际命令和反馈:

1475790881

0x04 VNC操作

因为windows不支持通过console安装,输入命令后只能通过vnc继续安装过程:

1475790882

这里的server地址是centos 7的IP地址,端口是刚才安装命令所指定的端口。在所有信息都正确无误的情况下,点击connect后即可看到熟悉的安装界面:

1475790883

0x05 virtio

这里要注意的是:因为windows并没有内置virtio驱动,而网卡和硬盘我是选用virtio进行驱动的。所以在以下界面会显示空白,找不到硬盘:

1475790884

这里需要手动添加驱动,需要添加如图所示的三个驱动程序。在选择系统版本时请根据实际情况进行选择。在我写这篇文章的时候,virtio-win驱动已经支持windows server 2016了。:

1475790885

0x06 收尾

在windows安装界面操作完成后,系统会自动安装,安装程序到最后会要求重启。重启后的虚拟机并不会自动开机,而是处于关闭状态,通过以下命令即可查看:

[root@server ~]# virsh list --all

1475790886

在手动启动之前需要将已经加载的系统和驱动镜像删除。我在这里直接删掉配置文件的相关字段。通过以下命令打开配置文件:

[root@server ~]# virsh edit 2012-1

找到以下内容:

1475790887

这里需要删掉的字段如下:

    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/usr/local/kvm/iso/cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/usr/share/virtio-win/virtio-win.iso'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>

保存后即可通过以下命令启动虚拟机:

[root@server ~]# virsh start 2012-1

0x07 结语

成功启动后还需要通过vnc进行管理,首先要做的是启动远程桌面。

1475790888