NetBSD/xen Howto中文版

NetBSD用户指南中文版、NetBSD pkgsrc指南中文版...

版主: lionux

回复
头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

NetBSD/xen Howto中文版

帖子 leo » 2010-09-02 9:12

目录
  • 介绍
  • 将NetBSD安装为特权domain (Dom0)
  • 创建一个无特权的NetBSD domain (DomU)
  • 创建一个无特权的Linux domain (DomU)
  • 创建一个无特权的Solaris domain (DomU)
  • 在 guest domains 中使用PCI设备
  • 相关链接和更多的信息

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

1.介绍

帖子 leo » 2010-09-02 9:17

图片
Xen是一个x86硬件平台(需要类i686 CPU) 的一个虚拟机监视器, 这类x86硬件平台支持在单台主机上运行多个 guest 操作系统。Guest OSes (也被称为“domains”) 需要一个定制的内核,此内核必须支持把Xen hypercalls作为要访问的物理硬件。 启动时, 通过grub引导Xen内核 (也就是Xen hypervisor) 和第一个domain(被称为domain0) )的guest内核。domain0 具有访问物理设备(PCI和ISA设备)的特殊权限, 并管理其它的domains, 并向无权访问物理设备的这些domains提供虚拟设备(磁盘和网络) 。要获取更详尽的信息请参阅http://www.xen.org/.
NetBSD即可作为domain0 (Dom0),也可以是其它的无特权domain (DomU)。(实际上可以有多个具有特权的 domains 访问某个硬件的不同部分, 这些特权domains都向无特权domains提供虚拟设备。我们仅讨论系统内只有一个特权domain的情况, 也就是只有domain0). domain0 可以像普通的i386或amd64内核那样访问物理设备, 并且拥有物理控制台 (VGA或serial)。无特权 domains 则仅能访问由特权domain(通常是domain0)提供的一个只有字符界面的虚拟控制台, 虚拟磁盘 (xbd) 和 虚拟网络接口(xennet)。xbd设备被连接到特权domain的一个块设备上 (也就是说磁盘、raid或ccd等设备的一个分区) 。xennet被连接到一个特权domain的虚拟设备 xvif<domain编号>.<(该domain的)if编号>上, 例如, xvif1.0。xennet和xvif这个两个设备都被当成普通的以太设备 (可以将它们视为两台PC之间的交叉电缆) ,并且它们可以被指派地址 (可以使用IPF等对其进行路由、NAT、过滤等处理) 或被作为部件添加进网桥。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-09-02 9:23

将NetBSD安装为特权domain (Dom0)
首先在x86构架上全新 安装一个 NetBSD/i386 或者 NetBSD/amd64 的NetBSD 5.0发行版。 二进制的发行版可以从 ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/ 上获取。二进制的当前版快照(snapshots) 和 netbsd-4 分支可以从 daily autobuilds 上获取。 当给磁盘分区时,因为grub的限制或者说bugs , 你不得不将 root 分区的大小限制在512Mb以下, 并且格式化为FFSv1、 8k block/1k fragments。如果你的root分区大于这个上限, 使用FFSv2,或者使用了不同的 block/fragment sizes, grub可能无法引导某些文件。同时要记住,你可能想为其它的domains提供虚拟磁盘, 所以要为这些虚拟磁盘保留一些分区。或者你也可以在文件系统内创建一些大文件, 将这些大文件映射到 vnd(4) 设备,然后将这些 vnd 设备输出给其它的domains。

下一个步骤是通过pkgsrc或者用二进制packages安装 sysutils/grubsysutils/xentools3 这两个软件包。如果你不熟悉pkgsrc及/或如何处理二进制packages, 请参阅《NetBSD pkgsrc指南》 。虽然NetBSD自己的启动引导程序可以启动xen, 但是grub可以很方便地引导xen和domain0 内核这两者; xentools3包含了从 domain0 控制xen的程序。你也许还想安装 sysutils/xentools3-hvm ,它包含了运行未修改的使用HVM支持的操作系统的工具。 注意,你的CPU必须支持这一特性。Intel CPU必须具有 'VT' 结构, AMD CPU 具有'SVM' 的结构才可以。 你可以通过运行NetBSD的cpuctl命令轻松地判断出你的CPU是否具支持:

