之前都是在用Linux 虚机,现在有需要用到Win7 虚机,才发现在 KVM 上安装 Win7 的过程远比想象中的复杂。本文就把其过程做个简单总结。

1. 在 Virtual Machine Manager 里面安装

首先尝试在 Virtual Machine Manager 里面安装。遇到的问题如下:

(1)一直停留在 starting windows 界面。

解决方法:修改 video model 为 Cirrus,问题解决。

(2)开始安装后,对鼠标和键盘无响应。

google,发现需要使用 <input type=’tablet’ bus=’usb’/>。添加一个:

但是键盘还是不好使。。算了,还是转到使用 qemu-system-x86_64 命令启动虚机吧。

2. 使用 qemu-system-x86_64 启动 Win 7 虚机

2.1 环境准备

(1)下载 Windows virtio driver iso:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.102/,因为要将磁盘挂接为 virtio 磁盘。

(2)创建系统盘 qemu-img create -f raw win7.img 30G,这将作为Win7的操作系统盘。

(3)创建启动脚本

#!/bin/sh
DISKIMG=/home/s1/win7.img
WIN7IMG=/home/s1/en_windows_7_enterprise_x64_dvd_x15-.iso
VIRTIMG=/home/s1/virtio-win-0.1..iso
qemu-system-x86_64 --enable-kvm -drive file=${DISKIMG},if=virtio -m \
-net nic,model=virtio -net user -cdrom ${WIN7IMG} \
-drive file=${VIRTIMG},index=,media=cdrom \
-rtc base=localtime,clock=host -smp cores=,threads= \
-usbdevice tablet -cpu host -name win7 -vnc : -device cirrus-vga,id=video0,bus=pci.,addr=0x4

(4)可以运行脚本了,然后通过 VNC 进入界面,进入下面部分。

2.2 安装 Win 7

(1)选择 Custom(advanced)

(2)选择 virtio 磁盘

(3)选择 virtio disk driver

(4)安装 Win7 Virtio SCSI Driver

(5)安装好以后,就可以看到安装的目标磁盘了

(6)进入常规的 Win7 安装流程

3. 安装其它 Virtio 驱动

(1)网络驱动

但是安装失败:

尝试 device manager:

但是还是失败:

(2)Baloon driver

Device manager, 右键 root device, add legacy hardware, next, install manually (advanced), next, have disk, browse, select inf, install.

改成此方法安装 network 驱动成功。注意将虚机重启从而使得安装生效。

(3)诡异的问题

通过上面方法得到的 Win7 raw 格式的镜像文件可以直接使用来创建新的虚机,这些新的虚机会使用 virtio network driver。

但是,在 OpenStack 环境和中,Nova 首先将 qcow2 格式的镜像从glance 中下载到计算节点上,然后将它转化为 raw 格式作为 backfing file,再创建一个 qcow2 文件,它使用 raw 文件作为 backing file。如下图所示:

root@linuxkvm1:/home/s1# qemu-img info /var/lib/nova/instances/1d157798-848d-4dc0--7343083ec943/disk
image: /var/lib/nova/instances/1d157798-848d-4dc0--7343083ec943/disk
file format: qcow2
virtual size: 30G ( bytes)
disk size: .3G
cluster_size:
backing file: /var/lib/nova/instances/_base/d074d3233a25bf3d10fdc4915e2c7913aebf39ee
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits:
corrupt: false
root@linuxkvm1:/home/s1# qemu-img info /var/lib/nova/instances/_base/d074d3233a25bf3d10fdc4915e2c7913aebf39ee
image: /var/lib/nova/instances/_base/d074d3233a25bf3d10fdc4915e2c7913aebf39ee
file format: raw
virtual size: 30G ( bytes)
disk size: .1G

诡异的是,OpenStack 中新建的虚机不能使用 virtio network driver:

但是,

  • 如果使用backing file 直接启动虚机,则没有这个问题。
  • 使用同样的 backing file 创建一个新的 qcow2 文件,则没有这个问题

具体原因应该和 Nova 的具体逻辑有关,将来再查,现在暂时使用 SCSI network driver。

参考文档:

在 KVM 上安装 Win7 虚拟机的更多相关文章

  1. 如何在VirtualBox虚拟机软件上安装Win7虚拟系统

    在Windows系统中安装VirtualBox 双击从官网上下载的VirtualBox-4.3.12-93733-Win.exe安装程序,默认下一步,下一步完成基础安装. 在VirtualBox虚拟机 ...

  2. kvm上的Linux虚拟机使用virtio磁盘

    kvm上的Linux虚拟机使用virtio磁盘 系统:centos6.6  64位 网上的文章比较少,怎麽将Linux虚拟机的磁盘改为使用virtio磁盘 因为centos6或以上系统已经包含了vir ...

  3. KVM | centos 安装 window 虚拟机

    KVM | centos 安装 window 虚拟机 环境: CENTOS 7.3 1. 准备 1.1 检查是否支持虚拟化 cat /proc/cpuinfo | egrep 'vmx|svm' 要求 ...

  4. GPT分区基础知识及如何在GPT分区上安装WIN7

    大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘,更快速的启动win8,预装系统都采取了GPT分区 ...

  5. 如何在GPT分区上安装WIN7

    大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘,更快速的启动win8,预装系统都采取了GPT分区 ...

  6. 手把手教windows上安装linux虚拟机及环境配置

    目录 版本说明 安装虚拟机 典型方式安装(推荐小白,带有图形界面,助于学习,但占用空间大) 自定义方式安装(推荐老司机) 创建快照 克隆虚拟机 windows上安装linux虚拟机不管是对于新人还是老 ...

  7. windows下安装win7虚拟机并安装oracle

    一.win7虚拟机 与安装linux虚拟机没有什么不同,不同的是选择客户机操作系统.内存.磁盘容量,以及映像文件. 创建win7虚拟机步骤简化: 新建虚拟机-->>自定义-->> ...

  8. 最新的裸机联想笔记本装win7系统/SSD(固态硬盘)上安装win7系统/联想K4450A i7装win7系统

    老师让我帮他装个操作系统,由于是新电脑,并且老师的电脑上另安有固态硬盘,老师要我把系统安装在固态硬盘上,BIOS是2014年7月份的,所以BIOS设置项可能会有所变化. 下面是遇到的一些问题,及解决方 ...

  9. 怎么在一台电脑上安装win7与centos7双系统

    对于用习惯windows系统的小伙伴们来说,好像Linux系统的命令操作感觉会比较神秘,进而有部分小伙伴就想说也学一学LInux操作系统.但是苦于资源的问题--就一台计算机,一块硬盘,担心说如果安装了 ...

随机推荐

  1. 数据库排序sql,order by

    一开始我认为 SELECT * FROM dbo.T_User ORDER BY CreateTime ,IsDel DESC 的执行顺序是先按创建时间倒序排序,再按isdel倒序排序,所以我就没再S ...

  2. SQL 性能优化-查询优化(like查询)

    废话不说,上代码 SET STATISTICS IO ON SELECT * FROM dbo.T_AssNews WHERE Content LIKE '%会%' 花费时间 执行计划 一个百分号的代 ...

  3. 第二篇:Entity Framework CodeFirst & Model 映射

    前一篇 第一篇:Entity Framework 简介 我有讲到,ORM 最关键的 Mapping,也提到了最早实现Mapping的技术,就是 特性 + 反射,那Entity Framework 实现 ...

  4. iOS阶段学习第34天笔记(UI小组件 UISegment-UISlider-UIStepper-UIProgressView-UITextView介绍)

    iOS学习(UI)知识点整理 一.UI小组件 1.UISegmentedControl 分段选择器  实例代码 - (void)viewDidLoad { [super viewDidLoad]; / ...

  5. 【C#】 异常处理

    异常是在程序执行期间出现的问题.C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零等异情况. 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式. C# 异常处理时建立在四个 ...

  6. Oracle 编程

    编程:储存过程,自定义函数,触发器,包. 储存过程 在命令窗口用exec调 作用:存储在数据库中用于完成某个功能的程序 创建在 procedure里 create or replace procedu ...

  7. C++_系列自学课程_第_4_课_string_《C++ Primer 第四版》

    相信学习过计算机编程的人,基本应该都接触过C语言,在C语言中处理字符串大家一定多遇到过, 也都知道处理字符串非常麻烦,而在C++里面,由标准库string类提供对可变长的字符串的支持.下面 来看看st ...

  8. SQL性能优化常见措施(Lock wait timeout exceeded)

    SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...

  9. spring入门(三)【事务控制】

    在开发中需要操作数据库,进行增.删.改操作的过程中属于一次操作,如果在一个业务中需要更新多张表,那么任意一张表的更新失败,整个业务的更新就是失败,这时那些更新成功的表必须回滚,否则业务会出错,这时就要 ...

  10. php动态更改post_max_size, upload_max_filesize等值

    在配置文件里 有些PHP 配置选项可以用int_set() 函数 直接在 项目里修改.但是有些值确不行.例如和上传文件有关的post_max_size和upload_max_filesize int_ ...