KVM 安装windows 虚拟机

家里有台linux电脑, 一直当文件服务器和下载机使用。

所谓下载机就是装1个xware用迅雷远程下载, 但是最近迅雷关闭了第三方机器的远程下载功能, 简单来将就是xware不能用了。

又不想买那个看起来很弱智的迅雷下载宝, 就打算在linux上虚拟1个win7 来安装pc版迅雷作为下载机。

为什么要用KVM

首先, linux下的虚拟机最常见的是virtualbox.

virtualbox的界面友好, 操作容易上手。

至于kvm的优势就是性能了。

但是, 上面的说法在现在不适用了, virtualbox有大财团oracle背后支持,版本更新非常迅速, 5.0之后, virtualbox的性能可以讲完全不比kvm逊色。

在某些评测项目(例如磁盘IO, 3d性能),virtualbox 还略优。

只是在多开虚拟机上的情况下(不适合家用cpu), kvm才有肉眼可见的性能优势。

简单来讲,virtualbox比kvm配置直观,界面友好, 性能也不落后。

那么为何要用kvm呢,

事实上virtualbox比kvm配置简单直观是有1个前提, 就是linux宿主机安装图形界面。 而因为我的linux电脑cpu性能低(Intel 赛扬g1840, 当时考虑了功耗),

只安装了ubuntu server 14.04 LTS, 并没有安装图形界面。

当然,virtulbox 一样支持command line 安装和配置, 但是在command line模式下, virtulbox的优势就消失了。

可以将, command Line模式下, kvm安装配置比virtualbox更简单, 而且更加轻量级, 适合性能偏弱的机器。 这就是我选择kvm的原因。

KVM 安装win7的主要步骤。

很多人听到命令行配置就觉得可怕, 但其实列清晰步骤后会发现也就那么一回事, kvm门槛其实一点也不高。

  1. 安装kvm
  2. 找1个合适的win7安装镜像(iso)
  3. 准备虚拟硬盘文件。
  4. 配置虚拟网卡
  5. 准备和编写1个虚拟机配置文件。(备份,以后可以重用/迁移)
  6. 基于这个配置文件创建1个虚拟机。
  7. 安装win7到虚拟机。
  8. 维护这个虚拟机.(start/shutdown/update..)

是不是, 大体上也就几步嘛, 其实在图面界面的virtualbox上你同样需要完成这些步骤的。

这里有个前提条件,就是你的cpu要支持虚拟化。 什么, 现在还有不支持虚拟化的cpu吗? 连我几年前285块的垃圾赛扬都支持了!

安装kvm

linux安装软件也就一句command的事, 用地沟油系的自觉转化为dnf/yum

sudo apt-get install qemu-kvm bridge-utils

准备win7安装镜像。

为何这一步单独拿出讲, 是有原因的。

kvm 的虚拟硬盘的模式是virtio,virtio的性能和稳定性上佳, 但是windows安装盘是找不到virtio模式的虚拟硬盘的, 必须要在安装前先加载virtio的磁盘驱动。

网上也有加载驱动的教程,但是相对麻烦, 本人建议直接下载整合了virtio驱动的windows安装镜像。

http://dl01.miefen.com/os/cn_windows_7_professional_with_sp1_vl_build_x64_dvd_u_incl_virtio-140506-homemade-by-Jetso.iso

准备虚拟硬盘文件

这个也简单, 在宿主机找个地方。

qemu-img create ./kvm0.img 20G

就创建了1个虚拟硬盘文件。
作为下载机, 20g足够用了。

配置虚拟网卡(桥接)

一但安装完kvm, 系就会增加1个叫virbr0的虚拟网卡。

我们需要修改/etc/network/interfaces 文件, 增加1个网洛实列。

sudo vi /etc/network/interfaces
 auto lo
 iface lo inet loopback
 auto p2p1
 iface p2p1 inet dhcp
 auto br0
 iface br0 inet static
 address 10.0.0.20
 netmask 255.255.255.0
 broadcast 10.0.0.255
 gateway 10.0.0.1
 bridge_ports p2p1                         
 bridge_stp off
 bridge_maxwait 0

其中, ip一定要手动, dhcp分配的地址很可能跟你路由不在同1个网段(本人的路由器地址是10.0.0.1), 那么虚拟机就很难访问了。
bridge_ports p2p1 表示 虚拟网洛实例是桥接自p2p1 (本吊的垃圾实体网卡)

然后重启网络或重启电脑。
重启后会见到原物理网卡的p2p1 的ip地址没了, 转到了虚拟网卡上!

准备和编写配置文件。

是的, 最难就是这里了, 但是这个步骤只需要做一次, 成功之后, 以后重用, 维护就非常简单的。