代码: 全选

# cpuctl identify 0          
cpu0: Intel Core 2 (Merom) (686-class), id 0x6f6
cpu0: features 0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR>
cpu0: features 0xbfebfbff<PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX>
cpu0: features 0xbfebfbff<FXSR,SSE,SSE2,SS,HTT,TM,SBF>
cpu0: features2 0x4e33d<SSE3,DTES64,MONITOR,DS-CPL,[I]VMX[/I],TM2,SSSE3,CX16,xTPR,PDCM,DCA>
cpu0: features3 0x20100800<SYSCALL/SYSRET,XD,EM64T>
cpu0: "Intel(R) Xeon(R) CPU            5130  @ 2.00GHz"
cpu0: I-cache 32KB 64B/line 8-way, D-cache 32KB 64B/line 8-way
cpu0: L2 cache 4MB 64B/line 16-way
cpu0: ITLB 128 4KB entries 4-way
cpu0: DTLB 256 4KB entries 4-way, 32 4MB entries 4-way
cpu0: Initial APIC ID 0
cpu0: Cluster/Package ID 0
cpu0: Core ID 0
cpu0: family 06 model 0f extfamily 00 extmodel 00

根据CPU的不同, 这要找的特征标志可能被称为 HVM, SVM 或者 VMX。
下面你就需要 Xen 3.x 内核本身了。你可以通过 pkgsrc (sysutils/xenkernel3) 安装它. 你要找的文件是 xen.gz。将其拷贝到的root文件系统。xen-debug.gz 是一个带有更多一致性检查和更详尽的控制台输出的内核,如果你使用一个串口控制台,它通常用于调试崩溃的guests。它对VGA控制台没用。

然后,你需要在root文件系统里有一个 NetBSD/Xen的domain0 内核。i386或者amd64二进制包里提供的 XEN3_DOM0 kernel 就正好, 但你也许希望定制一下这个内核。请先备份好你的原始内核文件, 因为可以用它恢复系统。 注意: domain0 内核必须支持 KERNFS,而且因为 xend 需要访问 /kern/xen/privcmd,所以 /kern 必须被挂载。

下面你需要安装 Grub 以便引导这个 xen.gz 内核, 而 NetBSD domain0 内核作为一个 module。
在 grub 配置里,你还需要指定分配给 domain0 的内存、使用的控制台...

这里有一个带注释的 /grub/menu.lst 文件:

代码: 全选

# 提供给NetBSD/Xen的Grub配置文件。拷贝为 /grub/menu.lst ,然后运行
# grub-install /dev/rwd0d (这里假设你的启动设备为 wd0).
#
# 默认引导选项是第一台设备
default=0
 
# 如果用户在10秒钟以内没有敲击键盘,将启动默认引导选项
timeout=10
 
# 为控制台配置一个serial。如果你只使用VGA可以忽略这个选项
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
 
# 让用户选择使用哪种控制台(serial或VGA), 10秒后默认是serial
terminal --timeout=10 serial console
 
# NetBSD/xen的一个选项, 使用 /netbsd 作为 domain0 的内核, 以及serial控制台。
# Domain0将被分配64MB内存。
# 假设NetBSD被安装在第一个MBR分区。
title Xen 3.0 / NetBSD (hda0, serial)
  root(hd0,0)
  kernel (hd0,a)/xen.gz dom0_mem=65536 com1=115200,8n1
  module (hd0,a)/netbsd bootdev=wd0a ro console=ttyS0 
 
