xm 配置文件
xmdomain.cfg 文件包含你必须修改的操作参数,它位于 etc/xen 目录。下面是一些你可以在 xmdomain.cfg 文件里启用或禁止的参数:
| 项目 | 描述 |
|---|---|
| kernel | 决定内核映像的全限定路径 |
| ramdisk | 决定用于初始 ramdisk 的 initrd 的全限定路径 |
| memory | 决定在域启动时所分配的内存数量(以 MB 为单位) |
| name | 决定域的唯一名称 |
| root | 决定域的根设备 |
| nic | 决定域的网络接口卡的数量(缺省为 1) |
| disk | 决定设备块队列的模式 — 三种模式分别是:
· mode – 设备访问模式 · backend-dev – 导出至客户机域的后台域 · frontend-dev – 决定设备怎样在客户机域里出现 |
| vif | 决定虚拟接口队列的模式(每个模式代表一组 name=value 操作)。 |
| builder | 决定构造域的建立者(缺省为 Linux) |
| cpu | 决定域启动时所用的 CPU 序号。0 表示第一个 CPU,1 表示第二个,诸如此类(缺省为 -1)。 |
| cpus | 决定域的 VCPU 上的哪些 CPU 是可执行的 |
| extra | 决定在内核参数行最后所附加的其他信息 |
| nfs_server | 决定用于根设备的 NFS 服务器的 IP 地址 |
| nfs_root | 决定 NFS 服务器的根目录的全限定路径 |
| vcpus | 决定分配给域的虚拟 CPU 数量(缺省为 1) |
| on_shutdown | 设定域关闭(shutdown)的参数来触发 DomU 内部的 graceful 关闭(或 xm shutdown) |
| on_reboot | 设定域关闭的参数来触发 DomU 内部的 graceful 重启(或 xm reboot) |
| on_crash | 指定触发 DomU 崩溃的域关闭参数。 |
表 17.1. xmdomain.cfg 配置文件
17.1.1. 配置 vfb
vfb 是一个被定义为 ’stanza’ 的虚拟帧缓冲。stanza 代表一组 name = value 的操作,它被集成在 xmdomain.cfg.5 文件里,且用逗号隔开。配置文件里的 vfb 条目和下面相似:
vfb = [ "stanza" ] “name1=value1, name2=value2, ”
通过合并 Table 16.2 里显示的选项,你可以进一步配置你的 vfb 环境:
| 项目 | 描述 |
|---|---|
| type | vnc type 选项初始化一个连接至外部 VNC viewer 的 VNC 服务器会话。sdl 选项初始化内部的 viewer。 |
| vncdisplay | 决定所使用的 VNC display 号码(缺省为域的 ID 值)。VNC 服务器侦听的端口是 5900 + display 号码。 |
| vnclisten | VNC 服务器的侦听地址(缺省为 127.0.0.1)。 |
| vncunused | 数字值,如果非零的话,使 VNC 服务器侦听于 5900 之上的第一个未使用的端口。 |
| vncpasswd | 覆盖 Xend 所配置的缺省密码。 |
| display | 启用内部 viewer 使用的显示器(缺省为环境变量 DISPLAY)。 |
| xauthority | 启用内部 viewer 使用的授权文件(缺省为环境变量 XAUTHORITY)。 |
表 17.2. vfb 配置选项
17.2. 用 xm 创建和管理域
你可以使用 xm 程序来创建和管理域。
17.2.1. 连接至域
你可以使用 xm 来连接至域或虚拟机:
xm console domain-id
这使控制台附加到 domain-id 的文本控制台。
17.2.2. 创建域
你可以使用 xm 来创建域:
xm create domain001 [-c]
这创建了一个名为 domain001 的域,域文件位于 /etc/xen/ 目录。[-c] 选项允许你连接至文本控制台来协助解除故障。
17.2.3. 保存域
你可以使用 xm 来保存域:
xm save [domain-id] [statefile]
17.2.4. 终止域
你可以使用 xm 来终止域:
xm destroy [domain-id]
这会立即终止 domain-id。如果你想用另外一种方法来安全地终止这个会话,你可以使用 shutdown 参数。
17.2.5. 关闭域
你可以使用 xm 来关闭任何域:
xm shutdown [domain-id] [ -a | -w ]
[ -a] 选项会关闭系统里的所有域。 [-w] 选项用于等待域的完全关闭。
17.2.6. 恢复域
你可以用 xm 来恢复以前保存的域。
xm restore [state-file]
17.2.7. 挂起域
你可以用 xm 来挂起域:
xm suspend [domain-id]
17.2.8. 使域继续运行
你可以用 xm 来使之前被暂停的域继续运行:
xm resume [domain-id]
17.2.9. 重新启动域
你可以使用 xm 来重启域:
xm reboot [domain-id] [ -a | -w ]
[ -a] 选项将重启系统里所有的域。[-w] 选项用来等待某个域的重启完成。通过修改 xmdomain.cfg 文件里的 on_boot 参数,你可以控制域重新启动的行为。
17.2.10. 域的重命名
你可以用 xm 来给域分配一个新的名字:
xm rename [domain-name] [new domain-name]
域的重命名将保持相同的设置(相同的硬盘、内存等等)
17.2.11. 暂停域
你可以使用 xm 来暂停域:
xm pause [domain-id]
17.2.12. 使域恢复运行
你可以用 xm 来使域恢复运行:
xm unpause [domain-id]
这使得监控程序(hypervisor)可以调度域。
17.2.13. 转换域名到 Domain ID
你可以使用 xm 来把域名转换为 domain ID:
xm domid [domain-name]
17.2.14. 把 Domain ID 转换为域名
你可以使用 xm 把 domain ID 转换为域名:
xm domname [domain-id]
17.2.15. 配置内存分配
你可以使用 xm 来修改域的内存分配:
xm mem-set [domain-id] [count]
注意
分配给域的内存不能够超过你第一次创建域时指定的最大数量。
17.2.16. 配置最大内存数量
你可以用 xm 来修改域的最大内存数量:
xm mem-max [domain-id] [count]
你必须指定 [count](以 MB 为单位)。
17.2.17. 配置 VCPU 数量
你可以使用 xm 来修改域的 VCPU 数量:
xm vcpu-set [domain-id] [count]
你必须指定 [count](以 MB 为单位)。
注意
分配给域的内存不能够超过你第一次创建域时指定的最大数量。
17.2.18. 固定(Pinning)VCPU
你可以用 xm 来固定某个 VCPU:
xm vcpu-pin [domain-id] [vcpu] [cpus]
这里的 [vcpu] 是你希望指定的 VCPU,[cpus] 是目标。固定(Pinning)保证了某些 VCPU 只能运行在某些 CPU 上。
17.2.19. 移植域
你可以使用 xm 来移植域:
xm migrate [domain-id] [host] [options]
这里的 [domain-id] 是你要移植的域, [host] 是目标。 [options] 包括 ——live (或 -1)live 移植,或 ——resource (或 -r)指定移植的最大速度(以 Mbs 为单位)。
要确保成功地移植,你必须保证 xend 守护进程运行在所有的主机域上。所有的主机必须也运行红帽 RHEL 5.0+ 并打开用于移植的 TCP 端口来接受源主机的连接。
17.3. 监控和诊断
17.3.1. 执行核心转储
你可以用xm 来执行现存虚拟机的内存转储。
xm dump-core [-C] [domain-id]
这个命令把虚拟机的内存转储到 /var/xen/dump/ 目录里的 xendump 文件里。你可以用 -C 选项来终止虚拟机。
17.3.2. 实时地对域进行监控
你可以使用 xm 实时地监控域和主机:
xm top [domain-id]
17.3.3. 显示域状态
你可以使用 xm 来显示一个或多个域的活动状态:
xm list [domain-id] [ ——long | ——label]
你可以用名称来指定特定的域。[——long] 选项提供你所指定的域的更详细的信息。 [——label] 选项添加了一个字段来显示 label 状态。输出如下:
Name ID Mem(MiB) VCPUs State Time Label
————————————————
Domain0 0 927 8 r—————— 204.9 INACTIVE
Domain202 1 927 8 s—————— 205.0/command ACTIVE
DomainQ/A 2 927 8 b—————— INACTIVE
Domain9600 3 927 8 c—————— 205.1 ACTIVE
每个 VCPU 有六个域状态:
| 状态 | 描述 |
|---|---|
| running | 列出当前在某个 CPU 上活动的域 |
| blocked | 列出被阻塞的域(当 vcpu 在等待外部事件的发生时,域将被阻塞) |
| paused | 列出被挂起的域 |
| shutdown | 列出正被关闭的域 |
| shutoff | 列出已被完全关闭的域 |
| crashed | 列出崩溃的域 |
| inactive | 列出是不活动实例的域 |
| ——all | 列出是活动或不活动的 vcpu 实例的域 |
表 17.3. 域状态
17.4. 显示运行时间
你可以用 xm 来显示运行时间:
xm uptime [domain-id]
输出如下:
Name ID Uptime
Domain0 0 4:45:02
Domain202 1 3:32:00
Domain9600 2 0:09:14
DomainR&D 3 2:21:41
17.5. 显示 VCPU 信息
你可以用 xm 来显示域的 CPU 信息:
xm vcpu-list [domain-id]
你必须指定你要列出哪些 vcpu。如果没有指定,所有域的 vcpu 都将被列出。
17.6. 显示域信息
你可以使用 xm 来显示主机域信息:
xm info
输出如下:
host : redhat83-157.brisbane.redhat.com
release : 2.6..18-1.2714.el5xen
version : #1 SMP Mon Oct 21 17:57:21 EDT 2006
machine : x86_64
nr_cpus : 8
nr_nodes : 1
sockets_per_node : 2
cores_per_socket : 2
threads_per_core : 2
cpu_mhz : 2992
hw_caps : bfeebbef:20100000:00000000:00000000
total_mememory : 1022
free_memory : 68
xen_major : 3
xen_minor : 0
xen_extra : -unstable
xen_caps : xen-3.0-x86_84
xen_pagesize : 4096
platform_params : virt_start=0xffff88000000000000000000
xen_changeset : unavailable
cc_compiler : gcc compiler version 4.1.1 200060928
cc_compile_by : brewbuilder
cc_compile_domain : build.redhat.com
cc_compile_date : Mon Oct 2 17:00 EDT 2006
xend_config_format : 2
17.7. 显示 TPM 设备
你可以使用 xm 来显示虚拟 TPM 设备:
xm vtpm-list [domain-id] [——long]
[——long] 选项提供了你所指定的域的更详细的信息。
17.8. 显示 xend 日志
你可以使用 xm 来显示 xend 日志的内容:
xm log
输出显示了 xend 的活动记录。
17.9. 显示消息缓冲(Message Buffer)
你可以使用 xm 来查看 xend 的消息缓冲:
xm dmesg
输出显示了 xend 消息缓冲的内容。
17.10. 显示 ACM 状态信息
你可以使用 xm 来显示监控程序(hypervisor)的 ACM 状态信息:
xm dumppolicy [policy.bin]
17.11. 显示 Vnet
你可以用 xm 来查看虚拟网络设备:
xm vnet-list [ -l | ——long]
输出如下:
List Vnets
-l, ——long List Vnets as SXP
17.12. 显示虚拟块设备
你可以用 xm 来查看域的虚拟块设备:
xm block-list [domain-id] [ ——long]
输出将显示你所指定的域的块设备。
17.13. 显示虚拟网络接口
你可以使用 xm 查看域的虚拟网络设备:
xm network-list [domain-id] [ ——long]
输出将显示你所指定的域的网络接口。
7.14. 创建新的虚拟网络设备
你可以使用 xm 来创建一个新的虚拟网络设备:
xm network-attach [domain-id] [script=scriptname] [ip=ipaddr] [mac-macaddr] [bridge=bridge-name] [backend-bedomain-id]
下面是五个可选参数:
| 参数 | 描述 |
|---|---|
| [script=scriptname] | 使用指定的脚本来启动网络 |
| [ip=ipaddr] | 把指定的脚本名传给适配器 |
| [mac-macaddr] | 域以太设备的 MAC 地址 |
| [bridge-bridgename] | 附加 vif 的设备的名称 |
| [backend=bedomain-id] | 后台的域 id |
表 17.4. 参数
17.15. 终止虚拟网络设备
你可以使用 xm 来终止一个现存的虚拟网络设备:
xm network-detach [domain-id] [DevID]
这个命令终止了你所指定的虚拟网络设备。
17.16. 创建新的 Vnet
你可以使用 xm 来创建一个新的 Vnet:
xm vnet-create [configfile]
你必须指定一个配置文件来创建新的 Vnet。
17.17. 终止 Vnet
你也可以使用 xm 来终止现有的 Vnet:
xm vnet-delete [VnetID]
这个命令终止了你指定的 Vnet。
17.18. 创建域安全性标签(Domain Security Label)
你可以使用 xm 来创建一个域安全性标签:
xm addlabel [labelname] [domain-id] [configfile]
17.19. 测试域资源
你可以使用 xm 来测试某个域是否可以访问它自己的资源:
xm dry-run [configfile]
这个命令检查你的配置文件里列出的每个资源。它列出了每个资源的状态和最后的 security decision。
17.20. 显示系统资源
你可以使用 xm 来查看系统资源:
xm resources
输出显示了系统里的域的资源。
17.21. 配置 Credit Scheduling
你可以用 xm 来配置信用调度程序(credit scheduler)的参数:
xm sched-credit -d <domain> [ -w [=WEIGHT] | -c [CAP] ]
你可以用[ -w] 选项配置权重(Weight)。你可以用 [ -c] 选项配置峰值(Cap)。
17.22. 创建一个新的虚拟块设备
你可以使用 xm 来创建一个新的虚拟块设备:
xm block-attach [domain-id] [bedomain-id] [fe-dev] [be-dev] [mode]
即使客户机在运行的时候,你都可以附加(或分离)虚拟设备。下面是五个参数选项:
| 参数 | 描述 |
|---|---|
| [domain-id] | 附加到设备的客户机域的 domain-id。 |
| [be-dev] | 被导出的后台域里的设备 |
| [fe-dev] | 呈现给客户机域的设备 |
| [mode] | 客户机域的设备访问模式 |
| [bedomain-id] | 作为设备宿主的后台域 |
表 17.5. 新块设备参数
17.23. 终止虚拟块设备
你可以用 xm 来销毁一个现有的虚拟块设备:
xm block-detach [domain-id] [DevID]
这个命令销毁了你指定的虚拟块设备。
17.24.1. 删除域安全性标签
你可以用 xm 来删除一个域安全性标签:
xm rmlabel [domain-id] [configfile]
这个命令删除了配置文件里的 acm_policy 标签条目。
17.24. 安全性
17.24.2. 创建资源安全性标签
你可以用 xm 来创建一个资源安全性标签:
xm addlabel [labelname] res [resource] [policy]
17.24.3. 删除资源安全性标签
你可以用 xm 来删除一个资源安全性标签:
mx rmlabel [domain-id] res [resource]
这个命令删除了全局资源文件。
17.24.4. 配置访问控制
红帽虚拟化系统的访问控制由两个主要组件组成。Access Control Policy (ACP) 定义访问规则和安全性标签。当域请求访问资源时,Access Control Module (ACM) 应用这个策略并做出访问控制的决定。ACM 依照域安全性标签决定访问权限。然后,ACP 启用安全性标签和访问规则并把它们分配给域和资源。ACP 使用两个不同的标签管理方式:
| 标签 | 描述 |
|---|---|
| Simple Type Enforcement | ACP 翻译这个标签并把访问权限分配给请求虚拟或物理访问的域。安全策略控制着域之 间的访问并把正确的标签分配给不同的域。在缺省情况下,Simple Type Enforcement 方式是禁止的。 |
| Chinese Wall | Chinese Wall 安全策略控制和响应域的访问请求。 |
表 17.6. ACP 标签管理
策略(policy)是一个本地路径和策略 XML 文件(相对于全局策略根目录)的列表。例如,域文件 chinese_wall.client_V1 从属于策略文件 /example/chinese_wall.client_v1.xml。
红帽虚拟化包括以下这些参数,这允许你管理安全策略和给域分配标签:
17.24.5. 创建策略
你可以用 xm 来创建一个二进制策略:
xm makepolicy [policy]
这个命令创建了二进制策略并保存为二进制文件 [policy.bin]。
17.24.6. 加载策略
你可以使用 xm 来加载一个二进制策略:
xm loadpolicy [policy.bin]
17.24.7. 为引导配置文件创建策略
你可以使用 xm 来建立一个二进制策略并把它加入到引导配置文件里:
xm cfgbootpolicy [kernelversion]
这个命令把二进制策略复制到 /boot 目录并修改 /boot/grub/menu.1st 文件里相对应的行。
17.24.8. 创建标签
你可以使用 xm 来创建一个标签:
xm addlabel [configfile] [policy]
把一个安全性标签加入到域配置文件里。它也校验不同的策略定义是否与对应的标签名相匹配。
17.24.9. 显示策略标签
你可以使用 xm 来查看策略标签:
xm labels [policy] [type=dom | res | any]
这个命令显示了你在创建策略时指定的类型的标签(缺省是 dom)。
17.24.10. 显示域安全性标签
你可以使用 xm 来查看域的安全性标签:
xm getlabel domain-id [configfile]
17.24.11. 显示资源安全性标签
你可以用 xm 来查看资源的安全性标签:
xm getlabel res [resource]
17.24.12. 配置访问控制的安全性
要启用红帽虚拟化访问安全性,你必须修改 xen_source__dir/Config.mk 里的这些参数:
ACM_SECURITY ?= y
ACM_DEFAULT_SECURITY_POLICY ? =
ACM_CHINESE_WALL__AND_SIMPLE_TYPE_ENFORCEMENT_POLICY
17.24.13. 编译安全性策略
这个例子演示了怎样成功地编译一个安全性策略:
xm makepolicy chinesewall_ste.client_v1
这个命令创建了 /etc/xen/acm-security/policies/example/chinesewall_ste 目录下的 client_v1.map 和 client_v1.bin 文件。
17.24.14. 加载安全性策略
你可以使用 xm 来激活 client_v1.bin :
xm loadpolicy example.chwall_ste.client_v1
17.24.15. 配置引导安全性策略
你可以使用 xm 配置引导装载程序来加载 client_v1.bin :
xm cfgbootpolicy chinesewall_ste.client_v1
这个命令使 ACM 使用这个标签来引导红帽虚拟化系统。
17.24.16. 显示安全性标签
你可以使用 xm 来查看定义的标签:
xm labels chinesewall_ste.client_v1 type=dom
下面的输出显示了所有 dom 的策略:
dom_StorageDomain
dom_SystemManagement
dom_NetworkDomain
dom_QandA
dom_R&D
17.24.17. 附加安全性标签
你可以用 xm 来把安全性标签附加到域配置文件(这个示例使用了 SoftwareDev 标签):
xm addlabel myconfig.xm dom_SoftwareDev
附加安全性标签确保了域不会与其他 non-SoftwareDev 用户域共享数据。这个示例包括了 myconfig.xm 配置文件,它代表了一个运行与 SoftwareDev 的基础架构相关的任务的域。
编辑相应的配置文件并校验 addlabel 命令是否正确地把 access_control 条目(以及相关的参数)添加到了这个文件的最后:
kernel = “/boot/vmlinuz — 2.6.16 —xen”
ramdisk=”/boot/U1_SoftwareDev_ramdisk.img”
memory = 164
name = “SoftwareDev”
vif = [ '' ]
dhcp = “dhcp”
access_control = [policy=example.chwall_ste.client_v1, label=dom_SoftwareDev]
如果输出不正确,请进行相应的修改并保存这个文件。