下面的是我的配置文件, 作为新手, 你只需要改动如下几个地方。

  1. 虚拟机cpu数量(非必要, 默认是2)
  2. 虚拟机内存大小(非必要, 默认是2G)
  3. 虚拟硬盘文件位置。
  4. win7安装镜像的位置。
  5. 虚拟网络实例的名字( 非必要, /etc/network/interfaces 里新加的br0 如果你用了别的名字的话)
  6. vnc 端口(默认5900,除非你这个端口被占用否则不要改)

<domain type='kvm'>  //如果是Xen,则type=‘xen’
  <name>vm0</name> //虚拟机名称,同一物理机唯一
  <uuid>fd3535db-2558-43e9-b067-314f48211343</uuid>  //同一物理机唯一,可用uuidgen生成
  <memory>2048000</memory>
  <currentMemory>2048000</currentMemory>  //memory这两个值最好设成一样
  <vcpu>2</vcpu>            //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l
  <os>
   <type arch='x86_64' machine='q35'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?
   <boot dev='cdrom'/>  //启动介质,第一次需要装系统可以选择cdrom光盘启动
   <bootmenu enable='yes'/>  //表示启动按F12进入启动菜单
  </os>
  <features>
   <acpi/>  //Advanced Configuration and Power Interface,高级配置与电源接口
   <apic/>  //Advanced Programmable Interrupt Controller,高级可编程中断控制器
   <pae/>   //Physical Address Extension,物理地址扩展
  </features>
  <clock offset='localtime'/>  //虚拟机时钟设置,这里表示本地本机时间
  <on_poweroff>destroy</on_poweroff>  //突发事件动作
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>   //设备配置/
   <emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm
   <disk type='file' device='disk'> //硬盘
      <driver name='qemu' type='raw'/>
      <source file='/home/gateman/data/vmDisk/kvm0.img'/>
      <target dev='vda' bus='virtio'/>  // if windows must ide   else virtio

   </disk>
   <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/home/gateman/data/vmDisk/kvm1.img'/>
      <target dev='vdb' bus='virtio'/>
   </disk>
   <disk type='file' device='cdrom'>//光盘
      <driver name='qemu' type='raw'/>
      <source file='/home/gateman/mobiledisk/iso/cn_windows_7_professional_with_sp1_vl_build_x64_dvd_u_incl_virtio-140506-homemade-by-Jetso.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
   </disk>
   /* 利用Linux网桥连接网络 */
   <interface type='bridge'>
      <mac address='fa:92:01:33:d4:fa'/>
      <source bridge='virbr0'/>  //配置的网桥网卡名称
      <target dev='vnet0'/>     //同一网桥下相同
      <alias name='net0'/>      //别名,同一网桥下相同
   </interface>

  <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'>  //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0
   <listen type='address' address='0.0.0.0'/>
  </graphics>
  </devices>
</domain>

之后将文件保存为vm0.xml

基于这个配置文件创建1个虚拟机

很简单, 一句命令

virsh create vm0.xml

然后1个虚拟机实例就创建了(而且会被开机)。

可以用如下命令来查看创建的虚拟机

[gateman@HomeServer ~]$ virsh list
 Id    Name                           State
----------------------------------------------------
 3     vm0                            running

[gateman@HomeServer ~]$ 

可以用下面命令来删除虚拟机(不删除配置文件和硬盘镜像文件的等)

virsh destroy vm0.xml

然后再来一次!

安装win7到这个虚拟机

现在虚拟机虽然启动了, 但是我们在宿主机是无法进入图形界面的,必须找局域网另一台有图形界面的机器,甚至手机都可以!

在另一台机器上安装vnc viewer(有win/linux/android)版本

然后访问 宿主机ip:5900

这是你已经见到win7的安装界面了。
之后安装也就是几个下一步的事情。

维护这个虚拟机.(start/shutdown/update..)

一但安装完win7

马上检查ip是否同一网段, 如果是, 则开启远程桌面服务。
以后就可以通过远程桌面访问了, 丢下不好用的vnc viewer。

如果想关机, 可以执行

virsh shutdown vm0

如果想启动

virsh start vm0

还有suspend/resume 之类的就不一一列出啦

关键是下面这个

virsh define vm0.xml

作用是apply 更新后的虚拟机配置文件(例如加硬盘, 加内存, 换光驱..)

如果共享文件?

win7虚拟机如何访问宿主机文件?
kvm不是virtulbox , 没办法直接将宿主机的硬盘共享给kvm的windows, 只能通过在宿主机上配置smb 文件共享,然后再虚拟机映射共享文件夹。。。

恩恩, kvm的共享方式性能很可能比不上virtualbox, 不过作为下载机够用啦, 装个迅雷下片还不是美滋滋。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