# 同上, 但使用VGA控制台
# 我们可以使用 console=tty0 (Linux 语法) 或者 console=pc (NetBSD语法)
title Xen 3.0 / NetBSD (hda0, vga)
  root(hd0,0)
  kernel (hd0,a)/xen.gz dom0_mem=65536 
  module (hd0,a)/netbsd bootdev=wd0a ro console=tty0 
 
# NetBSD/xen 使用一个备份的 domain0 内核 (在你将一个不能正常工作的内核指定为 /netbsd时,这个选项就有用了。)
title Xen 3.0 / NetBSD (hda0, backup, serial)
  root(hd0,0)
  kernel (hd0,a)/xen.gz dom0_mem=65536 com1=115200,8n1
  module (hd0,a)/netbsd.backup bootdev=wd0a ro console=ttyS0
title Xen 3.0 / NetBSD (hda0, backup, VGA)
  root(hd0,0)
  kernel (hd0,a)/xen.gz dom0_mem=65536
  module (hd0,a)/netbsd.backup bootdev=wd0a ro console=tty0
 
#引导一个常规的 NetBSD/i386 内核。这用于正好你的 /xen.gz 无法正常工作时很有用。
title NetBSD 4.0
  root (hd0,a)
  kernel --type=netbsd /netbsd-GENERIC
 
#启动NetBSD的bootloader, 让其引导NetBSD/i386内核。
#可能好于上面的方案, 因为grub不能将所有所需信息传递给
#NetBSD/i386内核 (例如,控制台, root device, ...)
title NetBSD chain
  root        (hd0,0)
  chainloader +1
 
## end of grub config file.

用下列命令安装 grub :

代码: 全选

# grub --no-floppy
 
grub> root (hd0,a)
 Filesystem type is ffs, partition type 0xa9
 
grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/ffs_stage1_5" exists... yes
 Running "embed /grub/ffs_stage1_5 (hd0)"...  14 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd0) (hd0)1+14 p (hd0,0,a)/grub/stage2 /grub/menu.lst"...
 succeeded
Done.

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-09-02 9:33

创建一个无特权的NetBSD domain (DomU)
一旦你的 domain0 开始运行了, 你需要启动 xen tool 守护进程 (/usr/pkg/share/examples/rc.d/xend start) 以及xen backend 守护进程 (/usr/pkg/share/examples/rc.d/xenbackendd start)。请确认:在启动xend前 /dev/xencons 和 /dev/xenevt 存在。你可以用下面的命令创建它们:

代码: 全选

# cd /dev && sh MAKEDEV xen

xend将把日志写入 /var/log/xend.log 和 /var/log/xend-debug.log。然后你就可以用xm工具来控制xen了。 'xm list' 看起来像这样:

代码: 全选

# xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0       64    0  r----     58.1

'xm create' 允许你建立一个新的domain。 它用PKG_SYSCONFDIR 参数指定目录下的一个配置文件。 默认情况下, 这个文件应该在 /usr/pkg/etc/xen/。在创建过程中, 必须指定一个内核, 这个内核将运行在新的domain里 (这个内核位于 domain0 文件系统内, 不是新domain的虚拟磁盘里; 但请注意, 你应该为domainU 安装同样的内核—— /netbsd, 这样是为了确保你的系统工具, 像 savecore(8) 可以正常工作)。i386和amd64二进制包里已经提供了一个的合适的内核: XEN3_DOMU。

这里是一份 /usr/pkg/etc/xen/nbsd 的示例配置文件:

代码: 全选

#  -*- mode: python; -*-
#============================================================================
# Python defaults setup for 'xm create'.
# Edit this file to reflect the configuration of your system.
#============================================================================
 
#----------------------------------------------------------------------------
# 内核镜像文件。这个内核将在新的domain里被引导。
kernel = "/home/bouyer/netbsd-XEN3_DOMU"
#kernel = "/home/bouyer/netbsd-INSTALL_XEN3_DOMU"
 
# 为新内核分配的内存 (以M为单位)。
memory = 128
 
