410 likes | 576 Views
第 22 章 对象数据管理器. 内容概要. 描述 ODM 的结构 使用 ODM 命令行接口 了解 ODM 在设备配置中扮演的角色 描述重要 ODM 文件的功能 用 ODM 存储、管理关于设备和软件产品的信息 注意 ODM 的分类,存储设备信息和软件产品数据 ODM 数据被存储为二进制格式,所以对于 ODM 文件,你必须使用 ODM 命令行接口。不能用编辑器更新 ODM 文件. ODM 介绍. ODM(Object Data Manager) 对象数据管理器是一个用来存储系统信息的自带的关系型数据库
E N D
内容概要 • 描述ODM的结构 • 使用ODM命令行接口 • 了解ODM在设备配置中扮演的角色 • 描述重要ODM文件的功能 • 用ODM存储、管理关于设备和软件产品的信息 • 注意ODM的分类,存储设备信息和软件产品数据 • ODM数据被存储为二进制格式,所以对于ODM文件,你必须使用ODM命令行接口。不能用编辑器更新ODM文件
ODM介绍 • ODM(Object Data Manager)对象数据管理器是一个用来存储系统信息的自带的关系型数据库 • AIX的许多特性与功能,如:系统管理工具SMIT、许多系统配置信息、动态配置等,都与ODM有着密不可分的联系。 • ODM的基本部件为对象类和对象。为了管理对象类和对象,你要使用ODM命令和子程序。特别是,你要使用这些接口的创建和增加功能为存储和管理你自己的数据而建立对象类和对象。 • ODM的主要功能是维护pSeries 的系统配置,相关的设备,以及重要产品数据库(Vital Product Database)。此外,它与AIX以前所使用的ASCII文件相比,提供了更多强大的,安全的,而且可共享的资源。
ODM管理的数据 • 设备配置数据 • 软件重要产品数据(SWVPD) • 系统资源控制器(SRC)数据 • TCP/ IP配置数据 • 错误日志和转储信息 • 网络安装管理理信息 • SMIT菜单和指令
ODM管理的数据 Devices Software ODM System Resource Controller SMIT Menus TCP/IP Configuration Error Log, Dump NIM
配置管理 Predefined "Plug and Play" PdDv PdAt PdCn Config_Rules cfgmgr Customized Methods Define CuDv Load Device Configure CuAt Driver Change CuDep Unload Unconfigure CuDvDr Undefine CuVPD
ODM库的位置和内容 CuDv CuAt CuDep CuDvDr CuVPD Config_Rules history inventory lpp product nim_* SWservAt SRC* Network PdDv PdAt PdCn history inventory lpp product sm_* history inventory lpp product /etc/objrepos /usr/lib/objrepos /usr/share/lib/objrepos
ODM库的位置和内容 • 为了支持无盘、无数据或其他工作站,ODM对象类被存储在三个库中,每个这些中描述的资料如下。 • /etc/objrepos • 包含定制设备对象类 • 软件重要产品数据库(为根部分可安装的软件产品)用到的四个对象类 • 包含到预定义设备对象种类的软链接 • 它含不能在设备间共享的部分产品 • 每台机器上有一个独立的拷贝
ODM库的位置和内容 • /usr/lib/objrepos • 预定义的设备对象类 • SMIT菜单对象类 • SWVPD(为/usr部分可安装的软件产品)用到的四个对象类 • 安装在/usr部分的软件可通过/usr客户,无数据、无盘工作站在在硬件架构兼容的几台机器上共享 • /usr/share/lib/objrepos 包含SWPD(为/usr/share部分可安装的软件产品)用到的四个对象类 • 没有硬件依赖,可在不同硬件架构的机器上共享
ODM类协作 PdDv: type = "14106902" class = "adapter" subclass = "pci" prefix = "ent" DvDr = "pci/goentdd" Define = /usr/lib/methods/define_rspc" Configure = "/usr/lib/methods/cfggoent" uniquetype = "adapter/pci/14106902" CuDv: name = "ent1" status = 1 chgstatus = 2 ddins = "pci/goentdd" location = "02-08" parent = "pci2" connwhere = "8“ PdDvLn = "adapter/pci/14106902" cfgmgr • PdAt: • uniquetype = "adapter/pci/14106902" • attribute = "jumbo_frames" • deflt = "no" • values = "yes,no" CuAt: name = "ent1" attribute = "jumbo_frames" value = "yes" type = "R" chdev -l ent1 \ -a jumbo_frames=yes
ODM类协作 • 为了能使一个设备在AIX中被定义,设备类型必须在ODM类PdDv中预定义。 • 一个设备可以被cfgmgr和mkdev命令定义。这两个命令都用定义方法在ODM类CuDv中产生一个实例。配置的方法被用来装载一个特定的设备驱动程序,在/dev目录下生成一个条目。 • 此时,你只有PdAt的默认属性值,在我们千兆以太网适配器的例子里,意味着你不能用jumbo frames(默认是没有的)。
Predefined Databases PdDv PdCn PdAt Customized Databases CuDep CuDv CuAt CuDvDr CuVPD Config_Rules Configuration Manager (cfgmgr) 设备配置总结
ODM不管理的数据 Filesystem infomation ?_________ User/Security infomation ?_________ ?_________ Queues and Queue devices
1. _______ Undefined Defined Available 2. 3. AIX Kernel Applications 4. 5. D____ D____ /____/_____ 设备配置与ODM
ODM组件 uniquetype attribute deflt values tape/scsi/scsd block_size none 0-2147483648,1 disk/scsi/osdisk pvid none tty/rs232/tty login disable enable, disable, ...
ODM组件 Object class: odmcreate, odmdrop Descriptors: odmshow uniquetype attribute deflt values tape/scsi/scsd block_size none 0-2147483648,1 disk/scsi/osdisk pvid none tty/rs232/tty login disable enable, disable, ... Objects: odmadd, odmchange, odmdelete, odmget
ODM命令——对象类 • odmcreate 创建ODM类 • odmcreate descriptor_file.cre • descriptor_file.cre文件包含与ODM类相一致的类定义 • odmdrop 删除ODM类 • odmdrop -o object_class_name • object_class_name 是你想要删除的ODM类的名字。 使用这条命令的时候要非常小心,它会立即将整个类删除。 • odmshow 查看ODM文件结构 • odmshow object_class_name • 将会显示ODM类PdAt的一部分,会显示四个描述符(uniquetype, attribute, deflt, and values).
ODM命令——对象 • Odmget 从一个存在的对象类中检索对象信息 • Odmadd 增加新对象 • Odmchange 改变对象 • Odmdelete 删除对象
修改属性值 # odmget -q"uniquetype=tape/scsi/scsd and attribute=block_size" PdAt > file # vi file • PdAt: • uniquetype = "tape/scsi/scsd" • attribute = "block_size" • deflt = “512" • values = "0-2147483648,1" • width = "" • type = "R" • generic = "DU" • rep = "nr" • nls_index = 6 Modify deflt to 512 # odmdelete -o PdAt -q"uniquetype=tape/scsi/scsd and attribute=block_size" # odmadd file
修改ODM属性值注释 • Odmget命令在这个例子中会从PdAt中选择所有的记录,选择条件:uniquetype=tape/scsi/scsd, attribute=block_size。在此情况下,只有一个记录是吻合的,这些信息被重定向到一个文件,可以用编辑器来修改。在这个例子中,属性block_size的默认值改为512. • 注意:在新值512被加到ODM中之前,旧对象(它的block_size已被设置为空值)必须被删除,否则你最终将会在数据库中有两个对象描述相同的属性(otherwise you would end up with two objects describing the same attribute in the database)第一个被发现的对象将被使用,结果可能会非常混乱。这就是为什么要先删除条目再增加替换的记录。最后的操作是添加文件到ODM.
用odmchange修改属性值 # odmget -q"uniquetype=tape/scsi/scsd and attribute=block_size" PdAt > file # vi file • PdAt: • uniquetype = "tape/scsi/scsd" • attribute = "block_size" • deflt = “512" • values = "0-2147483648,1" • width = "" • type = "R" • generic = "DU" • rep = "nr" • nls_index = 6 Modify deflt to 512 # odmchange -o PdAt -q"uniquetype=tape/scsi/scsd and attribute=block_size" file
查询数据库条目 • 测试条件 = 等于 != 不等于 > 大于 >= 大于或等于 < 小于 <= 小于或等于 like 模糊查询
查询数据库条目 • 不同的测试条件可以用布尔运算符连接 and, or • 通配符 * 匹配任意多个任意字符 ? 匹配任意一个字符 • 例子 • lpp_name like bosext1.* //匹配lpp_name的属性以bosext1. 开头的 • uniquetype=tape/scsi/scsd and attribute=block_size
软件重要产品数据 lpp: name = "bos.rte.printers“ size = 0 state = 5 ver = 6 rel = 1 mod =0 fix = 0 description = "Front End Printer Support“ lpp_id = 38 product: lpp_name = "bos.rte.printers“ comp_id = "5765-C3403“ state = 5 ver = 6 rel = 1 mod =0 fix = 0 ptf = "“ prereq = "*coreq bos.rte 5.1.0.0“ description = "“ supersedes = "" history: lpp_id = 38 ver = 6 rel = 1 mod = 0 fix = 0 ptf = "“ state = 1 time = 1187714064 comment = "" inventory: lpp_id = 38 private = 0 file_type = 0 format = 1 loc0 = "/etc/qconfig“ loc1 = "“ loc2 = "“ size = 0 checksum = 0
软件重要产品数据的内容 • 当在AIX系统中安装一个产品或更新时,installp命令用ODM维护软件重要产品数据库(SWVPD) • 软件产品的名称 • 软件产品的版本号、发行号、修定号、补丁号(5.3.0.10,6.1.0.0) • 以前打过的补丁,已经安装在系统上 • 软件产品的状态 - Available (state = 1) - Applying (state = 2) - Applied (state = 3) - Committing (state = 4) - Committed (state = 5) - Rejecting (state = 6) • Broken (state = 7) $installp –C //清除ing状态的软件 $smit maintain_software
软件重要产品数据的ODM类 • Lpp —包含已安装的软件产品信息,包括当前软件状态和描述 • Inventory —包含与软件产品有关的文件 • Product —包含软件产品安装、更新和先决条件的信息 • history —包含软件产品安装和更新的历史信息
预定义设备 • PdDv: • type = “scsd" • class = "tape" • subclass = "scsi" • prefix = "rmt" • ... • base = 0 • ... • detectable = 1 • ... • led = 2418 • setno = 54 • msgno = 0 • catalog = "devices.cat" • DvDr = "tape" • Define = "/etc/methods/define" • Configure = "/etc/methods/cfgsctape" • Change = "/etc/methods/chggen" • Unconfigure = "/etc/methods/ucfgdevice" • Undefine = "etc/methods/undefine" • Start = "" • Stop = "" • ... • uniquetype = "tape/scsi/scsd"
预定义设备解释 • type: 指定产品的名称或型号 如:8mm(磁带) • class: 指定功能类名称,一个功能类是一组共享同样高级功能的设备实例。如:磁带是一个代表所有磁带设备的功能类 • prefix:指定在定制数据库中“已分配的前缀”,他是用来导出设备实例名和/dev 名字。如:rmt是被分配给磁带设备的前缀名。base: 指定一个设备是基设备或者不是的描述符。一个基设备是最小的基本系统的一部分。在系统启动时,最小的基本系统被配置为允许有权使用rootvg,因此可以使用root文件系统。这个最小基系统包括:标准输入输出软盘适配器和SCSI硬盘驱动器。图像中的设备不是一个基设备。这个标志也被bosboot和savebase命令使用,后面将会接受。
预定义设备解释 • subclass: 设备类划分为子类,子类scsi(小型计算机系统接口)指定可以绑定到一个scsi接口的所有磁带设备。 • detectable: 指定设备实例是可检测的或者不是。一个设备一旦被加电连接到该系统它的存在和类型可以被cfgmgr检测,则说此设备是可检测的。“1”代表设备是可检测的,“0”代表设备是不可检测的。 • led: 当配置方法开始运行,在LED上显示值。值被存储为10进制,但是在LED上以16进制显示。 • setno,msgno: 当设备属性被lsdev命令列出时,每个设备都有一个特殊的描述(如:SCSI磁带驱动)显示。这两个描述符是用来查找消息目录的描述
预定义设备解释 • catalog: 列出本国语言支持目录的文件名(Identifies the file name of the national language support (NLS) catalog),在一个系统中LANG变量控制哪一个目录文件用来显示一个消息。(如:LANG被设置为en_US,目录文件/usr/lib/nls/msg/en_US/devices.cat被使用。LANG被设置为en_DE,目录文件/usr/lib/nls/msg/en_DE/devices.cat被使用。) • DvDr:识别设备驱动的名字,通常,设备驱动存储在目录 /usr/lib/drivers . • Define:命名与设备类型相关联的定义方法,当一个设备被加入自定义状态时,这个程序会被调用。 • Configure:命名与设备类型相关联的配置方法,当一个设备被加入可用状态时,这个程序会被调用。
预定义设备解释 • Change:命名与设备类型相关联的变更方法,当一个设备属性通过chdev命令改变是,这个程序会被调用。 • Unconfigure:命名与设备类型相关联的取消配置方法,当一个设备被rmdev –l 命令取消配置时,这个程序会被调用。 • Undefine:命名与设备类型相关联的取消定义方法,当一个设备被rmdev –l –d 命令取消定义时,这个程序会被调用。 • Start,stop:少数设备支持停止状态(只有逻辑设备),停止状态意味着设备驱动已经加载,但没有应用程序可以访问该设备。这两个属性名称的方法来启动和停止设备。
预定义属性 • PdAt: • uniquetype = "tape/scsi/scsd" • attribute = "block_size" • deflt = "" • values = "0-2147483648,1" • ... • PdAt: • uniquetype = "disk/scsi/osdisk" • attribute = "pvid" • deflt = "none" • values = "" • ... • PdAt: • uniquetype = "tty/rs232/tty" • attribute = "term" • deflt = "dumb" • values = "" • ...
预定义属性解释 • uniquetype:这个描述符作为一个指针,指向在PdDv对象类中定义的设备。 • attribute:标识属性的名称。这是可以被传递到mkdev或者chdev命令的名字。 • deflt:标识属性的默认值。非默认值存储在CuAtro中。 • value:标识与属性名相关联的值
自定义设备 • CuDv: • name = "ent1" • status = 1 • chgstatus = 2 • ddins = "pci/goentdd" • location = "02-08" • parent = "pci2" • connwhere = "8" • PdDvLn = "adapter/pci/14106902" • CuDv: • name = "hdisk2" • status = 1 • chgstatus = 2 • ddins = "scdisk" • location = "01-08-01-8,0" • parent = "scsi1" • connwhere = "8,0" • PdDvLn = "disk/scsi/scsd"
自定义设备解释 • name:一个设备实例的自定义设备对象 ,分配一个唯一的逻辑名称,以区别于其他设备。上图显示了两个设备,一个以太网适配器ent1和一个磁盘驱动器hdisk2。 • status:标识设备实例的当前状态。 • Status = 0 自定义 • Status = 1 可用 • Status = 2 停止 • Chgstatus : 这个标识说明设备实例自从上次系统起机是否被修改过。 • Chgstatus = 0 新设备 • Chgstatus = 1 don’t care • Chgstatus = 2 相同 • Chgstatus = 0 设备丢失
自定义设备解释 • Ddins:这个描述符通常包含与设备驱动程序在预定义设备对象类的名称描述符相同的值。他说明设备驱动的名字加载到内核。 • Location:标识一个设备的无聊位置。位置代码是从系统单元通过适配器到设备的一个路径。出现硬件问题时,位置码由技术支持来识别一个失败设备。在许多AIX系统中,位置码标识在硬件上,以方便设备的发现。 • Parent:标识父设备的逻辑名字。例如,hdisk2的父设备是scsi1。 • connwhere:标识父设备上设备所连接的具体位置。例如:设备hdisk2使用SCSI地址8,0. • PdDvLn:通过PdDv对象类中的uniquetype描述符提供一个到设备实例预定义信息的链接
自定义属性 • CuAt: • name = "ent1" • attribute = "jumbo_frames" • value = "yes" • ... • CuAt: • name = "hdisk2" • attribute = "pvid" • value = "00c35ba0816eafe50000000000000000" • ...
附加的设备对象类 • PdCn: • uniquetype = "adapter/pci/sym875“ • connkey = "scsi“ • connwhere = "1,0" • PdCn: • uniquetype = "adapter/pci/sym875“ • connkey = "scsi“ • connwhere = "2,0" CuDvDr: resource = "devno" value1 = "36" value2 = "0" value3 = "hdisk3“ CuDvDr: resource = "devno" value1 = "36" value2 = "1" value3 = "hdisk2" • CuDep: • name = "rootvg“ • dependency = "hd6" • CuDep: • name = "datavg“ • dependency = "lv01" CuVPD: name = "hdisk2" vpd_type = 0 vpd = "*MFIBM *TM\n\ HUS151473VL3800 *F03N5280 *RL53343341*SN009DAFDF*ECH17923D *P26K5531 *Z0\n\ 000004029F00013A*ZVMPSS43A *Z20068*Z307220"
课后练习 • 在哪个ODM类中,你觉得你能找到你磁盘的物理卷ID号? __________________________________________________ • 自定义状态和可用状态之间的区别是什么? __________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________ __________________________________________________
课后练习答案 • 在哪个ODM类中,你觉得你能找到你磁盘的物理卷ID号? CuAt • 自定义状态和可用状态之间的区别是什么? 当一个设备被定义时,在ODM类CuDv中会产生一个条目。当一 个设备可用时,设备驱动程序已加载。设备驱动程序可访问/dev目录下的项目