虚拟机镜像之window 镜像

启动windows 虚拟机

前提条件

  • 已安装KVM
  • 已获取ISO的镜像文件

操作步骤

  1. 创建一个空镜像文件
    在当前路径创建一个大小为40G,名字为windows2012.qcow2,格式为qcow2的空镜像文件
qemu-img create -f qcow2 windows2012.qcow2 40G

建议使用vi编辑器将启动虚拟机命令保存。便于后续操作。
2. 启动windows虚拟机机

virt-install --connect qemu:///system \
--virt-type=kvm \
--name windows2012 \
--ram 8192 \
--vcpus 4 \
--arch=x86_64 \
--network network=default,model=virtio \
--cdrom en_windows_server_2012_r2_x64_dvd_2707946.iso \
--disk path=windows2012.qcow2,format=qcow2,device=disk,bus=virtio \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--video cirrus
  • –name: 设置虚拟机的名称
  • –ram: 设置虚拟机的内存大小,单位MB
  • –vcpus: 设置虚拟机的CPU核数
  • –arch: 设置虚拟机的运行架构
  • –network: 设置虚拟机的桥接网络
  • –cdrom: 填写ISO镜像路径
  • –disk: 填写空镜像路径
  • –graphics: 设置vnc监听地址0.0.0.0代表监听所有地址
  • –video: cirrus: 配置客户显示硬件
  • –noautoconsole: 不尝试自动连接到客户端
  1. 查看虚拟机状态

执行启动虚拟机后,可以执行以下命令查看虚拟机的运行状态
virsh list | grep windows2012 #注“windows2012”是虚拟机名称

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_openstack

  1. 连接至windows虚拟机

按照以下示例,打开本地windows安装好的vnc客户端软件,选择File -> New connection新建一个连接

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_linux_02

新弹出窗口,填写VNC Server及Name
VNC Server: 启动windows虚拟机的Linux服务器IP以及windows VNC连接端口,IP和端口以:分割
Name: 新建会话的名称

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_云计算_03


填写必要项(VNC Server,Name)后,点击OK即可保存会话。

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_云计算_04

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_openstack_05

右键新创建好的 VNC会话,点击Connect即可连接至windows服务器。若提示unencrypted,选择continue继续连接即可

5.安装windows操作系统

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_linux_06


进入操作系统安装界面后,您可以根据具体的需求进行安装,本文不再赘述安装过程。

由于VNC连接无法直接复制文件至windows虚拟机中。因此,在完成windows系统安装后,可选择在windows内开启远程服务(windows remote service)。

通过开启远程服务,本地windows电脑可以远程连接至windows虚拟机,本地文件可轻松传输至远程windows虚拟机,方便后续的镜像配置操作。

开启远程桌面

本节以windows server 2008 系统为例,演示开启远程桌面操作:
操作步骤:

操作前置条件,已通过VNC连接至windows虚拟机,并可以执行操作

  1. 选择 “开始” – “计算机” – 右键选择“属性”,然后按下图操作:

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_如何将虚拟机里面的centos做成镜像_07

  1. 选择“远程设置“
  2. 如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_云计算_08

  3. 选择允许运行任意版本远程桌面的计算机连接
  4. 如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_linux_09

配置windows虚拟机的防火墙

虚拟机开启远程桌面服务后,需要配置防火墙放行远程连接请求后才可远程连接,默认情况下windows防火墙会隔绝外部的远程连接请求。解决此问题有2种方案如下:

方案1:
打开windows虚拟机的”运行窗口”,输入以下命令即可放行远程连接规则

netsh advfirewall firewall set rule name="远程桌面(TCP-In)" new enable=yes
netsh advfirewall firewall set rule name="远程桌面 - RemoteFX (TCP-In)" new enable=yes

方案2:

临时关闭防火墙,如下所示

  1. 右下角打开网络和共享中心
  2. 如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_openstack_10

  3. 选择 windows防火墙

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_openstack_11

  1. 打开或关闭windows防火墙

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_云计算_12

  1. 选择关闭 防火墙配置,点击确定即可关闭防火墙

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_运维_13

配置KVM宿主机到windows虚拟机的端口映射

由于KVM内运行的windows虚拟机默认网络和外部隔离,外部的windows电脑不能直接连接至windows虚拟机,因此需要在KVM宿主机上配置端口映射规则。

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_linux_14

操作步骤:
1.获取windows虚拟机的IP地址

打开 控制面板–>网络和Internet–>网络连接。点击windows虚拟机的网卡,点击详细信息

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_linux_15


如下图示例,windows虚拟机的IP地址192.168.13.71

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_如何将虚拟机里面的centos做成镜像_16

  1. 配置KVM宿主机的iptables映射规则
    Linux防火墙管理工具iptables可以设置DNAT(目标地址转换)规则,完成宿主机端口至windows虚拟机的映射。因为上述network=default,是使用的NAT模式,如果是nework=bridge 桥模式时,可以不需要NAT,各种网络模式,我们将在下面章节做详细的介绍。

操作步骤:
在KVM宿主机执行以下命令

echo 1 > /proc/sys/net/ipv4/ip_forward #开启内核转发
iptables -t nat -A PREROUTING -d 172.28.8.132/32 -p tcp -m tcp --dport 63389 -j DNAT --to-destination 192.168.13.71:3389  #配置映射规则
iptables -I FORWARD -d 192.168.13.71  -j ACCEPT #放行指定IP

命令释义:
以上命令开启Linux内核的转发功能。并添加了iptables DNAT映射规则,将对来自外部访问KVM宿主机63389端口的流量转发至 windows虚拟机(192.168.13.71)的3389端口

注意:
-d 172.28.8.132/32 : 这里需要替换为实际情况中KVM宿主机的IP地址/32
–to-destination 192.168.13.71:3389 : 这里替换为实际情况中windows虚拟机的IP地址

测试远程连接服务

1.Windows本地电脑右键点击 左下角开始,“运行“

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_linux_17

2.输入mstsc后确定

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_openstack_18

3.输入KVM宿主机的IP地址,以及DNAT规则映射的端口号。选择连接即可

如何将虚拟机里面的centos做成镜像 把虚拟机做成镜像_如何将虚拟机里面的centos做成镜像_19