# 为新domain设置便于记忆的名称。这个名称将出现在'xm list'里,
# 而且你可以在domain编号里用这个名称作为一个参数。
# 所有的domains必须有不同的名称。
#
name = "nbsd"
 
# 为此domain设置的虚拟的CPU数量。
#
vcpus = 1
 
#----------------------------------------------------------------------------
# 为新domain设置的网络接口。

# 网络接口数量 (至少为1).默认值是1。
nics = 1
 
# 定义接口的MAC 和/或 bridge。
#
# The MAC address specified in ``mac'' is the one used for the interface
# in the new domain. The interface in domain0 will use this address XOR'd
# with 00:00:00:01:00:00 (i.e. aa:00:00:51:02:f0 in our example). Random
# MACs are assigned if not given.
#
# ``bridge'' is a required parameter, which will be passed to the
# vif-script called by xend(8) when a new domain is created to configure
# the new xvif interface in domain0.
#
# In this example, the xvif is added to bridge0, which should have been
# set up prior to the new domain being created -- either in the
# ``network'' script or using a /etc/ifconfig.bridge0 file.
#
vif = [ 'mac=aa:00:00:50:02:f0, bridge=bridge0' ]
 
#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
# what you want them accessible as.
#
# Each disk entry is of the form:
#
#    phy:DEV,VDEV,MODE
#
# where DEV is the device, VDEV is the device name the domain will see,
# and MODE is r for read-only, w for read-write.  You can also create
# file-backed domains using disk entries of the form:
#
#    file:PATH,VDEV,MODE
#
# where PATH is the path to the file used as the virtual disk, and VDEV
# and MODE have the same meaning as for ``phy'' devices.
#
# VDEV doesn't really matter for a NetBSD guest OS (it's just used as an index),
# but it does for Linux.
# Worse, the device has to exist in /dev/ of domain0, because xm will
# try to stat() it. This means that in order to load a Linux guest OS
# from a NetBSD domain0, you'll have to create /dev/hda1, /dev/hda2, ...
# on domain0, with the major/minor from Linux :(
# Alternatively it's possible to specify the device number in hex,
# e.g. 0x301 for /dev/hda1, 0x302 for /dev/hda2, etc ...
 
disk = [ 'phy:/dev/wd0e,0x1,w' ]
#disk = [ 'file:/var/xen/nbsd-disk,0x01,w' ]
#disk = [ 'file:/var/xen/nbsd-disk,0x301,w' ]
 
#----------------------------------------------------------------------------
# Set the kernel command line for the new domain.
 
# Set root device. This one does matter for NetBSD
root = "xbd0"
# extra parameters passed to the kernel
# this is where you can set boot flags like -s, -a, etc ...
#extra = ""
 
#----------------------------------------------------------------------------
# Set according to whether you want the domain restarted when it exits.
# The default is False.
#autorestart = True
 
# end of nbsd config file ====================================================

现在,运行:

代码: 全选

xm create -c /usr/pkg/etc/xen/nbsd

应该创建一个domain,并且在这个domain里面引导一个 NetBSD 内核。 (说明: 一旦完成创建,-c 会使 xm 连接到该 domain 的控制台。) 这个内核将尝试在xbd0(也就是wd0e)上寻找其root文件系统, 这个xbd0还未创建。wd0e在新的domain里将被视为一个磁盘设备, 所以它可以被划分为子分区(whoami:原文此处是 'sub-partitioned')。我们可以在 domain0 里附加一个 ccd 到 wd0e, 并为其分区, newfs 然后在那里释放 NetBSD/i386 或者 amd64 tarballs, 不过还有一个简单的方式: 导入NetBSD二进制组件里提供的 netbsd-INSTALL_XEN3_DOMU 内核。 就像安装其它内核一样, 它包含了一个和带有sysinst的ramdisk, 所以你可以在新的domain里使用sysinst安装NetBSD.
如果你想从一个CD镜像文件安装NetBSD/Xen, 应该在 /usr/pkg/etc/xen/nbsd 文件内使用这行:

代码: 全选

disk = [ 'phy:/dev/wd0e,0x1,w', phy:/dev/cd0a,0x2,r' ]

一旦完成安装, halt -p 新的domain (请勿 reboot 或 halt, 否则即便你修改了配置文件,它仍会重新引导 INSTALL_XEN3_DOMU 内核), 将配置文件切换回 XEN3_DOMU 内核, 然后再次启动新的domain。 现在它应该可以使用xbd0aroot了,而你现在应该有了另一个安装在Xen上的可用的NetBSD了。

当新 domain 启动时,你将看见一些有关wscons 和pseudo-terminals的警告信息。这可以通过编辑 /etc/ttys 和 /etc/wscons.conf 文件来修正。你必须禁用 /etc/ttys 下所有的终端, 除了 console, 像这样:

代码: 全选

console "/usr/libexec/getty Pc"         vt100   on secure
ttyE0   "/usr/libexec/getty Pc"         vt220   off secure
ttyE1   "/usr/libexec/getty Pc"         vt220   off secure
ttyE2   "/usr/libexec/getty Pc"         vt220   off secure
ttyE3   "/usr/libexec/getty Pc"         vt220   off secure

最后, 所有的 screens 必须在 /etc/wscons.conf 里注释掉。
同样你还需要在 rc.conf 里添加

代码: 全选

powerd=YES

这样, 如果在domain0里使用了 xm shutdown -Rxm shutdown -H,这个doamin将被正确地关闭。

你的domain应该现在已经可以使用了,慢慢享用吧。;)

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-09-02 9:35

一个无特权的Linux domain (DomU)

建立无特权的Linux domain与NetBSD domain并没有很大的差别, 但是有一些你需要了解的细节。

首先, 第二个参数是指定义的磁盘 (下例中的 '0x1' )

代码: 全选

disk = [ 'phy:/dev/wd0e,0x1,w' ]

这点对Linux很重要。这里它想获取一个Linux设备编号 (例如 0x300 代表 hda)。Linux 构建设备编号像这样: (major << 8 + minor),所以, 在linux系统里带有major 3和minor 1的hda1 的设备编号就是0x301。 另一个选择是可以使用设备名称 (hda, hdb, ...) ,因为 xentools 有一个表可以将这些名称映射为设备编号。要为liunx guest输出一个分区,这样:

代码: 全选

disk = [ 'phy:/dev/wd0e,0x300,w' ]
root = "/dev/hda1 ro"

它在Linux系统上将被显示为 /dev/hda , 并作为 root 分区使用。

要在这个分区上安装 Linux 系统的guest , 可用下面的方法: 从pkgsrc安装 sysutils/e2fsprogs 。使用mke2fs来格式化Linux系统root的分区, 并挂载。然后从一个正常运行的linux系统里拷贝文件, 在 /etc (fstab, network config)里进行调整。可能还需要找适当的工具直接将 .rpm 或 .deb 这样的二进制包直接释放到这个挂载的分区, 可能需要运行在NetBSD的linux环境下。一旦构建好这个文件系统, 卸载它。如果需要可以用 tune2fs -j 将这个文件系统转换为 ext3 格式。它现在应该就可以启动Linux guest domain了, 使用一个Xen二进制发行版的 vmlinuz-*-xenU 内核。

要想使用 linux 控制台, 你需要在配置里加上:

代码: 全选

extra = "xencons=tty1"

这是因为并非所有的linux发行版都自动给xen控制台附加一个tty。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-09-02 9:40

创建一个无特权的Solaris domain (DomU)

现在一个 Opensolaris 发行版 or 开发版快照 DVD镜像。将DVD镜像挂载到一个 vnd(4) 设备上。 将kernel和ramdisk文件系统镜像拷贝到 dom0 文件系统内。

代码: 全选

dom0# mkdir /root/solaris
dom0# vnconfig vnd0 osol-1002-124-x86.iso
dom0# mount /dev/vnd0a /mnt
 
