Showing posts with label 虚拟机. Show all posts
Showing posts with label 虚拟机. Show all posts

Monday, July 14, 2008

KVM guest 连接 USB 设备临时解决办法

默认的 kvm guest 启动并未模拟 usb, 模拟 usb,需要启动时加上 -usb 参数,qemu 为 guest模拟一个 8 port 的 Intel SB82371 UHCI USB 控制器。

kvm -hda /path/to/your/kvm/image/hda.qcow2

在使用 USB 之前,需要找出 USB 的设备 ID,如:

$lsusb
Bus 007 Device 002: ID 05ac:8502 Apple Computer, Inc.

输出中的 05ac:8502,分别为 <VendorID>:<ProductID>

启动 guest 系统后, CTRL + ALT + 2 转到 Monitor ,手工加载 usb 设备(用上面的输出替换):

#usb_add host:<VendorID>:<ProductID>
Could not open /proc/bus/usb/devices

回到 host 系统发现 /proc/bus/usb/devices 文件不存在,google 后发现相关的 Ubuntu BUG report。Ubuntu 等发行版早将 /proc/bus/usb/devices deprecated 一年之久,hardy 已经完全转向 /dev/bus/usb/devices,相比较 proc 获得有更灵活的权限控制、安全性更高。Ubuntu bug report 中给出了 workaround。

编辑 '/etc/init.d/mountdevsubfs.sh' 取消 40 行后的相应注视:

 # Magic to make /proc/bus/usb work
  #
  mkdir -p /dev/bus/usb/.usbfs
  domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
  ln -s .usbfs/devices /dev/bus/usb/devices
  mount --rbind /dev/bus/usb /proc/bus/usb

执行这个脚本。

$ sudo /etc/init.d/mountdevsubfs.sh start

用此法成功加在招行 USB key,可以进入专业版,实际实验查帐等操作正常,转帐验证时候失败。

Saturday, July 12, 2008

手工配置 Ubuntu hardy KVM 网络

Ubuntu hardy 中安装 KVM 速记中网络配置采用 KVM 默认方式,此法简单易用。

用户网络

使用情形

  • 最简易的从虚拟机访问宿主,Internet,和其它本地网络资源
  • 你不需要从一个 guest 访问另外一个 guest
  • 你不追求最高性能

警告:用户网络不支持部分网络特性如 ICMPP,影响一些程序(如 ping) 无法完全正常工作。

前置需求

  • 你需要 kvm 启动并运行
  • 非 root 用户运行需要拥有 /dev/kvm rw 权限
  • 如果你需要访问 Internet 或本地网络,你的宿主系统必须可以访问 Internet 和本地网络

解决方案

以参数 "-net nic -net user" 运行 kvm , 例如:

kvm -hda /path/to/hda.img -net nic -net user

注意

  • IP地址由qemu 自带的 DHCP 服务自动分配
  • 如果你在一个宿主上运行多 guest 系统,你无法为每个 guest 指定不同的 MAC 地址
  • 你仍可访问一个指定的端口,你可以使用 "redir" 选项(译者按:启动 kvm 时)

公共网桥

警告: 下面的方法,不适用于大部分的无限驱动,因为他们不支持 bridging 功能。

使用案例

  • 你不想指定 IP 地址到你的虚拟机器并且使它们可以从本地网络访问
  • 希望性能于虚拟机无关

前置需求

  • kvm 已启动并运行
  • 非 root 用户运行需要拥有 /dev/kvm rw 权限

停止当前网络接口

sudo /etc/init.d/networking restart

编辑 /etc/network/interfaces 设置 bridge 接口,注释或替换原配置为(修改为对应你网络的配置):

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.0.10
        network 192.168.0.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

或使用 DHCP(对 laptop 比较有用,但不能使用无线,囧)

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

这将用来创建虚拟接口 br0

重启网络

sudo /etc/init.d/networking restart

手工或用下面的脚本创建 MAC 地址

#!/bin/bash
# generate a random mac address for the qemu nic
# shell script borrowed from user pheldens @ qemu forum
echo $(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ;
do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done)

注:原脚本用的环境为 /bin/sh,ubuntu 上出错,所以这里我替换为 /bin/bash

用生成的 MAC 地址替换下面的 $macaddress 启动 KVM

kvm -hda /path/to/hda.img -net nic,macaddr=$macaddress -net tap

