级别: 中级 Wayne Huang (huangw@us.ibm.com), 高级解决方案实现架构师 , IBM Huy-Suong Bui (huysuong@us.ibm.com), AIX 项目经理, IBM Brad Cobb (bcobb@us.ibm.com), AIX Collaboration Center 高级技术顾问, IBM
2004 年 12 月 02 日 2006 年 7 月 31 日 更新 在当今的多系统、多分区 IT 环境中,生成唯一系统标识符是非常重要的。许可证密钥管理程序只是用于计算许可证密钥的唯一系统标识符的一个示例。随着基于 IBM Systems 的 IBM POWER4 和 POWER5 处理器的出现,高数值的最大分区(专用的和共享的)是一个很受欢迎的特性。
然而,在为每个物理系统配置大量分区的同时,每个分区还需要唯一标识符,而这很可能会导致标识命名空间的冲突。
IBM AIX 5L™ Version 5.3 引入了一些新的算法以生成唯一系统标识符。本文首先概述当前的 AIX 5L Version 5.1 和 Version 5.2 发布版中的系统标识符生成,然后介绍一些新的 AIX 5L Version 5.3 命令和应用程序编程接口 (API)。本文面向解决方案提供者、原始设备制造商 (OEM) 和 IT 用户。
引言
从本质上看,生成新的系统标识号涉及到使用 AIX® 设备树中的字段。然后,使用相应的算法来计算系统标识号和字符串。下面的列表给出了作为算法输入所使用的设备树根节点的属性:
- TTTT
- TTTT 是 4 位数字 (0-9) 的计算机类型。
- CC
- CC 是 2 位字母数字 (0-9, A-Z) 的生产厂家。
- SSSSS
- SSSSS 是 5 位字母数字 (0-9, A-Z) 的序列号。另外,请参见表 2。
- P
- P 是 16 进制数值 (0-9, A-F) 的分区号。
请注意,这种设计方法和算法仅适用于 IBM Systems 的系统,这些系统的型号属性以“IBM”开头,系统标识属性以“IBM,nn”(其中“nn”为两位的 10 进制数字)开头。原始设备制造商 (OEM) 系统可以使用本文作为参考,以生成他们自己的系统标识。
目前的 AIX 5.2 和 AIX 5.1 系统标识命令
您可以通过几种方法来收集系统标识数据。要唯一地标识一台计算机或一个分区,需要使用下列元素中的一个或多个:
- 计算机序列号
- 生产厂家代码
- 计算机类型
- 计算机型号
- 分区号(如果处于逻辑分区 (LPAR)、动态逻辑分区 (DLPAR) 或 IBM 微分区™ 环境中)
本文将在后面的部分中描述常用的 AIX 5L Version 5.2 和 Version 5.1 命令以及访问系统标识值的应用程序编程接口 (API)。
注意:如果您对 AIX uname 命令及其输出不是很熟悉,我们建议您重复执行本文中的示例以领会实际的输出。
-
uname -m 给出计算机序列号(已过时)。我们不建议使用该命令,因为它并非始终唯一地标识一个系统。
-
uname -u 给出厂家代码和计算机标识符。
-
uname -M 给出类型和型号名称。
-
uname -L 显示 LPAR 号和 LPAR 名称。
如表 1 所示,在物理计算机标识标签为 7043-10CABFD 的 RS/6000® Model 260 计算机上执行下面的命令:
表 1. 现有的系统标识命令及其输出
| 命令 | 输出 | uname -u | IBM,01 10 CABFD(出于可读性的原因,插入了一些空格。) | uname -M | IBM,7043-260 | uname -L | -1 Null(没有 LPAR) | uname -Mu | IBM,7043-260 IBM,01 10 CABFD | uname -MuL | IBM,7043-260 IBM,01 10 CABFD -1 NULL | uname -m | 00C CABFD 4C00(注意:我们不建议使用这个命令。) |
在这台计算机上,nid 为 cabfd 4c。尽管可以使用 uname -m,但不建议这样做,因为对于唯一系统标识来说,5 位数字的序列号并非总是足够的。
正如您在前面的示例中所看到的,uname -u 给出了厂家代码和计算机序列号,以便更好地标识一个系统。通过 uname -Mu 和 uname -MuL 命令,您可以添加其他的数据项,如计算机类型和计算机型号号码。
-L 标志给出了 LPAR 信息。在这个 AIX 5L Version 5.1 和 Version 5.2 的实验中,我们使用了不带分区支持的双处理器 RS/6000 Model 260,因此 -L 的输出是 -1 和 NULL。
对于不具有逻辑分区的 AIX 5L Version 5.1 和 Version 5.2 级别的 IBM System p5 计算机,可以使用下面的命令生成建议的唯一系统标识符:
在前一个示例中,这个命令标志生成了输出: IBM,7043-260 IBM,01 10 CABFD |
该输出字符串包含了下列元素:
- 计算机类型 (7043)
- 型号 (260)
- OF 前缀 (IBM,01)
- 厂家代码 (10)
- 序列号 (CABFD)
用于检查系统标识的其他命令和系统接口
lsattr 命令可以用来查询 AIX 系统标识符。分别在 RS/6000 Model 260 和 IBM System p5 520 计算机上进行下面两项测试:
lsattr -El sys0 -a systemid (RS/6000 Model 260)
systemid IBM,01 10 CABFD Hardware system identifier False
lsattr -El sys0 -a systemid (IBM System p5 520)
systemid IBM,02 10 F190F Hardware system identifier False
|
还可以通过一组系统 API 来查询系统标识信息:
uname() and unamex() xutsname.nid in
struct xutsname xutsname.lognid in
struct xutsname
|
您可以在更新的编程接口规范 部分中找到关于这些结构和访问函数的完整解释。
更新的 AIX 系统标识
IBM 的产品改变了序列号生成的规则。IBM 正过渡为:
- 包含比 16 进制数值 (0-9, A-F) 更多内容的序列号
- 针对每个厂家代码的独立序列号
另外,IBM Systems 的计算机已从单桌面计算机发展为具有共享逻辑分区和同步多线程 (SMT) 支持的大型服务器。生成唯一系统标识符的要求也相应地有所提高。下面是正确地支持系统标识符生成的要求列表:
- POWER4 系统必须具有最多 32 个分区,从 1 到 32 进行编号。
- POWER5 系统必须具有最多 254 个分区,从 1 到 254 进行编号。
- 将来的系统可能需要支持 1023 个分区。
- 将来的系统必须支持未来的分区号,从 1 到大约 1 百万。
使用字符串“TTTTMMMCCSSSSS”来标识系统,其中:
- TTTT 是 4 位数字 (0-9) 的计算机类型。
- MMM 是 3 位字母数字 (0-9, A-Z) 的型号号码。
- CC 是 2 位字母数字 (0-9, A-Z) 的生产厂家。
- SSSSS 是 5 位字母数字的序列号。
要唯一地标识一个系统,可能需要使用前面的列表中的一个或多个元素来构造其标识符。
表 2 介绍了一些系统中唯一系统标识符的生成方式:
表 2. 当前一些系统的唯一标识符的生成
| 描述 | 唯一标识符 | 序列号 | | 现有的 IBM System p5(以前为 pSeries®)系统 | “TTTTSSSSS” | 0-9,A-F | | IBM System p5 系统 | “SSSSS” | 0-9,A-F | | IBM BladeCenter® JS20 | “TTTTCCSSSSS” | 0-9,A-F
(例如:E、I、J、O、Q、S、U)
09,AF |
注意:
唯一标识符 列定义了系统生成唯一标识符所需的“TTTTMMMCCSSSSS”的子集:
- 值“SSSSS”表示不需要计算机类型、型号号码和生产厂家来生成唯一系统标识符。
- 值“TTTTSSSSS”表示不需要型号号码和生产厂家来生成唯一系统标识符。
- 值“TTTTCCSSSSS”表示不需要型号号码来生成唯一系统标识符。
表 3 显示了 AIX 5L 如何报告系统信息。
表 3. AIX 5L 系统信息
| 描述 | 唯一标识符 | 序列号 | 子例程 unamex
xutsname.nid | 32 位唯一系统标识符 | “0x0123454C” | 子例程 uname
utsname.machine | 以 16 进制字符串表示的 32 位唯一系统标识符 | “0123454C” | 命令 uname -m
(注意:不要使用这个命令。) | “00”|| 以 16 进制字符串表示的 32 位唯一系统标识符 ||“00” | “000123454C00” | 命令 uname -M | “IBM,”||“TTTT”||“-”||“MMM” | “IBM,7042-681” | 命令 uname -L | 分区号和名称 | “两个名称” |
表 4 显示了 AIX 5L Version 5.3 中可用的标识。(AIX 5L Version 5.1 和 Version 5.2 都需要使用经过授权的程序分析报告 (APAR)。)
表 4. AIX 5L Version 5.3 系统标识(对于 AIX 5L Version 5.1 和 AIX Version 5.2 也是相同的)
| 命令 | 描述 | 命令 uname -f | 以 16 进制字符串表示、不带“0X”前缀的 64 位分区/系统唯一标识符。 | 命令 uname -F | 以 16 进制字符串表示、不带“0X”前缀的 64 位系统唯一标识符。 |
AIX 5L Version 5.3 还实现了下面的新的定义:
unamex subroutine xutsname.nid 字段
uname subroutine utsname.machine 字段
uname command -m 标志
uname 命令标志输出 -M、-U 或 -L 并没有什么变化。
AIX 5L Version 5.3 uname 标志与 AIX 5L Version 5.2 和 Version 5.1 兼容
在 AIX 5L Version 5.3 中,对于前面部分中提到的以及下面前两个示例中使用的 uname 命令标志,并没有什么改变。
请注意,uname -L 的输出可以表示经过分区的计算机。这里的结果与 AIX 5L Version 5.1 和 AIX 5L Version 5.2 的结果是一致的:
# uname -u
IBM,02 10 F190F
# uname -M
IBM,9111-520
# uname -L
1 testsp
# uname -MuL
IBM,9111-520 IBM,02 10 F190F 1 testsp
|
对于这台计算机,它的 nid 为 cf190f 4c,longnid 为 80001815。
新的 AIX 5L Version 5.3 uname 命令标志
基于更新的设计,为 /usr/bin/uname 命令添加了两个新的标志,以便可靠地生成唯一系统标识。这些标识符仅针对新的硬件:
-F 标志显示计算机的标识号。这是一个 16 进制数字的字符串,对于所有的系统唯一。
-f 标志显示 LPAR 配置中分区的标识号。这是一个 16 进制数字的字符串,对于所有系统中的所有分区唯一。
示例
# uname -F
80001815 2DF00000
# uname -f
80001815 2DF00001
|
对于这台计算机,它的 nid 为 cf190f 4c,longnid 为 8000181552DF00001。
更新的编程接口规范
/usr/include/sys/utsname.h Header 文件定义了用来查询系统标识和其他系统数据的结构。在 AIX 5L Version 5.1 和 Version 5.2 中,该结构定义如下:
struct xutsname {
unsigned int nid; int reserved[3];
|
对于 AIX 5L Version 5.3,这个结构添加了一个新的成员 longnid 以存储 64 位系统标识符:
struct xutsname {
unsigned int nid;
int reserved; // to preserve size and alignment
unsigned long long longnid;
|
在从 AIX 5L Version 5.1 和 Version 5.2 迁移到 Version 5.3 时,唯一变化的编程接口是 xutsname 结构,它将成为成员 nid,但是这种改变是透明的。它的大小和类型保持不变。请注意,对于新的硬件,计算方法有所改变,而对于现有的硬件,计算方法保存不变。
对于 AIX 5L Version 5.1 和 Version 5.2,可以使用 APAR
对于目前的 AIX 5L Version 5.1 和 Version 5.2 用户,可以进行升级以使用新的系统标识生成命令和 API。相关的 APAR 是:
- AIX 5L Version 5.1: IY52116
- AIX 5L Version 5.2: IY52125
出于兼容性原因对 AIX 5L Version 5.1 进行了相应的改变,但是因为 AIX 5L Version 5.1 不支持真正需要 64 位标识的那些系统,所以在 AIX 5L Version 5.1 中,并没有实现所有改变的特性。
将来的兼容性
对于 AIX 5L 来说,总的方向是从 32 位系统标识符迁移到 64 位系统标识符。要为这种转变做好准备,应用程序应该完成下列工作:
- 迁移到返回 64 位系统标识符的命令,以取代返回 32 位系统标识符的命令,例如,
uname – f 或 uname -F。
- 对于以编程的方式查询系统标识符的应用程序:
- 开始在 AIX 5L Version 5.3 中构建应用程序。
- 停止使用
uname() subroutine。
- 在使用
uname() subroutine 时,停止使用 xutsname 结构的 nid 成员。
- 在使用
unamex() subroutine 时,开始使用 xutsname 结构的 longnid 成员。
- 一旦完成了从 32 位到 64 位系统标识符的改变,所有生成 32 位系统标识符的命令和子例程都将返回 0 或由 0 组成的字符串,而这将取决于所使用的接口。
结束语
对于当前的 AIX 5L Version 5.1 或 Version 5.2,使用完整的数据字符串“TTTTMMMCCSSSSS”或其中的某些部分来标识系统,在用于检查系统标识的其他命令和系统接口 部分中对其进行了解释。要获取唯一系统标识符,可以使用带 -Mu 或 -MuL 标志的 uname 命令。-L 标志用于生成逻辑分区号。
AIX 5L Version 5.3 添加了两个新的标志,-F 和 -f。您可以使用 uname -F 和 uname -f 的输出来确定任何基于 POWER5 处理器的计算机或分区。
AIX 5L Version 5.3 系统标识编程接口发生了变化。xutsname.nid 和 xutsname.longnid 包含了原始的和新的系统标识信息。
您可以使用相关的 APAR 将 AIX 5L Version 5.3 的改变应用于 AIX 5L Version 5.1 和 Version 5.2。
致谢
- John O'Quin 是杰出工程师和AIX 架构师,是系统标识方案的设计者及相关算法的开发人员。
- Matthew Cronk 是 AIX 核心开发人员,是 IBM AIX 操作系统标识设计规范的拥有者。
- Luke Browning 是AIX 核心架构师,他和其他人一道,为本文提供了很大帮助。
- Larry Lancaster 提供了必要的信息。
参考资料 学习
获得产品和技术
- IBM 试用软件:使用 IBM 软件开发您的下一个项目,可直接从 developerWorks 下载这些试用软件。
讨论
作者简介  | |  | Wayne 致力于 IBM eBusiness™ 和服务器操作系统的跨行业支持。他为应用程序设计、问题确定、系统性能调优和应用程序基准测试方面的解决方案提供者和开发者提供 IBM 中间件和 IBM System p5 UNIX 专业知识。他拥有德州大学奥斯汀分校计算机科学硕士学位。您可以通过 huangw@us.ibm.com 与他联系。 |
 | |  | Huy-Suong 曾担任过两年的项目经理,她目前是 IBM AIX 的项目经理。她是一名通过 Project Management Institute (PMI) 认证的项目管理专业人员 (PMP),并且正准备通过 IBM PMP 认证。她拥有德州大学奥斯汀分校业务管理硕士学位。您可以通过 huysuong@us.ibm.com 与她联系。 |
 | |  | Brad 十多年来一直帮助解决方案提供者在 IBM AIX 环境中移植、优化、测试和增强他们的应用程序。除了帮助解决方案提供者以外,Brad 还喜欢申请各种专利、发表文章以及在开发人员会议上进行演讲。您可以通过 bcobb@us.ibm.com 与他联系。 |
对本文的评价
|