## for a 64-bit guest
dom0# cp /mnt/boot/amd64/x86.microroot /root/solaris
dom0# cp /mnt/platform/i86xpv/kernel/amd64/unix /root/solaris
 
## for a 32-bit guest
dom0# cp /mnt/boot/x86.microroot /root/solaris
dom0# cp /mnt/platform/i86xpv/kernel/unix /root/solaris
 
dom0# umount /mnt

确保 vnd(4) 已经配置了。 有些某些原因除非这个DVD镜像作为一个“phy”设备挂载到guest 上,否则启动过程可能会停止。 用一个最小为8G的空分区替换 /dev/wd0k

代码: 全选

memory = 640
name = 'solaris'
disk = [ 'phy:/dev/wd0k,0,w' ]
disk += [ 'phy:/dev/vnd0d,6:cdrom,r' ]
vif = [ 'bridge=bridge0' ]
kernel = '/root/solaris/unix'
ramdisk = '/root/solaris/x86.microroot'
# for a 64-bit guest
extra = '/platform/i86xpv/kernel/amd64/unix - nowin -B install_media=cdrom'
# for a 32-bit guest
#extra = '/platform/i86xpv/kernel/unix - nowin -B install_media=cdrom'

启动guest。

代码: 全选

dom0# xm create -c solaris.cfg
Started domain solaris
                      v3.3.2 chgset 'unavailable'
SunOS Release 5.11 Version snv_124 64-bit
Copyright 1983-2009 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Hostname: opensolaris
Remounting root read/write
Probing for device nodes ...
WARNING: emlxs: ddi_modopen drv/fct failed: err 2
Preparing live image for use
Done mounting Live image

确保网络已经配置好。注意:可能要花一些时间才能显示出xnfo接口。

代码: 全选

opensolaris console login: jack
Password: jack
Sun Microsystems Inc.   SunOS 5.11      snv_124 November 2008
jack@opensolaris:~$ pfexec sh
sh-3.2# ifconfig -a
sh-3.2# exit

为 VNC 设置密码,然后启动在安装过程中提供X11显示的 VNC 服务器。

代码: 全选

jack@opensolaris:~$ vncpasswd
Password: solaris
Verify: solaris
jack@opensolaris:~$ cp .Xclients .vnc/xstartup
jack@opensolaris:~$ vncserver :1

从一台远程主机上连接到这个 VNC 服务器。在guest上使用 ifconfig xnf0 来找出正确的有效IP地址。

代码: 全选

remote$ vncviewer 172.18.2.99:1

也可以从能一台远程显示X11的主机上运行安装过程。

代码: 全选

jack@opensolaris:~$ export DISPLAY=172.18.1.1:0
jack@opensolaris:~$ pfexec gui-install

完成 GUI 安装后,系统要求你重新启动。在此之前你需要为新启动文件系统确定 ZFS ID 并更新相应的配置文件。返回guest控制台。

代码: 全选

jack@opensolaris:~$ pfexec zdb -vvv rpool | grep bootfs
                bootfs = 43
^C
jack@opensolaris:~$ 

最终的配置文件应该像这样,请特别注意一下最后一行。

代码: 全选

memory = 640
name = 'solaris'
disk = [ 'phy:/dev/wd0k,0,w' ]
vif = [ 'bridge=bridge0' ]
kernel = '/root/solaris/unix'
ramdisk = '/root/solaris/x86.microroot'
extra = '/platform/i86xpv/kernel/amd64/unix -B zfs-bootfs=rpool/43,bootpath="/xpvd/xdf@0:a"'

重新启动 guest 来校验一下是否工作正常。

代码: 全选

