版 1
ftpd
固定粗体
To see the contents of the filemy_next_bestselling_novel
in your current working directory, enter thecat my_next_bestselling_novel
command at the shell prompt and press Enter to execute the command.
Press Enter to execute the command.Press Ctrl+Alt+F1 to switch to the first virtual terminal. Press Ctrl+Alt+F7 to return to your X-Windows session.
Mono-spaced Bold
. For example:
File-related classes includefilesystem
for file systems,file
for files, anddir
for directories. Each class has its own associated set of permissions.
Choose Mouse Preferences. In the Buttons tab, click the Left-handed mouse check box and click to switch the primary mouse button from the left to the right (making the mouse suitable for use in the left hand).from the main menu bar to launchTo insert a special character into a gedit file, choose from the main menu bar. Next, choose from the Character Map menu bar, type the name of the character in the Search field and click . The character you sought will be highlighted in the Character Table. Double-click this highlighted character to place it in the Text to copy field and then click the button. Now switch back to your document and choose from the gedit menu bar.
Mono-spaced Bold Italic
or Proportional Bold Italic
To connect to a remote machine using ssh, typessh
at a shell prompt. If the remote machine isusername
@domain.name
example.com
and your username on that machine is john, typessh john@example.com
.Themount -o remount
command remounts the named file system. For example, to remount thefile-system
/home
file system, the command ismount -o remount /home
.To see the version of a currently installed package, use therpm -q
command. It will return a result as follows:package
.
package-version-release
When the Apache HTTP Server accepts requests, it dispatches child processes or threads to handle them. This group of child processes or threads is known as a server-pool. Under Apache HTTP Server 2.0, the responsibility for creating and maintaining these server-pools has been abstracted to a group of modules called Multi-Processing Modules (MPMs). Unlike other modules, only one module from the MPM group can be loaded by the Apache HTTP Server.
Mono-spaced Roman
并显示为:
books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs
Mono-spaced Roman
,但以下面的形式出现和突出:
package org.jboss.book.jca.ex1; import javax.naming.InitialContext; public class ExClient { public static void main(String args[]) throws Exception { InitialContext iniCtx = new InitialContext(); Object ref = iniCtx.lookup("EchoBean"); EchoHome home = (EchoHome) ref; Echo echo = home.create(); System.out.println("Created Echo"); System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); } }
virt-manager
、libvirt
和 virt-viewer
进行安装。
定制软件包(如果需要)
%packages
部分附加以下软件包组:
%packages @kvm
yum
安装 KVM 管理程序kvm
软件包。kvm
软件包中含有 KVM 内核模块,它可在默认 Linux 内核中提供 KVM 管理程序。
kvm
软件包,请运行:
# yum install kvm
python-virtinst
virt-install
命令。
libvirt
libvirt
是一个可与管理程序互动的 API 程序库。libvirt
使用 xm
虚拟化构架以及 virsh
命令行工具管理和控制虚拟机。
libvirt-python
libvirt
API 提供的界面。
virt-manager
virt-manager
,也称 Virtual Machine Manager,它可为管理虚拟机提供图形工具。它使用 libvirt
程序库作为管理 API。
# yum install virt-manager libvirt libvirt-python python-virtinst
virt-install
进行此操作。本章论述了这两种方法。
virt-install
命令从命令行创建虚拟客户端。virt-install
可以交互方式使用,也可以使用脚本从而自动生成虚拟机。将 Kickstart 文件与 virt-install
共同使用即可进行虚拟机的自动安装。
virt-install
工具提供很多选项,它们可提供该命令行。要查看选项完整列表请运行:
$ virt-install --help
virt-install
man page 还记录了每个命令选项和重要变量。
qemu-img
是一个关联命令,可在 virt-install
前用来配置存储选项。
--vnc
是一个重要选项,它可为客户端安装打开图形窗口。
rhel3support
的红帽企业版 Linux 3 客户端。这个示例使用的是 KVM 管理程序。
# virt-install --accelerate --hvm --connect qemu:///system \ --network network:default \ --name rhel3support --ram=756\ --file=/var/lib/libvirt/images/rhel3support.img \ --file-size=6 --vnc --cdrom=/dev/sr0
# virt-install --name Fedora11 --ram 512 --file=/var/lib/libvirt/images/Fedora11.img \ --file-size=3 --vnc --cdrom=/var/lib/libvirt/images/Fedora11.iso
virt-manager
即虚拟机管理器,是创建和管理虚拟客户端的图形工具。
# virt-manager &
virt-manager
会打开图形用户界面窗口。没有根特权或者没有配置 sudo
的用户无法使用某些功能,其中包括 按钮,就是说您无法创建新的虚拟客户端。
kernel-xen
内核,则「半虚拟」选项就会是灰色的。
HTTP
、FTP
或者 NFS
。安装介质 URL 必须含有 Fedora 安装树。这个安装树是使用 NFS
、FTP
或者 HTTP
托管。可使用主机中的网络服务或者另一个镜像托管网络服务和文件。
.iso
文件),挂载 CD-ROM 映像并使用以上协议之一托管挂载的文件。
/var/lib/xen/images/
目录中。SELinux 禁止在其它任何位置保存基于文件的映像。如果您以 enforcing 模式运行 SELinux,则请在 第 7.1 节 “SELinux 和虚拟化” 参考安装客户端的详情。
/var/lib/xen/images/
。如果您要使用不同的位置(比如在本示例中使用 /xen/images/
),请确定将其添加到 SELinux 策略中并在您继续安装前对其进行重新标记(后面会介绍如何修改 SELinux 策略)。
virt-manager
创建客户端的一般过程。第 3 章 客户端操作系统安装过程 中有安装各种通用操作系统的分解说明。
创建新桥接
/etc/sysconfig/network-scripts
目录中创建新网络脚本。这个示例创建了名为 ifcfg-installation
的文件,它生成名为 installation
的桥接。
# cd /etc/sysconfig/network-scripts/ # vim ifcfg-installation DEVICE=installation TYPE=Bridge BOOTPROTO=dhcp ONBOOT=yes
TYPE=Bridge
, is case-sensitive. It must have uppercase 'B' and lower case 'ridge'.
Start the new bridge. # ifup installation
brctl show
命令查看系统中网络桥接的详情。
# brctl show bridge name bridge id STP enabled interfaces installation 8000.000000000000 no virbr0 8000.000000000000 yes
virbr0
是 libvirt
在默认以太网设备中用于网络地址转换(NAT)的默认桥接。
在新桥接中添加接口
BRIDGE
参数,使用在前一步中创建的桥接名称。
# Intel Corporation Gigabit Network Connection DEVICE=eth1 BRIDGE=installation BOOTPROTO=dhcp HWADDR=00:13:20:F7:6E:8E ONBOOT=yes
# service network restart
brctl show
命令验证添加的接口:
# brctl show bridge name bridge id STP enabled interfaces installation 8000.001320f76e8e no eth1 virbr0 8000.000000000000 yes
安全性配置
iptables
to allow all traffic to be forwarded across the bridge.
# iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT # service iptables save # service iptables restart
iptables
rules. In /etc/sysctl.conf
append the following lines:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
sysctl
# sysctl -p /etc/sysctl.conf
安装前重新启动 libvirt
libvirt
daemon.
# service libvirtd reload
virt-install
安装,请附加 --network=bridge:installation
安装参数,其中 installation
是您桥接的名称。对于 PXE 安装请使用 --pxe
参数。
# virt-install --accelerate --hvm --connect qemu:///system \ --network=bridge:installation --pxe\ --name EL10 --ram=756 \ --vcpus=4 --os-type=linux --os-variant=rhel5 --file=/var/lib/libvirt/images/EL10.img \
选择 PXE
选择桥接
开始安装
kernel-xen
内核。
virt-manager
的步骤请参考 第 2.2 节 “使用 virt-manager 创建客户端”。
virt-install
工具的命令行创建半虚拟客户端。--vnc
选项显示图形安装。这个示例中的客户端名称为 rhel5PV
,磁盘映像文件为 rhel5PV.dsk
,红帽企业版 Linux 5 安装树的本地镜像为 ftp://10.1.1.1/trees/RHEL5-B2-Server-i386/
。使用您系统和网络的准确值替换这些值。
# virt-install -nrhel5PV
-r 500 \ -f /var/lib/libvirt/images/rhel5PV.dsk
-s 3 --vnc -p \ -lftp://10.1.1.1/trees/CentOS5-B2-Server-i386/
DHCP
(如下所示),也可以使用静态地址:
Installation Number
字段输入:
rhn_register
命令确认您的 fedora 网络帐户详情。rhn_register
命令需要根访问。
# rhn_register
virt-install
时会选择客户端名称。如果您使用默认示例,则该名称为 rhel5PV
。
virsh reboot rhel5PV
virt-manager
,选择您客户端的名称,点击 ,然后点击 。
kdump
。
Open virt-manager
virt-manager
. Launch the application from the menu and submenu. Alternatively, run the virt-manager
command as root.
Select the hypervisor
qemu
.
Start the new virtual machine wizard
Name the virtual machine
Choose a virtualization method
Select the installation method
Locate installation media
/var/lib/libvirt/images/
目录。其它位置可能需要额外配置 SELinux,详情请参考 第 7.1 节 “SELinux 和虚拟化”。
Storage setup
/var/lib/libvirt/images/
目录中。请为您的虚拟客户端分配足够的存储。为您的虚拟客户端及其所需应用程序分配足够的空间。
按 继续。
Network setup
Memory and CPU allocation
Verify and start guest installation
安装 Linux
Starting virt-manager
为您的虚拟系统命名
选择虚拟化方法
选择安装方法
/var/lib/libvirt/images/
目录。其它任何位置可能需要对 SELinux 的额外配置,详情请参考 第 7.1 节 “SELinux 和虚拟化”。
/var/lib/xen/images/
目录中。SELinux 禁止在其它任何位置保存基于文件的映像。如果您以 enforcing 模式运行 SELinux,则请在 第 7.1 节 “SELinux 和虚拟化” 参考安装客户端的详情。
/var/lib/libvirt/images/
。如果您要使用不同的位置(比如在本示例中使用 /images/
),请确定将其添加到 SELinux 策略中并在您继续安装前对其进行重新标记(后面会介绍如何修改 SELinux 策略)。
Network setup
HAL
,当您在 Windows 安装中看到对话框时,请选择 '普通 i486 平台
' 标签(您可以使用 Up 和 Down 箭头键在选项中进行滚动选择)。
# virsh start WindowsGuest
WindowsGuest
是您的虚拟机名称。
virsh reboot WindowsGuestName
重启该客户端。这样通常可使得安装继续进行。您重启虚拟机后会看到如下信息:Setup is being restarted
。
virt-install
命令安装全虚拟 Windows 服务器 2003 客户端。可使用 virt-install
替换 virt-manager
。这个过程与 第 3.3 节 “将 Windows XP 作为全虚拟客户端安装” 中所述 Windows XP 安装类似。
virt-install
安装 Windows 服务器 2003,将其作为 Windows 客户端控制台迅速打开 virt-viewer
窗口。使用 virt-install
安装 Windows 服务器 2003 客户端示例如下:
virt-install
命令启动安装。
# virt-install -hvm -s 5 -f /var/lib/libvirt/images/windows2003spi1.dsk \ -n windows2003sp1 -cdrom=/ISOs/WIN/en_windows_server_2003_sp1.iso \ -vnc -r 1024
Standard PC
作为 「计算机类型」。在 Windows 服务器 2003 虚拟客户端中需要更改 「计算机类型」。
Open virt-manager
virt-manager
. Launch the application from the menu and submenu. Alternatively, run the virt-manager
command as root.
Select the hypervisor
qemu
.
Start the new virtual machine wizard
Name the virtual machine
Choose a virtualization method
Select the installation method
Locate installation media
/var/lib/libvirt/images/
目录中。其它位置可能需要对 SELinux 进行额外配置,详情请参考 第 7.1 节 “SELinux 和虚拟化”。
Storage setup
/var/lib/libvirt/images/
目录中。请为您的虚拟客户端及其所需程序分配足够空间。
按 继续。
Network setup
Memory and CPU allocation
Verify and start guest installation
安装 Windows
dd
命令创建软盘映像文件。使用正确的软盘设备名称及磁盘名称替换 /dev/fd0。
# dd if=/dev/fd0 of=~/legacydrivers.img
virt-manager
创建的客户端,该客户端使用位于 /var/lib/libvirt/images/rhel5FV.img
的映像运行全虚拟红帽企业版 Linux 安装。在这个示例中使用 Xen 管理程序。
virsh
命令为您的客户端映像生成 XML 配置文件。
# virsh dumpxml rhel5FV > rhel5FV.xml
# dd if=/dev/zero of=/var/lib/libvirt/images/rhel5FV-floppy.img bs=512 count=2880
<disk type='file' device='floppy'> <source file='/var/lib/libvirt/images/rhel5FV-floppy.img'/> <target dev='fda'/> </disk>
# virsh stop rhel5FV
# virsh create rhel5FV.xml
dd
命令创建稀疏文件。因为有数据完整性和性能问题,所以不建议使用稀疏文件。创建稀疏文件的速度较快,并可用来进行测试,但不应在产品环境中使用。
# dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M seek=4096 count=0
# dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M count=4096
Guest1
,该文件保存在用户主目录中。
# virsh dumpxmlGuest1
> ~/Guest1
.xml
Guest1.xml
)。找到以 "disk=
" 开始的条目。这个条目类似如下:
>disk type='file' device='disk'< >driver name='tap' type='aio'/< >source file='/var/lib/libvirt/images/Guest1.img'/< >target dev='xvda'/< >/disk<
disk=
最后的条目来添加附加存储。确定为虚拟块设备指定了设备名称,且该名称还未在配置文件中使用。以下是添加名为 FileName.img
的文件作为基于文件的存储容器的条目示例:
>disk type='file' device='disk'< >driver name='tap' type='aio'/< >source file='/var/lib/libvirt/images/Guest1.img'/< >target dev='xvda'/< >/disk< >disk type='file' device='disk'< >driver name='tap' type='aio'/< >source file='/var/lib/libvirt/images/FileName.img'/< >target dev='hda'/< >/disk<
# virsh create Guest1.xml
FileName.img
作为设备 /dev/hdb
。这个设备需要在该客户端中进行格式化。在该客户端中,将整个设备分为一个主分区,然后格式化该设备。
n
添加新分区。
# fdisk /dev/hdb Command (m for help):
p
添加主分区。
Command action e extended p primary partition (1-4)
1
选择第一个分区。
分区号(1-4):1
Enter
输入默认首柱面。
首柱面(1-400,默认为 1):
Enter
则分配整个磁盘。
尾柱面或者 +size、+sizeM、+sizeK(2-400,默认为 400):
t
选择分区类型。
命令(m 为帮助):t
1
。
分区号(1-4):1
83
选择 Linux 分区。
Hex 代码(输入 L 列出代码):83
命令(m 为帮助):w
命令(m 为帮助):q
ext3
文件系统格式化新分区。
# mke2fs -j /dev/hdb
# mount /dev/hdb1 /myfiles
multipath
配置该设备,如果需要则在该主机中永久保留。
virsh attach
命令。使用您的客户端名称替换 myguest
,使用要添加的设备替换 /dev/hdb1
,使用客户端中该设备的位置替换 hdc
。hdc
必须是一个未使用的设备名称。在 Windows 客户端中也使用 hd*
标记,客户端可正确识别该设备。
--type hdd
参数。
--type floppy
参数。
# virsh attach-diskmyguest
/dev/hdb1
hdc
--driver tap --mode readonly
/dev/hdb
,在 Windows 中名为 D: drive
。这个设备可能需要格式化。
/etc/scsi_id.config
文件。
options=-b
行。
# options=-b
options=-g
udev
配置为假设所有附加的 SCSI 都会返回 UUID。
scsi_id -g -s /block/sd*
。例如:
# scsi_id -g -s /block/sd* 3600a0b800013275100000015427b625e
/dev/sdc
的 UUID。
scsi_id -g -s /block/sd*
命令输出的 UUID 与访问该设备的计算机中的一致。
/etc/udev/rules.d
目录中创建名为 20-names.rules
的文件。添加到同一文件中的所有规则都使用相同的格式。规则格式如下:
KERNEL="sd*", BUS="scsi", PROGRAM="/sbin/scsi_id -g -s", RESULT=UUID
, NAME=devicename
UUID
和 devicename
。这是如上示例中的一个规则:
KERNEL="sd*", BUS="scsi", PROGRAM="/sbin/scsi_id -g -s", RESULT="3600a0b800013275100000015427b625e", NAME="rack4row16"
udev
守护进程现在为该规则中的 UUID 搜索所有名为 /dev/sd*
的设备。当将匹配的设备连接到系统后,会根据该规则为这个设备分配一个名称。UUID 为 3600a0b800013275100000015427b625e 的设备会以 /dev/rack4row16
的形式出现。
/etc/rc.local
中附加这一行:
/sbin/start_udev
/etc/scsi_id.config
、/etc/udev/rules.d/20-names.rules
和 /etc/rc.local
文件中的更改复制到所有相关主机中。
/sbin/start_udev
multipath
软件包用于在计算机和存储设备间有超过一个物理路径的系统。multipath
为附加到 Linux 系统的网络存储设备提供容错、故障切换以及改进的性能。
multipath
环境中部署 LUN 持久性,需要为您的多路径设备定义别名。每个存储设备都有一个 UUID,它是作为别名的密钥使用。请使用 scsi_id
命令识别设备的 UUID。
# scsi_id -g -s /block/sdc
/dev/mpath
目录中生成。在下面的示例中 /etc/multipath.conf
文件定义了 4 个设备:
multipaths { multipath { wwid 3600805f30015987000000000768a0019 alias oramp1 } multipath { wwid 3600805f30015987000000000d643001a alias oramp2 } mulitpath { wwid 3600805f3001598700000000086fc001b alias oramp3 } mulitpath { wwid 3600805f300159870000000000984001c alias oramp4 } }
/dev/mpath/oramp1
、/dev/mpath/oramp2
、/dev/mpath/oramp3
和 /dev/mpath/oramp4
。输入后,设备的 WWID 将与其新名称匹配,并在重启后保留。
attach-disk
参数的 virsh
命令。
# virsh attach-disk [domain-id] [source] [target] --driver file --type cdrom --mode readonly
source
和 target
参数分别是主机和客户端中文件和设备的路径。source
参数可以是到 ISO 文件的路径或者到 /dev
目录中设备的路径。
# setenforce 1
AutoFS
、NFS
、FTP
、HTTP
、NIS
、telnetd
、sendmail
等等。
/var/lib/libvirt/images/
目录中。如果您要为您的虚拟机使用不同的目录,请确定将该目录添加到您的 SELinux 策略中并在开始安装前对其进行重新标记。
vsftpd
服务器。
/var/lib/libvirt/images
目录中。
NewVolumeName
,位置在名为 volumegroup
的卷组中。
# lvcreate -nNewVolumeName
-L5G
volumegroup
NewVolumeName
逻辑卷,比如 ext3。
# mke2fs -j /dev/volumegroup/NewVolumeName
/etc
、/var
、/sys
)或者主目录中(/home
或者 /root
)。这个示例使用名为 /virtstorage
的目录。
# mkdir /virtstorage
# mount/dev/volumegroup/NewVolumeName
/virtstorage
semanage fcontext -a -t xen_image_t "/virtualization(/.*)?"
semanage fcontext -a -t virt_image_t "/virtualization(/.*)?"
/etc/selinux/targeted/contexts/files/file_contexts.local
文件中添加一行,以便使更改持久。添加的行可能类似如下:
/virtstorage(/.*)? system_u:object_r:xen_image_t:s0
/virtstorage
)以及其中的所有文件改为 xen_image_t
(restorecon
和 setfiles
读取 /etc/selinux/targeted/contexts/files/
中的文件)。
# restorecon -R -v /virtualization
# semanage fcontext -a -t xen_image _t -f -b /dev/sda2 # restorecon /dev/sda2
xend_disable_t
在未修改的模式中设置 xend
。最好是为单一守护进程而不是整个系统禁用此保护。建议您不要将广泛使用的目录重新标记为 xen_image_t
。
libvirt
安装都提供即时到虚拟机的基于 NAT 的连接性,这也被称为“默认虚拟网络”。使用 virsh net-list --all
命令验证其可用性。
# virsh net-list --all Name State Autostart ----------------------------------------- default active yes
# virsh net-define /usr/share/libvirt/networks/default.xml
/usr/share/libvirt/networks/default.xml
中定义的
# virsh net-autostart default Network default marked as autostarted
# virsh net-start default Network default started
libvirt
默认网络运行后,您将会看到独立的桥接设备。这个设备没有添加任何物理接口,因为它使用 NAT 和 IP 转发与外界连接,因此不要添加新接口。
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.000000000000 yes
libvirt
可添加 iptables
规则,该规则允许所有进入和来自附加到 virbr0
设备的客户端流量,该设备可处于 INPUT
、FORWARD
、OUTPUT
和 POSTROUTING
链中。libvirt
随后试图启用 ip_forward
参数。其它一些程序可能会禁用 ip_forward
,因此最佳选择是在 /etc/sysctl.conf
中添加以下内容。
net.ipv4.ip_forward = 1
<interface type='network'> <source network='default'/> </interface>
<interface type='network'> <source network='default'/> <mac address='00:16:3e:1a:b3:4a'/> </interface>
/etc/xen/xend-config.sxp
文件并更改以下行禁用默认 Xen 网络桥接:
(network-script network-bridge)
(network-script /bin/true)
# chkconfig NetworkManager off # chkconfig network on # service NetworkManager stop # service network start
ifcfg-*
脚本中添加 "NM_CONTROLLED=no
"。
/etc/sysconfig/network-scripts
目录:
# cd /etc/sysconfig/network-scripts
ifcfg-eth0
定义已被设定为桥接一部分的物理网络接口:
DEVICE=eth0 # change the hardware address to match the hardware address your NIC uses HWADDR=00:16:76:D6:C9:45 ONBOOT=yes BRIDGE=br0
MTU
变量配置设备的最大传输单位(MTU)。
MTU=9000
/etc/sysconfig/network-scripts
目录中创建名为 ifcfg-br0
和类似的新网络脚本。br0
是桥接名称,它可以是任何名称,只要该文件名称与 DEVICE 参数一致即可。
DEVICE=br0 TYPE=Bridge BOOTPROTO=dhcp ONBOOT=yes DELAY=0
TYPE=Bridge
, is case-sensitive. It must have uppercase 'B' and lower case 'ridge'.
# service network restart
iptables
to allow all traffic to be forwarded across the bridge.
# iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT # service iptables save # service iptables restart
iptables
rules. In /etc/sysctl.conf
append the following lines:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
sysctl
# sysctl -p /etc/sysctl.conf
libvirt
daemon.
# service libvirtd reload
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.000000000000 yes br0 8000.000e0cb30550 no eth0
virbr0
桥接。不要试图将物理设备附加到 virbr0
。virbr0
桥接只用于网络地址转换(NAT)连接性。
下载驱动程序
/usr/share/virtio-win/
目录中安装安装光驱映像 virtio-win.iso
。
安装半虚拟驱动程序
virt-manager
添加光驱映像请参考 过程 9.1, “使用 virt-manager
在 Windows 客户端中挂载光驱映像”。
virt-manager
在 Windows 客户端中挂载光驱映像yum
安装半虚拟驱动程序软件包,那么这个 .iso 文件的位置就是 /usr/share/xenpv-win
。
viostor.vfd
附加为一个软盘
Windows Server 2003
Windows Server 2008
virtio
驱动程序而不是虚拟 IDE 驱动程序。这个示例编辑了 libvirt 配置文件。另外使用 virt-manager
、virsh attach-disk
或者 virsh attach-interface
可添加使用半虚拟驱动程序的新设备 在新设备中使用 KVM 半虚拟驱动程序。
<disk type='file' device='disk'> <source file='/var/lib/libvirt/images/disk1.img'/> <target dev='hda' bus='ide'/> </disk>
virtio
可让该条目使用半虚拟设备。
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/disk1.img'/>
<target dev='hda' bus='virtio'/>
</disk>
virt-manager
创建使用 KVM 半虚拟驱动程序的新设备。
virsh attach-disk
或者 virsh attach-interface
命令可附加使用半虚拟驱动程序的设备。
virt-manager
中双击客户端名称打开虚拟客户端。
xend
管理客户端xend-config.sxp
来指定操作参数。下面是您可以在 xend-config.sxp
配置文件里启用或禁用的参数:
项目 | Description |
---|---|
(console-limit)
|
决定控制台服务器的内存缓冲限制 xend_unix_server,并根据域分配数值。
|
(min-mem)
|
决定为 domain0 保留的最小内存数量(以 MB 为单位),如果为 0,则值不变化。
|
(dom0-cpus)
|
决定 domain0 使用的 CPU 数量(默认情况下至少分配一个 CPU)。
|
(enable-dump)
|
决定当发生崩溃时启用转储(默认为 0)。
|
(external-migration-tool)
|
决定用来处理外部设备迁移的脚本或应用程序。脚本必须位于
etc/xen/scripts/external-device-migrate 。
|
(logfile)
|
决定日志文件的位置(默认为
/var/log/xend.log )。
|
(loglevel)
|
过滤日志模式值:DEBUG、INFO、WARNING、ERROR 或 CRITICAL(默认为 DEBUG)。
|
(network-script)
|
决定启用联网环境的脚本(脚本必须位于
etc/xen/scripts 目录)。
|
(xend-http-server)
|
启用 http stream 数据包管理服务器(默认为 no)。
|
(xend-unix-server)
|
启用 unix 域套接字服务器(套接字服务器是一个通信终点,它处理底层的网络连接以及接受或拒绝转入的连接)。默认值为 yes。
|
(xend-relocation-server)
|
启用用于跨机器迁移的重定向服务器(默认为 no)。
|
(xend-unix-path)
|
指定
xend-unix-server 命令输出数据的位置(缺省是 var/lib/xend/xend-socket )
|
(xend-port)
|
决定 http 管理服务器使用的端口(默认为 8000)。
|
(xend-relocation-port)
|
决定重定向服务器所使用的端口(默认为 8002)。
|
(xend-relocation-address)
|
决定允许迁移的主机地址。默认值为
xend-address 。
|
(xend-address)
|
决定域套接字服务器绑定的地址。默认为允许所有连接。
|
service xend start
service xend stop
service xend restart
service xend status
xend
chkconfig
命令在 initscript
中添加 xend
。
chkconfig --level 345 xend
xend
。
ntpd
服务:
# service ntpd start
# chkconfig ntpd on
ntpd
服务应该可以在各种情况下最小化时钟偏移造成的影响。
constant_tsc
标签,那么您的 CPU 就有恒定时间戳计数器。要确定您的 CPU 是否有 constant_tsc
标签,请运行以下命令:
$ cat /proc/cpuinfo | grep constant_tsc
constant_tsc
字节。如果没有输出结果,请按以下步骤执行。
constant_tsc
字节,则请禁用所有电源管理特性(BZ#513138)。每个系统都有多个用来计时的计时器。TSC 在主机中不稳定,有时是由于更改 cpufreq
、deep C state 或者迁移到拥有更迅速 TSC 的主机所致。要停止 deep C state,即停止 TSC,请在主机 grub 的内核引导选项中添加 "processor.max_cstate=1
":
term Fedora (vmlinuz-2.6.29.6-217.2.3.fc11)
root (hd0,0)
kernel /vmlinuz-vmlinuz-2.6.29.6-217.2.3.fc11 ro root=/dev/VolGroup00/LogVol00 rhgb quiet processor.max_cstate=1
cpufreq
(只在没有 cpufreq
的主机中需要),请编辑 /etc/sysconfig/cpuspeed
配置文件并将 MIN_SPEED
和 MAX_SPEED
变量改为可用的最高频率。有效上限请查看 /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies
文件。
红帽企业版 Linux | 附加客户端内核参数 |
---|---|
使用半虚拟时钟的 5.4 AMD64/Intel 64 | 不需要附加参数 |
没有半虚拟时钟的 5.4 AMD64/Intel 64 | divider=10 notsc lpj=n |
使用半虚拟时钟的 5.4 x86 | 不需要附加参数 |
没有半虚拟时钟的 5.4 x86 | divider=10 clocksource=acpi_pm lpj=n |
5.3 AMD64/Intel 64 | divider=10 notsc |
5.3 x86 | divider=10 clocksource=acpi_pm |
4.8 AMD64/Intel 64 | notsc divider=10 |
4.8 x86 | clock=pmtmr divider=10 |
3.9 AMD64/Intel 64 | 不需要附加参数 |
3.9 x86 | 不需要附加参数 |
/use pmtimer
virsh
命令可将客户端迁移到另一台主机中。migrate
命令接受以下格式的参数:
# virsh migrate --live GuestName DestinationURL
GuestName
parameter represents the name of the guest which you want to migrate.
DestinationURL
parameter is the URL or hostname of the destination system. The destination system must run the same version of Fedora, be using the same hypervisor and have libvirt
running.
test1.bne.redhat.com
迁移至 test2.bne.redhat.com
。请为您的环境更改主机名。这个示例迁移了名为 CentOS4test
的虚拟机。
确定客户端正在运行
test1.bne.redhat.com
中确定 CentOS4test
正在运行:
[root@test1 ~]# virsh list Id Name State ---------------------------------- 10 CentOS4 running
迁移客户端
test2.bne.redhat.com
。在目的地 URL 结尾添加 /system
告知 libvirt 您需要完全访问权限。
# virsh migrate --live CentOS4test qemu+ssh://test2.bne.redhat.com/system
等待
virsh
只报告出错信息。客户端仍将在源主机中继续运行直至全部迁移完成。
确定客户端已到达目的主机
test2.bne.redhat.com
中确认 CentOS4test
正在运行:
[root@test2 ~]# virsh list Id Name State ---------------------------------- 10 CentOS4 running
virt-manager
迁移使用 KVM 的客户端。
ssh
、TLS 和 SSL 远程管理您的虚拟化客户端。
ssh
软件包提供加密网络协议,可向远程虚拟化服务器安全发送管理功能。本方法使用 libvirt
通过 SSH 连接安全管理远程机器。所有验证都通过 SSH 公钥加密法和密码或者由您的本地 SSH 代理获得的密码短语进行。另外,每个客户端虚拟机的 VNC 控制台都将通过 SSH 连接。
virt-manager
配置 SSH 访问。virt-manager
的机器中有一个公钥对。如果您已经配置了 ssh
,请跳过这个命令。
$ ssh-keygen -t rsa
virt-manager
需要在每个运行 libvirt
的远程机器中有一个公钥副本。请使用 scp
命令从您要用来进行远程管理的机器中复制文件 $HOME/.ssh/id_rsa.pub
:
$ scp $HOME/.ssh/id_rsa.pub root@somehost:/root/key-dan.pub
ssh
命令连接到远程机器并将您复制的文件添加到认证的密钥列表中。如果远程主机中的根用户还没有认证的密钥列表,请确定正确设定了该文件的权限。
$ ssh root@somehost
# mkdir /root/.ssh
# chmod go-rwx /root/.ssh
# cat /root/key-dan.pub >> /root/.ssh/authorized_keys
# chmod go-rw /root/.ssh/authorized_keys
libvirt
守护进程(libvirtd
)libvirt
守护进程提供管理虚拟机的界面。您应该使用安装的 libvirtd
守护进程并在每个需要您管理的远程主机中运行该进程。使用 Fedora kernel-xen
软件包需要 speci TODO。
$ ssh root@somehost
# chkconfig libvirtd on
# service libvirtd start
libvirt
和 SSH 后,您应该可以远程访问并管理您的虚拟机。此时您还应该可以使用 VNC
访问您的客户端。
libvirt
管理连接将为进入的连接打开一个 TCP 端口,这些连接是安全加密的,且根据 x509 证书进行验证。除 VNC 控制台外,还会将每个客户端虚拟机设定为使用带 x509 证书验证的 TLS。
libvirt
服务器设定/etc/xen/xend-config.sxp
启用 TLS。删除配置文件 (vnc-tls 1)
配置参数前的注释标记。
/etc/xen/vnc
目录需要以下三个文件:
ca-cert.pem
- CA 证书
server-cert.pem
- CA 签注的服务器证书
server-key.pem
- 服务器私钥
(vnc-x509-verify 1)
参数的注释符号。
virt-manager
和 virsh
客户端设定libvirt
管理 API,就必须将 CA 以及客户端证书放在 /etc/pki
。有关详情请参考 http://libvirt.org/remote.html。
virt-manager
用户界面,连接到主机时请使用 ' ' 传送机制。
virsh
中 URL 有以下格式:
qemu://hostname.guestname/system
。
xen://hostname.guestname/
。
$HOME/.pki
中,即以下三个文件:
ca-cert.pem
- CA 证书。
libvirt-vnc
或者 clientcert.pem
- CA 签注的客户端证书。
libvirt-vnc
或者 clientkey.pem
- 客户端私钥。
libvirt
支持以下传输模式:
/var/run/libvirt/libvirt-sock
和 /var/run/libvirt/libvirt-sock-ro
(用于只读连接)。
libvirtd
)。必须为 SSH 访问打开端口 22。您应该使用某些 ssh 密钥管理(例如:ssh-agent
程序)或者提示您输入密码。
统一资源标识符(URI)是 virsh
和 libvirt
用来连接到远程主机的工具。URI 还可与带 --connect
参数的 virsh
命令一同使用执行单一命令或者在远程主机中迁移。
driver[+transport]://[username@][hostname][:port]/[path][?extraparameters]
towada
的主机中使用 SSH 传输和 SSH 用户名 ccurran
连接到远程 Xen 管理程序。
xen+ssh://ccurran@towada/
towada
的主机中连接到远程 Xen 监控程序。
xen://towada/
towada
的主机中连接到远程 Xen 监控程序。no_verify=1
告诉 libvirt 不要验证服务器证书。
xen://towada/?no_verify=1
towada
中连接到远程 KVM 管理程序。
qemu+ssh://towada/system
qemu+unix:///system?socket=/opt/libvirt/run/libvirt/libvirt-sock
test+tcp://10.1.1.10:5000/default
名称 | 传输模式 | Description | 示例用法 |
---|---|---|---|
name | 所有模式 | 为 virConnectOpen 功能提供的名称。该名称通常由删除的传输、主机名、端口号、用户名以及远程 URI 中的附加参数组成,但在这个非常复杂的例子中,最好提供单独的名称。 | name=qemu:///system |
命令 | ssh 和 ext | 外部命令。ext 传输需要外部命令。ssh 默认为 ssh。PATH 是为该命令进行搜索。 | command=/opt/openssh/bin/ssh |
插槽 | unix 和 ssh | 到 UNIX 域套接字的路径将覆盖默认路径。在 ssh 传输中会将其传递给远程 netcat 命令(参见 netcat)。 | socket=/opt/libvirt/run/libvirt/libvirt-sock |
netcat | ssh | 远程机器中 netcat 命令的名称。默认为 nc。在 ssh 传输中,libvirt 组成的 ssh 命令类似:command -p port [-l username] hostname netcat -U socket,其中 port、username、hostname 可作为远程 URI 的一部分指定,command、netcat 和 socket 来自外部参数(或者合理的默认设置)。 | netcat=/opt/netcat/bin/nc |
no_verify | tls | 如果设定一个非零值,则会禁止客户端坚持服务器证书。注意:要禁用服务器检查客户端证书或者 IP 地址,您必须更改 libvirtd 配置。 | no_verify=1 |
no_tty | ssh | 如果设定一个非零值,则会在无法自动登录到远程机器时禁止 ssh 询问密码(在使用 ssh-agent 或者类似程序的情况下)。在您无法访问终端时使用这个值 -- 例如在使用 libvirt 的图形程序中。 | no_tty=1 |
目录
vmstat
iostat
lsof
# lsof -i :5900 xen-vncfb 10635 root 5u IPv4 218738 TCP grumble.boston.redhat.com:5900 (LISTEN)
qemu-img
systemTap
crash
xen-gdbserver
sysrq
sysrq t
sysrq w
sysrq c
brtcl
# brctl show bridge name bridge id STP enabled interfaces xenbr0 8000.feffffffffff no vif13.0 pdummy0 vif0.0
# brctl showmacs xenbr0 port no mac addr is local? aging timer 1 fe:ff:ff:ff:ff:ff yes 0.00
# brctl showstp xenbr0 xenbr0 bridge id 8000.feffffffffff designated root 8000.feffffffffff root port 0 path cost 0 max age 20.00 bridge max age 20.00 hello time 2.00 bridge hello time 2.00 forward delay 0.00 bridge forward delay 0.00 aging time 300.01 hello timer 1.43 tcn timer 0.00 topology change timer 0.00 gc timer 0.02 flags vif13.0 (3) port id 8003 state forwarding designated root 8000.feffffffffff path cost 100 designated bridge 8000.feffffffffff message age timer 0.00 designated port 8003 forward delay timer 0.00 designated cost 0 hold timer 0.43 flags pdummy0 (2) port id 8002 state forwarding designated root 8000.feffffffffff path cost 100 designated bridge 8000.feffffffffff message age timer 0.00 designated port 8002 forward delay timer 0.00 designated cost 0 hold timer 0.43 flags vif0.0 (1) port id 8001 state forwarding designated root 8000.feffffffffff path cost 100 designated bridge 8000.feffffffffff message age timer 0.00 designated port 8001 forward delay timer 0.00 designated cost 0 hold timer 0.43 flags
ifconfig
tcpdump
ps
pstree
top
kvmtrace
kvm_stat
xentop
xm dmesg
xm log
virsh
是用来管理客户端及其管理程序的命令行界面工具。
virsh
工具是构建在 libvirt
管理 API 上,可作为 xm 命令和图形客户端管理程序(virt-manager
)的替代工具使用。非特权用户只能以只读模式使用 virsh
。您可使用 virsh
为客户端机器执行脚本。
命令 | Description |
---|---|
help
| 打印基本帮助信息。 |
list
| 列出所有客户端。 |
dumpxml
| 输出客户端 XML 配置文件。 |
create
| 从 XML 配置文件生成客户端并启动新客户端。 |
start
| 启动未激活的客户端。 |
destroy
| 强制客户端停止。 |
define
| 为客户端输出 XML 配置文件。 |
domid
| 显示客户端 ID。 |
domuuid
| 显示客户端 UUID。 |
dominfo
| 显示客户端信息。 |
domname
| 显示客户端名称。 |
domstate
| 显示客户端状态。 |
quit
| 退出这个互动终端。 |
reboot
| 重新启动客户端。 |
restore
| 恢复以前保存在文件中的客户端。 |
resume
| 恢复暂停的客户端。 |
save
| 将客户端当前状态保存到某个文件中。 |
shutdown
| 关闭某个域。 |
suspend
| 暂停客户端。 |
undefine
| 删除与客户端关联的所有文件。 |
migrate
| 将客户端迁移到另一台主机中。 |
virsh
命令管理客户端及管理程序资源:
命令 | Description |
---|---|
setmem
| 为客户端设定分配的内存。 |
setmaxmem
| 为管理程序设定内存上限。 |
setvcpus
| 修改为客户端分配的虚拟 CPU 数目。 |
vcpuinfo
| 显示客户端的虚拟 CPU 信息。 |
vcpupin
| 控制客户端的虚拟 CPU 亲和性。 |
domblkstat
| 显示正在运行的客户端的块设备统计。 |
domifstat
| 显示正在运行的客户端的网络接口统计。 |
attach-device
| 使用 XML 文件中的设备定义在客户端中添加设备。 |
attach-disk
| 在客户端中附加新磁盘设备。 |
attach-interface
| 在客户端中附加新网络接口。 |
detach-device
|
从客户端中分离设备,使用同样的 XML 描述作为命令 attach-device 。
|
detach-disk
| 从客户端中分离磁盘设备。 |
detach-interface
| 从客户端中分离网络接口。 |
virsh
选项:
命令 | Description |
---|---|
version
|
显示 virsh 版本
|
nodeinfo
| 有关管理程序的输出信息 |
virsh
连接到管理程序会话:
# virsh connect {hostname OR URL}
<name>
是管理程序所在的机器名。要初始化只读连接,请在上面的命令中附加 readonly
。
virsh
输出客户端 XML 配置文件:
# virsh dumpxml {domain-id, domain-name or domain-uuid}
stdout
)。您可通过将输出导入文件来保存数据。以下为将输出导入名为 guest.xml
的文件示例:
# virsh dumpxml这个文件GuestID
>guest.xml
guest.xml
可重新生成客户端(请参考 编辑客户端配置文件)。您可以编辑这个 XML 配置文件来配置额外的设备或者部署额外的客户端。有关修改 virsh dumpxml
所生成文件的详情请参考 第 18.1 节 “使用带 virsh 的 XML 配置文件”。
virsh dumpxml
输出示例:
# virsh dumpxml r5b2-mySQL01 <domain type='xen' id='13'> <name>r5b2-mySQL01</name> <uuid>4a4c59a7ee3fc78196e4288f2862f011</uuid> <bootloader>/usr/bin/pygrub</bootloader> <os> <type>linux</type> <kernel>/var/lib/libvirt/vmlinuz.2dgnU_</kernel> <initrd>/var/lib/libvirt/initrd.UQafMw</initrd> <cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet</cmdline> </os> <memory>512000</memory> <vcpu>1</vcpu> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <interface type='bridge'> <source bridge='xenbr0'/> <mac address='00:16:3e:49:1d:11'/> <script path='vif-bridge'/> </interface> <graphics type='vnc' port='5900'/> <console tty='/dev/pts/4'/> </devices> </domain>
dumpxml
选项(请参考 创建虚拟机 XML 转储(配置文件))。使用 virsh
创建客户端:
# virsh create configuration_file.xml
dumpxml
选项(请参考 创建虚拟机 XML 转储(配置文件)),还可在其运行时或者离线时编辑客户端。virsh edit
命令有这个功能。例如:编辑名为 softwaretesting
的客户端:
# virsh edit softwaretesting
$EDITOR
shell 参数(默认将其设定为 vi
)。
virsh
挂起客户端:
# virsh suspend {domain-id, domain-name or domain-uuid}
resume
选项(恢复客户端)才能重新启动客户端。
virsh
的 resume
选项恢复客户端:
# virsh resume {domain-id, domain-name or domain-uuid}
suspend
和 resume
的循环中。
virsh
命令将客户端的当前状态保存到文件中:
# virsh save {domain-name, domain-id or domain-uuid} filename
restore
选项(恢复客户端)来恢复客户端状态。保存与暂停类似,它除了暂停客户端外还保存了客户端的当前状态。
# virsh restore filename
virsh
命令关闭客户端:
# virsh shutdown {domain-id, domain-name or domain-uuid}
on_shutdown
参数可控制重启客户端的行为。
virsh
重启客户端:
#virsh reboot {domain-id, domain-name or domain-uuid}
on_reboot
参数控制重启客户端的行为。
virsh
强制客户端停止:
# virsh destroy {domain-id, domain-name or domain-uuid}
virsh destroy
命令可破坏客户端文件系统。客户端无法响应时请只使用 destroy
选项。对于半虚拟客户端,请使用 shutdown
选项(关闭客户端)。
# virsh domid {domain-name or domain-uuid}
# virsh domname {domain-id or domain-uuid}
# virsh domuuid {domain-id or domain-name}
virsh domuuid
命令输出示例:
# virsh domuuid r5b2-mySQL01 4a4c59a7-ee3f-c781-96e4-288f2862f011
virsh
命令可显示指定客户端的信息:
# virsh dominfo {domain-id, domain-name or domain-uuid}
virsh dominfo
命令的输出示例:
# virsh dominfo r5b2-mySQL01 id: 13 name: r5b2-mysql01 uuid: 4a4c59a7-ee3f-c781-96e4-288f2862f011 os type: linux state: blocked cpu(s): 1 cpu time: 11.0s max memory: 512000 kb used memory: 512000 kb
# virsh nodeinfo
virsh nodeinfo
命令输出示例:
# virsh nodeinfo CPU model x86_64 CPU (s) 8 CPU frequency 2895 Mhz CPU socket(s) 2 Core(s) per socket 2 Threads per core: 2 Numa cell(s) 1 Memory size: 1046528 kb
virsh
显示客户端列表以及当前状态:
# virsh list
--inactive
选项列出不活动的域(已经被定义但目前不活动的域),以及
--all
选项列出所有客户端。例如:
# virsh list --all Id Name State ---------------------------------- 0 Domain-0 running 1 Domain202 paused 2 Domain010 inactive 3 Domain9600 crashed
virsh list
输出结果分类成以下 6 个状态之一(如下)。
running
状态是指目前在 CPU 中活跃的客户端。
blocked
的客户端是被阻断的,且目前没有运行或者无法运行。这是由于客户端正在等待 I/O(传统的等待状态)或者客户端处于睡眠模式。
paused
状态列出暂停的域。如果管理员在 virt-manager
、xm pause
或者 virsh suspend
中使用 pause 标记就会出现这种状态。当客户端处于暂停状态时,它仍会消耗内存和其它资源,但无法从管理程序中调度 CPU 资源。
shutdown
状态是用于处于关闭过程中的客户端。向该客户端发送关闭信号并使其温和地停止操作。这可能不适用于所有客户端操作系统,有些操作系统对这些信号没有响应。
dying
状态的域是处于濒死状态,即该域还没有完全关闭或者崩溃。
crashed
状态的客户端是在运行时失败且无法再运行。这个状态只在将客户端配置为崩溃时不重启时出现。
virsh
显示客户端中虚拟 CPU 的信息:
# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
virsh vcpuinfo
命令输出示例:
# virsh vcpuinfo r5b2-mySQL01 VCPU: 0 CPU: 0 State: blocked CPU time: 0.0s CPU Affinity: yy
# virsh vcpupin {domain-id, domain-name or domain-uuid} vcpu, cpulist
vcpu
是虚拟 VCPU 号而 cpulist
列出了 CPU 的物理序号。
virsh
修改分配给客户端的 CPU 数:
# virsh setvcpus {domain-name, domain-id or domain-uuid} count
count
值不能超过创建客户端时指定的数目。
virsh
修改客户端内存分配:
# virsh setmem {domain-id or domain-name} count
virsh domblkstat
显示运行的客户端的块设备统计。
# virsh domblkstat GuestName block-device
virsh domifstat
为运行的客户端显示网络接口统计。
# virsh domifstat GuestName interface-device
virsh
将某个客户端迁移到另一台主机中。将域迁移到另一台主机中。添加 --live 进行实时迁移。migrate
命令接受以下格式的参数:
# virsh migrate --live GuestName DestinationURL
--live
参数是可选的。实时迁移需要添加 --live
参数。
GuestName
parameter represents the name of the guest which you want to migrate.
DestinationURL
parameter is the URL or hostname of the destination system. The destination system must run the same version of Fedora, be using the same hypervisor and have libvirt
running.
virsh
管理虚拟网络。要列出虚拟网络:
# virsh net-list
# virsh net-list Name State Autostart ----------------------------------------- default active yes vnet1 active yes vnet2 active yes
# virsh net-dumpxml NetworkName
# virsh net-dumpxml vnet1 <network> <name>vnet1</name> <uuid>98361b46-1581-acb7-1643-85a412626e70</uuid> <forward dev='eth0'/> <bridge name='vnet0' stp='on' forwardDelay='0' /> <ip address='192.168.100.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.100.128' end='192.168.100.254' /> </dhcp> </ip> </network>
virsh
命令:
virsh net-autostart network-name
— 自动启动指定为 network-name
的网络。
virsh net-create XMLfile
— 使用现有 XML 文件创建并启动新网络。
virsh net-define XMLfile
— 使用现有 XML 文件创建新网络设备但不启动。
virsh net-destroy network-name
— 销毁指定为 network-name
的网络。
virsh net-name networkUUID
— 将指定的 networkUUID
转换为网络名称。
virsh net-uuid network-name
— 将指定的 network-name
转换为网络 UUID。
virsh net-start nameOfInactiveNetwork
— 启动不活跃的网络。
virsh net-undefine nameOfInactiveNetwork
— 删除不活跃网络的定义。
virt-manager
)窗口、对话框及各种的 GUI 控制。
virt-manager
提供管理程序以及您系统和远程机器中客户端的图形视图。您可使用 virt-manager
定义半虚拟和全虚拟客户端。virt-manager
可执行虚拟化管理任务,其中包括:
virt-manager
提供的客户端实时资源使用的图形和统计数据。UUID 字段显示了虚拟机的全局唯一标识符。
virt-manager
详情窗口dom0
)的回送地址(127.0.0.1
)。这样就保证了只有主机中那些有 shell 特权的程序可以通过 VNC 访问 virt-manager 和虚拟机。
virt-manager
的 '粘滞键' 功能来发送这些键序列。您必须按任何修改键(如 Ctrl 或 Alt)三次,这个键才会被激活,直到按了下一个非修饰符键。您可以通过顺序按下 'Ctrl Ctrl Ctrl Alt+F11' 将 Ctrl-Alt-F11 发送给客户端。
virt-manager
会话,请打开 菜单,然后点击 ,并选择 (virt-manager
)。
virt-manager
主窗口。
virt-manager
virt-manager
:
ssh -X host's address
[remotehost]# virt-manager
使用 ssh
管理虚拟机和主机在 第 13.1 节 “使用 SSL 进行远程管理” 中有进一步的论述。
DHCP
范围目录
ftpd
ftpd
virsh
设置客户端,使用 TestServer
在主机引导时自动启动。
# virsh autostart TestServer
Domain TestServer marked as autostarted
--disable
停止客户端自动引导
# virsh autostart --disable TestServer
Domain TestServer unmarked as autostarted
安装 KVM 软件包
# yum install kvm
确定所用内核
uname
命令确定正在运行的内核:
$ uname -r 2.6.23.14-107.fc8xen
2.6.23.14-107.fc8xen
" 内核。如果运行的是默认 "2.6.23.14-107.fc8xen
",请跳过该分步。
将 Xen 内核改为默认内核
grub.conf
文件确定引导的是哪个内核。要更改默认内核请编辑如下所示的 /boot/grub/grub.conf
文件。
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.23.14-107.fc8)
root (hd0,0)
kernel /vmlinuz-2.6.23.14-107.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.23.14-107.fc8.img
title Fedora (2.6.23.14-107.fc8xen)
root (hd0,0)
kernel /xen.gz-2.6.23.14-107.fc8
module /vmlinuz-2.6.23.14-107.fc8xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.23.14-107.fc8xen.img
0
(或者代表默认内核的数字):
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.23.14-107.fc8)
root (hd0,0)
kernel /vmlinuz-2.6.23.14-107.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.23.14-107.fc8.img
title Fedora (2.6.23.14-107.fc8xen)
root (hd0,0)
kernel /xen.gz-2.6.23.14-107.fc8
module /vmlinuz-2.6.23.14-107.fc8xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.23.14-107.fc8xen.img
重启载入新内核
$ lsmod | grep kvm kvm_intel 85992 1 kvm 222368 2 ksm,kvm_intel
kvm
模块和 kvm_intel
模块或者 kvm_amd
模块之一。
安装 Xen 软件包
# yum install kernel-xen xen
确定所用内核
uname
命令确定正在运行的内核。
$ uname -r 2.6.23.14-107.fc8
2.6.23.14-107.fc8xen
" 就是正在系统中运行的内核。这是默认内核。如果内核在结尾处有 xen
(例如 2.6.23.14-107.fc8xen
),那么是 Xen 内核正在运行,这样您就可以跳过下面的子步骤。
将默认内核改为 Xen 内核
grub.conf
文件确定引导的是哪个内核。要更改默认内核请编辑如下所示的 /boot/grub/grub.conf
文件。
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.23.14-107.fc8)
root (hd0,0)
kernel /vmlinuz-2.6.23.14-107.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.23.14-107.fc8.img
title Fedora (2.6.23.14-107.fc8xen)
root (hd0,0)
kernel /xen.gz-2.6.23.14-107.fc8
module /vmlinuz-2.6.23.14-107.fc8xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.23.14-107.fc8xen.img
1
(或者其它代表 Xen 内核的数字):
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.23.14-107.fc8)
root (hd0,0)
kernel /vmlinuz-2.6.23.14-107.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.23.14-107.fc82.6.23.14-107.fc8.img
title Fedora (2.6.23.14-107.fc8xen)
root (hd0,0)
kernel /xen.gz-2.6.23.14-107.fc8
module /vmlinuz-2.6.23.14-107.fc8xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.23.14-107.fc8xen.img
重启载入新内核
uname
命令验证:
$ uname -r 2.6.23.14-107.fc8xen
xen
,那么运行的就是 Xen 内核。
qemu-img
命令行工具是 Xen 和 KVM 用来格式化各种文件系统的。可使用 qemu-img
格式化虚拟客户端映像、附加存储设备以及网络存储。qemu-img
选项及用法如下。
# qemu-img create [-6] [-e] [-b base_image] [-f format] filename [size]
# qemu-img convert [-c] [-e] [-f format] filename [-O output_format] output_filename
qcow
或 cow
时,映像转换可帮助您获得较小的映像。在目的映像中可检测并压缩空白字段。
info
参数显示磁盘映像信息。info
选项的格式如下:
# qemu-img info [-f format] filename
raw
qemu-img info
了解 Unix/Linux 中映像或者 ls -ls
使用的实际大小。
qcow2
qcow
cow
cow
格式的目的只是为了与前面的版本兼容。它无法在 Windows 中使用。
vmdk
cloop
pdflush
进程,即清除进程。pdflush
会杀死进程来释放内存以便系统不至于崩溃。pdflush
可能会销毁导致文件系统出错虚拟客户端或者其他系统进程,并导致虚拟客户端无法引导。
(0.5 * RAM) + (过量使用比例 * RAM) = 推荐 swap 大小
/etc/grub.conf
文件使其使用虚拟化内核。您必须使用 xen
内核应用 Xen 监控程序。复制您现有的 xen
内核条目,确定您复制了所有重要的行,否则您的系统将在引导时 panic(initrd
的长度将为 '0
')。如果您需要 xen
监控程序特定值,您必须将其附加到您 grub 条目的 xen
行中。
grub.conf
条目示例。在您的系统中的 grub.conf
文件可能会有所不同。示例中重要的是从 title
行到下一个新行之间的部分。
#boot=/dev/sda default=0 timeout=15 #splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console title Fedora (2.6.23.14-107.fc8xen) root (hd0,0) kernel /xen.gz-2.6.23.14-107.fc8 com1=115200,8n1 module /vmlinuz-2.6.23.14-107.fc8xen ro root=/dev/VolGroup00/LogVol00 module /initrd-2.6.23.14-107.fc8xen.img
grub.conf
中重要的一点......grub.conf
在从示例中复制前已经进行过手动编辑,那么它看起来可能完全不同。
grub.conf
文件的 xen
行中附加 dom0_mem=256M
。前面示例的 grub 配置文件的修订版本如下:
#boot=/dev/sda default=0 timeout=15 #splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console title Fedora (2.6.23.14-107.fc8xen) root (hd0,0) kernel /xen.gz-2.6.23.14-107.fc8 com1=115200,8n1 dom0_mem=256MB module /vmlinuz-2.6.23.14-107.fc8xen ro root=/dev/VolGroup00/LogVol00 module /initrd-2.6.23.14-107.fc8xen.img
$ grep -E 'svm|vmx' /proc/cpuinfo
vmx
条目,表明是带 Intel VT 扩展的 Intel 处理器:
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
svm
条目,表明是带 AMD-V 扩展的 AMD 处理器:
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm cr8legacy ts fid vid ttp tm stc
flags:
" 内容。
#!/bin/bash declare -i IS_HVM=0 declare -i IS_PARA=0 check_hvm() { IS_X86HVM="$(strings /proc/acpi/dsdt | grep int-xen)" if [ x"${IS_X86HVM}" != x ]; then echo "Guest type is full-virt x86hvm" IS_HVM=1 fi } check_para() { if $(grep -q control_d /proc/xen/capabilities); then echo "Host is dom0" IS_PARA=1 else echo "Guest is para-virt domU" IS_PARA=1 fi } if [ -f /proc/acpi/dsdt ]; then check_hvm fi if [ ${IS_HVM} -eq 0 ]; then if [ -f /proc/xen/capabilities ] ; then check_para fi fi if [ ${IS_HVM} -eq 0 -a ${IS_PARA} -eq 0 ]; then echo "Baremetal platform" fi
virsh capabilites
命令。
macgen.py
。现在您可以在该目录中使用 ./macgen.py
运行该脚本生成新的 MAC 地址。输出应类似如下:
$ ./macgen.py 00:16:3e:20:b0:11 #!/usr/bin/python # macgen.py script to generate a MAC address for virtualized guests on Xen # import random # def randomMAC(): mac = [ 0x00, 0x16, 0x3e, random.randint(0x00, 0x7f), random.randint(0x00, 0xff), random.randint(0x00, 0xff) ] return ':'.join(map(lambda x: "%02x" % x, mac)) # print randomMAC()
python-virtinst
的内嵌模块生成用于客户端配置文件的新 MAC 地址以及 UUID:
# echo 'import virtinst.util ; print\ virtinst.util.uuidToString(virtinst.util.randomUUID())' | python # echo 'import virtinst.util ; print virtinst.util.randomMAC()' | python
#!/usr/bin/env python # -*- mode: python; -*- print "" print "New UUID:" import virtinst.util ; print virtinst.util.uuidToString(virtinst.util.randomUUID()) print "New MAC:" import virtinst.util ; print virtinst.util.randomMAC() print ""
ftpd
vsftpd
为半虚拟客户端或者其它数据库提供对安装树的访问。如果您在安装服务器的过程中还没有安装 vsftpd
,您可以从您安装介质的 Server
目录中获得 RPM 软件包,并使用 rpm -ivh vsftpd*.rpm
安装(请注意:RPM 软件包必须位于您的当前目录中)。
vsftpd
,请使用 vipw
编辑 /etc/passwd
,并将 ftp 用户主目录改为您要为您的半虚拟客户端保存安装树的目录。FTP 用户条目示例如下:
ftp:x:14:50:FTP User:/xen/pub:/sbin/nologin
vsftpd
在系统引导时自动启动,请使用 chkconfig 程序启用 vsftpd
的自动启动。
chkconfig --list vsftpd
确定没有启用 vsftpd
:
$ chkconfig --list vsftpd vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
chkconfig --levels 345 vsftpd on
为运行级别 3、4 和 5 自动启用 vsftpd。
chkconfig --list vsftpd
命令确定在系统引导时会自动启用 vsftdp:
$ chkconfig --list vsftpd vsftpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
service vsftpd start vsftpd
启动 vsftpd 服务:
$service vsftpd start vsftpd Starting vsftpd for vsftpd: [ OK ]
udev
部署 LUN 持久性。在您的系统中部署 LUN 持久性前,请确定您有正确的 UUID。您得到它们后,即可编辑位于 /etc
目录的 scsi_id
文件来配置 LUN 持久性。当您在文本编辑器中打开此文件时,您必须注释出这一行:
# options=-b
# options=-g
scsi_id
命令:
# scsi_id -g -s /block/sdc *3600a0b80001327510000015427b625e*
/etc/udev/rules.d
目录的 20-names.rules
文件。该设备命名规则的格式如下:
# KERNEL="sd*", BUS="scsi", PROGRAM="sbin/scsi_id", RESULT="UUID
", NAME="devicename
"
UUID
和 devicename
。该规则应类似如下:
KERNEL="sd*
", BUS="scsi", PROGRAM="sbin/scsi_id", RESULT="3600a0b80001327510000015427b625e
", NAME="mydevicename
"
/dev/sd*
匹配的设备来检查给定的 UUID。当找到第一个匹配的设备时,它会生成一个设备节点,名为 /dev/devicename
。在这个示例中,该设备节点为 /dev/mydevice
。最后,请在 /etc/rc.local
文件中添加这一行:
/sbin/start_udev
/etc/
目录中的 multipath.conf
文件来定义四个设备别名:
multipath { wwid 3600a0b80001327510000015427b625e alias oramp1 } multipath { wwid 3600a0b80001327510000015427b6 alias oramp2 } multipath { wwid 3600a0b80001327510000015427b625e alias oramp3 } multipath { wwid 3600a0b80001327510000015427b625e alias oramp4 }
/dev/mpath/oramp1
、/dev/mpath/oramp2
、/dev/mpath/oramp3
和 dev/mpath/oramp4
。这些设备将位于 /dev/mpath
目录。这些 LUN 名称会在重启后保留,因为在 LUN的 wwid 中创建了别名。
/sbin/service smartd stop /sbin/chkconfig --del smartd
uuidgen
命令。然后在 vif
条目中您必须为每个客户端定义一个唯一的 MAC 地址(如果您是从现有客户端中复制客户端配置,您可以生成一个脚本来进行处理)。有关 xen 桥接信息,如果您将一个现有客户端配置文件移动到一个新的主机中,您必须更新 xenbr
条目来与您的本地联网配置匹配。对于设备条目,您必须修改 'disk='
部分中的条目使其指向正确的客户端映像。
/etc/sysconfig/network
文件中的 HOSTNAME 条目使其与新客户端的主机名匹配。
/etc/sysconfig/network-scripts/ifcfg-eth0
文件中的 HWADDR
地址使其与 ifconfig eth0
文件的输出匹配,同时如果您要使用静态 IP 地址,您还必须修改 IPADDR
条目。
name
uuid
uuidgen
命令可重新生成一个新的 UUID。UUID 输出示例:
$ uuidgen a984a14f-4191-4d14-868e-329906b211e5
vif
xenbr
条目以符合您的本地联网配置(您可以使用 brctl show
命令获得桥接信息)。
disk=
部分的条目使其指向正确的客户端映像。
/etc/sysconfig/network
HOSTNAME
条目改为客户端的新 hostname
。
/etc/sysconfig/network-scripts/ifcfg-eth0
ifconfig eth0
输出中的硬件地址替换 HWADDR
地址。
IPADDR
条目。
libvirt
编写自定义脚本的程序员和系统管理员提供一些有用信息。
libvirt
编写新应用程序的程序员阅读。
virsh
可以处理 XML 配置文件。您可在使用特殊选项编写大量部署脚本时利用这个优点。您可以添加在 XML 文件中定义的设备来运行半虚拟客户端。例如,要添加一个 ISO 文件作为 hdc
运行客户端,会生成 XML 文件:
# cat satelliteiso.xml <disk type="file" device="disk"> <driver name="file"/> <source file="/var/lib/libvirt/images/rhn-satellite-5.0.1-11-redhat-linux-as-i386-4-embedded-oracle.iso"/> <target dev="hdc"/> <readonly/> </disk>运行
virsh attach-device
命令将 ISO 文件作为 hdc
添加到名为 "satellite" 的客户端中:
# virsh attach-device satellite satelliteiso.xml
/etc/modprobe.conf
中调整回送设备数目。请编辑 /etc/modprobe.conf
文件并在其中添加以下行:
options loop max_loop=64
phy: block device
命令或者 tap:aio
命令。要使用回送设备为全虚拟系统备份客户端,请使用 phy: device
或者 file: file
命令。
cat /proc/cpuinfo | grep vmx svm
。如果命令有输出结果,则启用了虚拟化扩展。如果没有结果,那么您的系统可能没有虚拟化扩展或者没有启用正确的 BIOS 设置。
libvirt
虚拟化 API 的官方网站。
/usr/share/doc/xen-<version-number>
/
是包含有关 Xen 半虚拟化管理程序以及相关管理工具信息的目录,其中包括各种示例配置、硬件特别信息以及当前 Xen 上级用户文档。
man virsh
和 /usr/share/doc/libvirt-<version-number>
— 包含了 virsh
虚拟机管理工具的子命令和选项,还包括有关 libvirt
虚拟化库 API 的综合信息。
/usr/share/doc/gnome-applet-vm-<version-number>
— 监控和管理本地运行的虚拟机的 GNOME 图形化面板 applet 的文档。
/usr/share/doc/libvirt-python-<version-number>
— 提供 libvirt
库的 Python 绑定的细节。libvirt-python
软件包允许 python 开发者用 libvirt
虚拟化管理库编写程序。
/usr/share/doc/python-virtinst-<version-number>
— 提供在虚拟机中帮助开始安装 Fedora 以及 Linux 相关发行本的 virt-install
命令的文档。
/usr/share/doc/virt-manager-<version-number>
— 提供虚拟机管理者(管理虚拟机的图形化工具)的文档。
修订历史 | |||
---|---|---|---|
修订 12.1.3 | Mon Oct 12 2009 | ||
|
dom0
指的是运行 管理程序 的红帽企业版 Linux 主机事件,它可帮助客户端操作系统的虚拟化。Dom0 在物理硬盘中运行并管理为其自身和客户端操作系统分配物理硬件和资源。
domU
是指在主机系统中运行的客户端操作系统(Domain)。
ext2
和 ext3
文件系统识别符、RAID 设备识别符、iSCSI 和 LUN 设备识别符、MAC 地址以及虚拟机识别符。