在信息技术变化日新月异的今天, Linux 开源系统以其突出的高性价比,稳定性和灵活的跨平台支持,迅速渗透到各个行业的应用领域; Power System 凭借其在性能上的优势一直在服务器领域处于前列。 借助日渐成熟的虚拟化技术,Linux 开源系统和 Power System 将会更加有效的结合,在生产应用中发挥出更大的作用。然而在Power System 上自动部署 Linux 并不像在x86架构下那么为人熟悉,常常会因为各种原因而导致部署失败。本文将用实例介绍其部署特点及应注意的问题,这会使在Power System 上管理维护Linux工作变得简单方便。
本文以在IBM Power 7逻辑分区LPAR( Logic Partition )中部署 Linux (主要发行版 Redhat, SuSE)为例,总结在 Power System 上自动部署 Linux 系统的实践及经验。
一、Power Linux部署技术背景
1、背景简介
Linux 诞生至今,它作为一种开源操作系统,已经可以在大多数计算机体系结构上部署,涉及平台从嵌入式芯片系统到大型超级计算机。
一直以来 Power 服务器都支持 Linux 操作系统,但限于其应用范围,普及度和使用度都不高,而与具体系统部署相关描述就更加寥寥。随着 IBM 宣布在北京成立 Power System Linux 中心,这标志着 Power 服务器将在支持 Linux 企业服务方面发力,越来越多的企业级应用会运行在 Power Linux 上。相应地各种 Linux 系统的安装需求会越来越多,如果能使 Linux 自动部署将会给日常维护工作带来极大的方便。
2、Power System 7逻辑分区的两种运行模式
与 x86 平台不同的是, Power 服务器的硬件可扩展性,硬件虚拟化功能。 本文介绍基于 POWER7 的系统针对逻辑分区可以提供 2 种模式:P6/P6+模式和P7模式。其区别如下表所示:
注:同一台 POWER7 服务器内的不同 LPAR 可以运行在不同模式下。
通过以上对比,不难看出系统运行在 Power 7 模式下会使Power system的各方面性能得到更有效地发挥。
3、Linux对Power System 7支持情况
许多Linux发行版都可以运行在Power系列服务器上,这里主要列举Redhat 和 SuSE 对Power 7支持的具体情况:
Linux在Power 7 逻辑分区上支持处理器及线程情况:
值得注意的几点:
1. SLES10 SP3 and RHEL 5.5 在POWER7上只支持以Power6兼容模式运行
2. SLES 11 and RHEL6 默认情况下在POWER7上只支持以Power7模式运行
3. 运行SLES 11或RHEL 6的逻辑分区,如果以Power6模式从Power6系统上迁移到Power7上,当重新启动系统的时候将被自适应为Power7模式运行
4. 当Power7的逻辑分区被迁移到Power6以后,重启系统以后将以Power6模式运行
#p#
二、Power Linux网络部署原理及方式
1、Power Linux网络部署原理
Power 上 Linux 的网络安装原理与 x86 架构基本类似,不同的是:在系统启动的时,PowerPC 架构系统使用的是 Open Firmware,x86 架构系统使用的是 BIOS。 这种差异就导致Power上无法直接使用 pxelinux 作为网络引导管理器(boot loader)来安装Linux系统,Yaboot 作为 PowerPC 下的网络引导管理器(boot loader)将代替pxelinux完成网络引导安装操作。
Yaboot 是一个针对 PowerPC 的网络引导管理器,主要用于基于Open Firmware 启动引导的机器,包括Apple Macintosh, IBM RS/6000, IBM pSeries and IBM OpenPower。
PowerPC 下的 Linux 网络启动过程,如下图所示:
PowerPC 下的 Linux 网络启动过程
网络启动过程描述:
- 在网络环境准备好后,被安装节点加电启动;
- 被安装节点选择启动方式:硬盘、光盘、网络。图中选择网络启动,发送 dhcp 请求;
- 安装服务器获取 dhcp 请求后,根据 dhcpd.conf 的配置给被安装节点分配IP;
- 通过yaboot获取并启动内核初始化程序;
- 被安装节点内核启动,寻找安装介质并开始安装工作;
- 被安装节点系统安装成功。
2、Power Linux网络部署方式
Power 平台下 Linux 可以选择两种网络安装方式:一种是基于 AIX NIM 服务器,另外一种是基于Linux DHCP 服务器。
两种方式的使用特点具体如下:
基于 AIX NIM 服务器:
- 使用直接的 Bootp 请求
- 不要求提供网卡的 MAC 地址
需要被安装 Linux 的网络启动镜像文件(即,安装光盘目录下文件 images/netboot/ppc64.img 下同)
在 Linux 的网络启动镜像文件不大于32MB的情况下,本安装方式可以工作。
特别注意:当网络启动镜像文件大于32MB时,不得不采用另外的方式进行网络安装
(例如:RHEL6 GA 64位系统的网络启动镜像文件--images/netboot/ppc64.img是大于32MB的,将不能直接采用此文件并基于这种方式网络安装)
基于 Linux DHCP 服务器:
- 使用广播的Bootp 请求
- 要求提供网卡的 MAC 地址
- 使用 Yaboot 定义进行网络启动安装
- 没有网络启动镜像大小限制
根据以上特点,管理员可以根据自己硬件的环境情况,选择合适的安装方式。#p#
三、以Redhat和SuSE为例介绍自动部署及实践
介绍网络自动化部署 Linux 的文章已经很多,这里就不再详细描述安装步骤,请参考相关文章。本节将偏重介绍 Linux 在具体的 Power 逻辑分区网络自动安装时应注意的问题和实践。
1、准备逻辑分区和安装介质
如果在逻辑分区上安装 Linux 系统,需要事先划分逻辑分区,并分配足够大小的硬盘空间。 可以通过购买安装 CD/DVD,或者从网络上下载安装镜像文件。获得安装介质后,将对应安装文件迁移到共享服务器上。
注意:获得介质必须是针对 PowerPC 平台的安装文件;检查实际存放的安装介质路径与NFS服务共享目录保持一致。
2、配置安装服务器
分别以两种安装方式介绍 TFTP/DHCP 的配置情况:
a. 基于NIM服务器:
TFTP资源定义:将 Red Hat/SuSE Linux 网络引导镜像,从安装介质中复制到 /tftpboot 下,如下所示:
- root@nim:/tftpboot> ls -l *
- -rw-r--r-- 1 root system 11333732 Nov 15 2012 rhel5u5-netboot.img
- -rw-r--r-- 1 root system 11612524 Nov 15 2012 rhel5u6-netboot.img
- -rw-r--r-- 1 root system 15006880 Aug 27 17:19 rhel5u7-netboot.img
- -rw-r--r-- 1 root system 9512595 Nov 15 2012 sles10-sp3-inst32
- -rw-r--r-- 1 root system 10682935 Nov 15 2012 sles10-sp3-inst64
- -rw-r--r-- 1 root system 10082439 Nov 15 2012 sles10-sp4-inst32
- -rw-r--r-- 1 root system 11307427 Sep 9 18:08 sles10-sp4-inst64
- -rw-r--r-- 1 root system 19809567 Sep 9 18:18 sles11-inst64
- -rw-r--r-- 1 root system 23733099 Sep 9 19:20 sles11-sp1-inst64
BOOTP配置定义:
- #/etc/bootptab:
- test1-rhel5:bf=/tftpboot/test1-rhel5:ip=192.168.0.10:ht=ethernet:sa=192.168.0.100:sm=255.255.255.0:
- test2-sles10:bf=/tftpboot/test2-sles10:ip=192.168.0.11:ht=ethernet:sa=192.168.0.100:sm=255.255.255.0:
- root@nim:/tftpboot> ls -l test*
- lrwxrwxrwx 1 root system Sep 9 18:15 test1-rhel5 -> rhel5u5-netboot.img
- lrwxrwxrwx 1 root system Sep 9 18:30 test2-sles10 -> sles10-sp3-inst64
注:检查 /etc/tftpaccess.ctl 文件,确认网络安装需访问的目录定义生效
- # NIM access for network boot
- allow:/tftpboot
在每次更改 Bootp 配置之后,需要运行如下命令使新的配置生效。
- refresh -s inetd
b. 基于 Linux DHCP服务器:
TFTP资源定义:
- root@dhcp:/tftpboot> tree /tftpboot
- |
- |--pSeries/
- | |-- rhel
- | | |-- vmlinuz
- | | `-- ramdisk.image.gz
- | |-- sles
- | | `-- sles11-sp2-inst64
- | `-- yaboot
- `-- yaboot.conf
DHCP配置情况:
- #/etc/dhcp/dhcpd.conf
- option domain-name "test.power.com";
- option domain-name-servers 192.168.0.8;
- option routers 192.168.0.1;
- ddns-update-style none;
- ignore unknown-clients;
- allow bootp;
- subnet 192.168.0.0 netmask 255.255.255.0 {
- default-lease-time 86400;
- max-lease-time 604800;
- host test1-rhel5 {
- next-server 192.168.0.102;
- filename "pSeries/yaboot";
- hardware ethernet AA:BB:CC:DD:11:22;
- fixed-address 192.168.0.10;
- }
- host test2-sles10 {
- next-server 192.168.0.102;
- filename "pSeries/yaboot";
- hardware ethernet AA:BB:CC:DD:11:33;
- fixed-address 192.168.0.11;
- }
- }
Yaboot的配置定义:
- default=test1-rhel5
- timeout=100
- image=pSeries/rhel/vmlinuz #指定内核镜像文件路径
- label=test1-rhel5
- initrd=pSeries/rhel/ramdisk.image.gz#指定内存镜像文件路径append="ks=nfs:9.181.0.102:/export/ksFiles/test1-rhel5.ks.cfg ksdevice=eth0\
- initrd=pSeries/rhel/ramdisk.image.gz\
- dns=192.168.0.8 ip=192.186.0.10 gateway=192.186.0.1 netmask=255.255.255.0\
- method=nfs:9.181.0.102:/export/redhat5u5p\
- keymap=us lang=en_GB.UTF-8 vnc"#指定kickstart文件及网络安装参数
- read-only
- image=pSeries/rhel/sles11-sp2-inst64#指定网络引导内核镜像文件路径
- label=test2-sles10#定义安装标签append="autoyast=nfs://192.186.0.102:/export/autoyast/test2-sles10.yast.xml\
- dns=9.181.2.101\install=nfs://192.186.0.102:/export/SLES11SP2\
- hostip=192.186.0.11 gateway=192.186.0.1 netmask=255.255.255.0"#指定AutoYaST2文件及网络安装参数
- #此处添加”\”仅为显示需要,实际配置中均为连续一行。
3、NFS服务定义:
共享对应安装介质存放目录,为网络安装提供安装介质连接。
- root@dhcp:/tftpboot> exportfs
- /export <world>
#p#
4、自动安装应答文件kickstart/AutoYaST:
定义自动安装应答文件是自动部署中的重要环节。kickstart/AutoYaST2分别是Redhat和SuSE下的自动化安装管理工具,在此工具中不仅可以定义几乎所有交互安装时需要的信息(包括指定分区大小,需要安装软件等),还可以定义在安装之前或之后执行自定义的脚本。这让系统安装操作范围得到很大的扩展,使得系统部署工作可以很轻松地满足各种系统安装需求。
关于这两个工具的使用说明,读者可以访问本文给出的相关连接进行了解,下面分别给出 Redhat 的kickstart 和 SuSE 的AutoYaST2 两个实例模板
- #test1-rhel5.ks.cfg
- install
- nfs --server 192.168.0.102 --dir /export/redhat5u5p
- key --skip
- lang en_US.UTF-8
- network --device eth0 --bootproto static --ip 192.168.0.10 --netmask 255.255.255.0 --gateway 192.168.0.1 --nameserver 192.168.0.8 --hostname test1-rhel5
- rootpw 123456
- firewall --disabled
- authconfig --enableshadow --enablemd5
- selinux --permissive
- timezone --utc Asia/Shanghai
- reboot
- bootloader --location=partition --driveorder=sda --append="console=hvc0 rhgb quiet"
- clearpart --all --initlabel --drives=sda
- part prepboot --fstype "PPC PReP Boot" --size=10 --ondisk=sda
- part / --fstype ext3 --size=1024 --ondisk=sda
- part swap --size=2048 --ondisk=sda
- part pv.5 --size=100 --grow --ondisk=sda
- volgroup basevg --pesize=32768 pv.5
- logvol /tmp --fstype ext3 --name=tmp --vgname=basevg --size=1024
- logvol /opt --fstype ext3 --name=opt --vgname=basevg --size=1024
- logvol /usr --fstype ext3 --name=usr --vgname=basevg --size=2976
- logvol /var --fstype ext3 --name=var --vgname=basevg --size=2048
- logvol /home --fstype ext3 --name=home --vgname=basevg --size=1024
- %packages
- @admin-tools
- @base
- @core
- @editors
- @base-x
- @gnome-desktop
- %post
- echo "search test.power.com" > /etc/resolv.conf
- echo "nameserver 192.168.0.8" >> /etc/resolv.conf
- BOOT=`nvsetenv | grep boot-device | sed s/:.*$/,0/ | cut -d '=' -f 2`
- nvsetenv boot-device $BOOT
- #test2-sles10.yast.xml 由于篇幅限制,本例在保证定义完整情况下对具体配置有所删减,请使用时参考相关文档
- <?xml version="1.0"?>
- <!DOCTYPE profile SYSTEM "/usr/share/autoinstall/dtd/profile.dtd">
- <profile xmlns="http://www.suse.com/1.0/yast2ns" xmlns:config="http://www.suse.com/1.0/configns">
- <configure>
- <networking>
- <interfaces config:type="list">
- <interface>
- #在此处定义网络配置信息,具体请格式参考AutoYaST2文档
- </interface>
- </interfaces>
- </networking>
- <scripts>
- #可以在此处定义安装前/后执行的脚本,具体请格式参考AutoYaST2文档
- </scripts>
- </configure>
- <install>
- <bootloader>
- <global>
- <activate>true</activate> <boot_chrp_custom>/dev/sda1</boot_chrp_custom>
- </global>
- <loader_type>ppc</loader_type>
- </bootloader>
- <general>
- <clock>
- <hwclock>localtime</hwclock>
- <timezone>Asia/Shanghai</timezone>
- </clock>
- </general>
- <partitioning config:type="list">
- <drive>
- <device>/dev/sda</device>
- <initialize config:type="boolean">true</initialize>
- <use>all</use>
- </drive>
- </partitioning>
- <runlevel>
- <default>3</default>
- </runlevel>
- <users config:type="list">
- <user>
- <encrypted config:type="boolean">false</encrypted>
- <home>/root</home>
- <shell>/bin/bash</shell>
- <uid>0</uid>
- <user_password>123456</user_password>
- <username>root</username>
- </user>
- </users>
- <software>
- <packages config:type="list">
- <package>perl-Digest-MD4</package>
- </packages>
- <patterns config:type="list">
- <pattern>Basis-Devel</pattern>
- <pattern>x11-64bit</pattern>
- </patterns>
- </software>
- </install>
- </profile>
5、HMC中网络启动逻辑分区
本文介绍在HMC中使用 lpar_netboot 命令,通过指定网络引导服务器来启动逻辑分区。
详细命令如下所示:
启动test1-rhel5
- lpar_netboot -f -i -T off -t ent -s auto -d auto -S 192.168.0.100 -G 192.168.0.1 -C 192.168.0.0 "LPAR01" "test1-rhel5" "POWER01"
启动test2-sles10
- lpar_netboot -f -i -T off -t ent -s auto -d auto -S 192.168.0.100 -G 192.168.0.1 -C 192.168.0.0 "LPAR02" "test1-sles10" "POWER01"
通常情况下,在运行启动命令大约十几分钟后,整个安装部署工作将完成。你将得到一个全新的运行在Power System 7上的按照模板定制好的pLinux环境。
四、Linux在Power System上的自动部署经验总结
本文从Power Linux的技术背景介绍出发,分析了Linux在Power虚拟化环境自动部署的原理及方式,并以具体安装实例来说明自动部署的要点和使用网络安装命令的实践,极大简化了系统安装的操作步骤,为Power平台的Linux部署提供有力的技术支持。
本文着重介绍了Linux在Power system上自动部署的特点和常见问题及相应解决办法,并结合实例详细说明 PowerPC 下的系统引导管理器-- Yaboot 及其在网络安装中的使用方法。
【作者简介】曲家富(系统工程师),任职于某大型外资IT企业,从事系统管理工作,专注于系统自动化部署。