dom0# xm destroy solaris
dom0# xm create -c solaris.cfg
Using config file "./solaris.cfg".
v3.3.2 chgset 'unavailable'
Started domain solaris
SunOS Release 5.11 Version snv_124 64-bit
Copyright 1983-2009 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
WARNING: emlxs: ddi_modopen drv/fct failed: err 2
Hostname: osol
Configuring devices.
Loading smf(5) service descriptions: 160/160
svccfg import warnings. See /var/svc/log/system-manifest-import:default.log .
Reading ZFS config: done.
Mounting ZFS filesystems: (6/6)
Creating new rsa public/private host key pair
Creating new dsa public/private host key pair
 
osol console login:

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-09-02 9:44

在 guest domains 中使用PCI设备
domain0可以指定哪些PCI设备可由其它的domains访问。例如,这可以让一个无特权domain访问一个物理网络接口或者磁盘控制器。不过, 记住,让一个domain访问一个PCI设备等同于允许它直接读写所有的物理内存, 因为PCs没有一个IOMMU来限制内存访问具有DMA能力的设备 。而且, 也不可能提供一个ISA设备给那些非domain0的domains (这因为primary VGA适配器无法输出。 一个guest domain如果企图访问VGA寄存器将会导致混乱)。

这个功能就目前来说仅在NetBSD当前版的 domain0 和 domUs 有效。

将一个 PCI 设备输出给一个domU, 必须在domain0里添加 pciback 驱动。通过 pciback.hide boot 参数把设备传递给 domain0 将附加到 pciback 上,而不是常规的驱动。设备的清单以 (bus:dev.func)这种方式指定 , 这里的 bus 和 dev 是 两位hexadecimal 数值, 而func 是一位数值:

代码: 全选

pciback.hide=(00:0a.0)(00:06.0)

pciback devices会在domain0的启动信息里显示, 而这些设备将列在 /kern/xen/pci 目录下。

要输出给domU的PCI设备以格式 '0000:bus:dev.func' 列在domU配置文件的pci array里

代码: 全选

pci = [ '0000:00:06.0', '0000:00:0a.0' ]

在domU里,会显示一个xpci设备, 将会被附加到一个或多个PCI总线上。然后PCI驱动将常规地附件到PCI总线上。注意,默认的 NetBSD DOMU 内核并没有内嵌任何 PCI 驱动; 为了在domU里是哦那个PCI设备,你必须构建自己的内核。这里有一个内核配置的例子:

代码: 全选

include         "arch/i386/conf/XEN3_DOMU"
#include         "arch/i386/conf/XENU"           # in NetBSD 3.0
 
# Add support for PCI busses to the XEN3_DOMU kernel
xpci* at hypervisor?
pci* at xpci ?
 
# Now add PCI and related devices to be used by this domain
# USB Controller and Devices
 
# PCI USB controllers
uhci*   at pci? dev ? function ?        # Universal Host Controller (Intel)
 
# USB bus support
usb*    at uhci?
 
# USB Hubs
uhub*   at usb?
uhub*   at uhub? port ? configuration ? interface ?
 
# USB Mass Storage
umass*  at uhub? port ? configuration ? interface ?
wd*     at umass?
# SCSI controllers
ahc*    at pci? dev ? function ?        # Adaptec [23]94x, aic78x0 SCSI
 
# SCSI bus support (for both ahc and umass)
scsibus* at scsi?
 
# SCSI devices
sd*     at scsibus? target ? lun ?      # SCSI disk drives
cd*     at scsibus? target ? lun ?      # SCSI CD-ROM drives

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

NetBSD/Xen 相关链接和更多的信息

帖子 leo » 2010-09-02 9:45

相关链接和更多的信息

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-09-02 9:46

NetBSD/xen

图片About NetBSD/xen

NetBSD/xen
About NetBSD/xen
NetBSD/xen is a port of NetBSD to the Xen virtual machine monitor. It was first brought to NetBSD by Christian Limpach and committed to the source tree on March 11th, 2004.

Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. Xen is Open Source software.

See http://www.xen.org/ for more details on Xen.

The current maintainer of NetBSD/xen is Manuel Bouyer.