现在可以 ping 通本地网络了,:-)

Tuesday, July 08, 2008

重新调整 qemu 镜像文件大小一法

qemu 的镜像文件格式 raw, qcow2 采用了文件系统的打孔技术,镜像文件实际大小同实际写入的数据扇节相关。因为担心硬盘空间不足,之前创建的镜像文件仅为 2G,现在看来完全没有必要,尝试重新调整到 10G。

qemu 没有提供调整硬盘镜像文件的工具,google "qemu disk resize" 说法各异。我的 guest 文件系统为 NTFS,按照此法调整成功,记录一下:

转换为 raw 格式

$qemu-img convert hda.qcow2 -O raw hda.raw

增大raw镜像文件到 10G

$dd if=/dev/zero of=hda.raw seek=10 obs=1GB count=0

修正 NTFS BPB

$hexedit hda.raw

转到 7E00: 7E00
替换 7E1A 的 80 为 FF
保存退出:Ctrl-x --> y

gparted livecd 启动 guest 重新调整 NTFS 分区大小

$kvm -hda hda.raw -cdrom gparted-livecd-0.3.4-11.iso -boot d

重启 windows,windows 将进入自检

 
$qemu hda system.raw

重新转换为 qcow2 格式

$qemu-img convert hda.raw -O qcow2 hda.qcow2

Monday, July 07, 2008

Ubuntu hardy 中安装 KVM 速记

kvm hit the road

介绍

KVM(Kernel-based Virtual Machine) 是 X86 平台上基于 linux kernel 的全虚拟化技术,通过 Intel-VTAMD-V 技术实现全虚拟化。Linux kernel 自 2.6.20 已经包含了 KVM,各大发行版也陆续提供支持。

准备工作

本文以 Ubuntu hardy 为例记录安装过程。

系统环境

OS: Ubuntu hardy 8.04 64bit
Kernel: 2.6.24-19-generic SMP x86_64 GNU/Linux
Hardware: Macbook Pro 3rd(Santa rose), Intel(R) Core(TM)2 Duo CPU     T7500  @ 2.20GHz

检查 CPU

KVM 需要 CPU 支持原生虚拟以得到最佳性能,官方文档称当 CPU 不支持原生虚拟时,将自动回退到 qemu 模拟方式。Ubuntu 中如果系统不支持原生虚拟,KVM 将拒绝启动,检查 CPU 是否支持原生虚拟:

$egrep '(vmx|svm)' /proc/cpuinfo

有输出即说明 CPU 支持原生虚拟。

安装 KVM

$sudo aptitude install kvm

安装 guest 系统

#mkdir -p /media/work/kvm/
#qemu-img create -f qcow2 /media/work/kvm/hda.qcow2 10G
#kvm -hda /media/work/kvm/hda.qcow2 -m 256 -vnc :0 -daemonize -cdrom /media/ENT/iso/Windows.XP.Professional.VLK.CN.SP2.full.iso -boot d
  • qcow2 是 qemu 支持的硬盘镜像格式之一,支持 snapshots 以及 AES 加密,zlib 压缩,其它格式可以参考 man qemu-img
  • ext3、NTFS 文件系统支持打孔,只有实际写入的扇区才会占用存储空间
  • KVM 启动参数指定 guest 内存为 256M,以 CDROM 启动

kvm 以 daemon 方式运行,通过 vnc 访问:

$xvncviewer localhost:5900

Windows 安装完成后,关闭系统kvm 进程会自动关闭。如需重启:

#kvm -hda /media/work/kvm/hda.qcow2 -m 256 -vnc :0 -daemonize

系统同样可以通过 VNC 来访问。

网络

默认启动 kvm 或者参数 kvm -net nic -net user 将创建一个 10.0.2.0/24 的网络:

         QEMU VLAN      <------>  Firewall/DHCP server <-----> Internet
                           |          (10.0.2.2)
                           |
                           ---->  DNS server (10.0.2.3)
                           |
                           ---->  SMB server (10.0.2.4)

guest 系统从 10.0.2.15 开始依次分配 IP 地址,VNC 登入 Windows,系统已通过 DHCP 分配到 10.0.2.15 IP地址,Windows 系统此时已经可以正常访问网络。如果不需要提供外部服务的话,默认的网络方式已经可以,非常简便。

links