前阵子,自动化测试系统中关于XenU(即:Xen的PV guest)的cases总是failed,我们那里使用的guest都是几年前做的了(用的是RHEL4.3),所以我就自己研究了一下在最新的Xen下面PV Guest的配置。
经过研究发现,目前最新的Xen 4.x中,PV guest的配置方式大约是有3方式:
1. 传统的也是最流行和推荐的:kernel和initrd放在Dom0中的;
2. 使用pygrub启动
3. 使用pv-grub启动
第1种,是Xen很早就支持的方式了;而第2、3种都是后来加上去的方式,它们的guest kernel都在guest image中,不受Dom0的影响,它们的好处是PV guest相对独立,guest升级kernel可以不受Dom0的影响。
你可能需要了解的基本概念有以下几点:
a. 对于第1种方式,是说kernel放在dom0中,但并不是要和dom0同一个kernel,也可以是另外自己编译的kernel(注意:需要在dom0的/lib/modules/下面有你配置的PV guest kernel所对应的modules文件);
b. 第1种方式中,PV guest启动的kernel和加载的module都是存放在dom0中的。
c. pygrub是Xen提供的一个userspace的Bootloader工具,它是为了实现从domU中存放的kernel启动PV guest,而不需要用在dom0中存放的kernel。
d. 而pv-grub的出现是为了取代pygrub的,它提供一种更为安全的方式去启动PV guest,它需要一个mini的OS(名字可能为:pv-grub-x86_32.gz)。
e. 不管使用哪种方式,由于是PV guest,所以他们的kernel都是经过特殊配置的,比如一些重要的config项目有:CONFIG_XEN=y, CONFIG_XEN_DEBUG_FS=y, CONFIG_PCI_XEN=y, CONFIG_XEN_PCIDEV_FRONTEND=y, CONFIG_XEN_BLKDEV_FRONTEND=y, CONFIG_XEN_NETDEV_FRONTEND=y 等等(当然部分配置为module而不是编译进kernel也是可以的)。
第1种配置文件:xlexample.pvlinux
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# ===================================================================== # Example PV Linux guest configuration # ===================================================================== # Guest name name = "jay-pvlinux" # Kernel image to boot kernel = "/boot/vmlinuz-xen" # Ramdisk (optional) ramdisk = "/boot/initrd-xen.img" # Kernel command line options extra = "root=/dev/xvda1" # Initial memory allocation (MB) memory = 1024 # Number of VCPUS vcpus = 2 # Network devices vif = [ '' ] # Disk Devices disk = [ '/root/jay/ia32e_rhel6u2.img,raw,xvda,rw' ] vfb = [ 'vnc=1,vncpass=' ] |
第2种配置文件:xlexample.pygrub
它的特色就是有bootloader = "/usr/bin/pygrub"的配置,而没有了"kernel="这样的配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# ===================================================================== # Example PV Linux guest configuration # ===================================================================== bootloader = "/usr/bin/pygrub" # Guest name name = "jay-pvlinux" # Initial memory allocation (MB) memory = 1024 # Number of VCPUS vcpus = 2 # Network devices vif = [ '' ] # Disk Devices disk = [ '/root/jay/ia32e_rhel6u2.img,raw,xvda,rw' ] vfb = [ 'vnc=1,vncpass=' ] |
第3种配置文件:xlexample.pvgrub
注意,其中extra = "(hd0,0)/boot/grub/grub.conf" 指的是guest中grub.conf的位置。
而关于,pv-grub-x86_32.gz怎么编译的呢,需要等到今后的博客再简单写一下吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# ===================================================================== # Example PV Linux guest configuration # ===================================================================== # Guest name name = "jay-pvlinux" # pv-grub here kernel = "/usr/lib/xen/boot/pv-grub-x86_32.gz" extra = "(hd0,0)/boot/grub/grub.conf" # pv-grub end # Initial memory allocation (MB) memory = 1024 # Number of VCPUS vcpus = 2 # Network devices vif = [ '' ] # Disk Devices disk = [ '/root/jay/ia32e_rhel6u2.img,raw,xvda,rw' ] vfb = [ 'vnc=1,vncpass=' ] |
对于以上3个PV guest的config文件,都可以用同样的命令创建guest、连接guest的串口、连接guest的vnc(我都加了VNC的配置)。
1 2 3 4 5 6 7 |
[root@jay-linux jay]# xl create xlexample.pvlinux [root@jay-linux jay]# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 2048 32 r----- 20422.1 jay-pvlinux 56 512 2 -b---- 19.8 [root@jay-linux jay]# xl console 56 [root@jay-linux jay]# xl vnc 56 |
怎么检查一个guest里面是运行的PV guest而不是HVM guest呢?
可以检查guest的dmesg信息,检查里面可能有如下类似关键信息:
1 2 3 4 5 6 7 8 9 |
.............. [ 0.000000] Booting paravirtualized kernel on Xen [ 0.000000] Xen version: 4.2-unstable (preserve-AD) .............. [ 0.028998] PCI: setting up Xen PCI frontend stub .............. [ 0.205180] Initialising Xen virtual ethernet driver. [ 0.206173] blkfront: xvda: barrier: enabled .............. |
更多关于pygrub、pv-grub的参考资料如下:
http://wiki.xen.org/wiki/PyGrub
http://wiki.xen.org/wiki/PvGrub
http://wiki.xen.org/wiki/PVGrub_HowTo
您好,我用CentOS6.4 安装Xen环境,其中在DomU启动过程中提示以下
PCI: Warning: Cannot find a gap in the 32bit address range
PCI: Unassigned devices with 32bit resource registers may break!
PCI: Fatal: No config space access function found
ipmi_si: Could not set up I/O space
ipmi_si: Could not set up I/O space
ipmi_si: Could not set up I/O space
不知道该如何解决 (服务器dell r720)
看起来就是一个32bit的问题? dom0 是32bit 还是 64bit? dom0 已经不支持 32bit了,要用64bit的。
博主好,Dom0、DomU都是CentOS6.4 64位的系统,下面是DomU中的错误信息,不知道这个错误对使用有没有影响(服务器为dell r720,RAID卡是H310 )
# dmesg | grep PCI
PCI: Warning: Cannot find a gap in the 32bit address range
PCI: Unassigned devices with 32bit resource registers may break!
Allocating PCI resources starting at 400100000 (gap: 400100000:400000)
PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
PCI: Fatal: No config space access function found
PCI: System does not support PCI
PCI: System does not support PCI
PCI: max bus depth: 0 pci_try_num: 1
pci_hotplug: PCI Hot Plug PCI Core version: 0.5
pciehp: PCI Express Hot Plug Controller Driver version: 0.4
acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
# dmesg | grep ipmi
ipmi message handler version 39.2
ipmi_si: Adding default-specified kcs state machine
ipmi_si: Trying default-specified kcs state machine at i/o address 0xca2, slave address 0x0, irq 0
ipmi_si: Could not set up I/O space
ipmi_si: Adding default-specified smic state machine
ipmi_si: Trying default-specified smic state machine at i/o address 0xca9, slave address 0x0, irq 0
ipmi_si: Could not set up I/O space
ipmi_si: Adding default-specified bt state machine
ipmi_si: Trying default-specified bt state machine at i/o address 0xe4, slave address 0x0, irq 0
ipmi_si: Could not set up I/O space
ipmi_si: Unable to find any System Interface(s)
我的错误跟你完全一样
不过DomU启动,运行没发现什么问题
没啥运行问题,就不管了吧。我最近没研究xen,只有一些明显的问题,我才能帮忙看出来。
已经解决了,这个不是什么问题,
你网站挺棒的!
你是怎么解决的?我这里也遇到了
前面那个留言者估计 找不到了~ 不巧 他没讲解决方法反馈回来