NetBSD/xen News
2009-03-05: Xen3 PCI pass-through
PCI pass-through support has been added for both domain0 and domU. domain0 kernel gets a pciback PCI drivers, to which device specified in the pciback.hide boot parameter will attach. DomU kernels gets a xpci device, to which pci busses will attach. More details in the NetBSD/xen Howto.
2009-03-05: i386 PAE domain0 support
Missing pieces for a domain0 kernel supporting the i386 PAE extensions has been added to current. A new kernel XEN3PAE_DOM0 should show up in the next HEAD autobuild. This kernel can be used with a i386 PAE or x86_64 hypervisor. The sysutils/xenkernel3 and sysutils/xenkernel33 packages for i386 both provide i386 PAE hypervisor kernels.
2007-12-15: NetBSD/xen Howto updated
The NetBSD/xen Howto has been updated with some details about Xen on amd64.
2007-12-14: NetBSD runs on Xen/amd64
NetBSD current now includes amd64 kernels that will run on top of the x86_64 Xen hypervisor. NetBSD/amd64 can run as both domain 0 and domU, and supports the same features as i386 (including HVM support if the hardware supports it), and in addition can run 32bit guests which uses the PAE extensions.
2006-10-20: update to 3.0.3 and HVM support
Manuel Bouyer announced in a message to the port-xen mailing list that the xentools30 and xenkernel30 packages have been updated to the just-released Xen-3.0.3. A new package, xentools30-hvm, has been committed to pkgsrc-current. It provides the additional tools needed to run unmodified guests under a NetBSD domain0, using Intel VT-x or AMD SVM virtualization extensions. NetBSD, Linux and Windows XP have been successfully booted in a Xen HVM domain.
2006-07-04: New port maintainer
After Manuel Bouyer had already taken over most of the tasks of a port maintainer, due to Christian Limpach's lack of time, he is now the official maintainer of NetBSD/xen.
2006-07-03: NetBSD as Domain0 for Xen3
Manuel Bouyer announced in a message to the port-xen mailing list that NetBSD is finally usable as a Domain0 with version 3 of the Xen virtual machine monitor.
2006-04-07: Xen-3 support pulled up to netbsd-3
Manuel Bouyer pulled the Xen-3 domU support to the netbsd-3 branch. For dom0 support, you'll have to run -current or wait for NetBSD 4.0.
2006-03-22: Xen3 domU is now functional
Manuel Bouyer has continued his work on getting NetBSD to work on Version 3 of the Xen virtual machine monitor over the past few weeks and NetBSD should now be functional on Xen3 [unprivileged domains] with block and network devices.
2005-03-13: Xen 2.0 Howto
A short Xen 2.0 Howto has been made available.
2005-03-10: Xen 2.0 support
Manuel Bouyer has just merged the bouyer-xen2 branch into NetBSD -current; this means that support for Xen 2.0 (both in privileged and unprivileged mode) will be available in NetBSD 3.0. Support for Xen 1.2 has been removed.

头像
lionux
锌 Zn
帖子: 457
注册时间: 2010-02-04 11:09

帖子 lionux » 2010-09-02 18:28

中文的xen不错,感谢leo,当初都是只看命令行部分来做的,有空再尝试一下。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-09-02 19:58

lionux 写了:中文的xen不错,感谢leo,当初都是只看命令行部分来做的,有空再尝试一下。
时间太仓促,有的是胡乱猜的,欢迎大家纠错,我这也是被自己发过的帖子逼的。:rolleyes:

wkx9dragon
锌 Zn
帖子: 493
注册时间: 2010-02-02 18:00

帖子 wkx9dragon » 2010-12-19 18:36

domain U 可以是openbsd dragonflybsd freebsd吗?有成功的吗?

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: NetBSD/xen Howto中文版

帖子 leo » 2011-04-08 6:57

试试 xen4吧,OpenBSD在xen3上有问题,NetBSD肯定没有问题了,我没有试其它的BSD。

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客