手册页部分 5: 标准、环境和宏

退出打印视图

更新时间: 2014 年 7 月
 
 

fmri(5)

名称

fmri - 故障管理资源标识符

描述

服务管理工具(请参见 smf(5))、故障管理守护进程(请参见 fmd(1M)fmadm(1M))和映像包管理系统(请参见 pkg(5))等 Oracle Solaris 子系统可使用故障管理资源标识符(缩写为 FMRI)标识其管理的每个元素。

FMRI 用于标识硬件资源和软件资源以及抽象资源。对于硬件资源,FMRI 通常是实现详细信息,当组件被诊断为出现故障时,FMRI 是用于标识该组件的 FRU(field replaceable unit,现场可更换单元)位置标签。如果无 FRU 标签可用,将使用 FMRI。对于 SMF 服务或 pkg(5) 软件包等软件抽象资源,FMRI(通常采用字符串形式)是除缩写外命名受管资源的唯一方式。

所有 FMRI 均标识了所遵循的 FMRI 方案和所使用的 FMRI 方案的版本。识别出方案和版本后,将按 FMRI 方案版本的正式定义中的说明解释 FMRI 的剩余部分。存在针对 svcpkgcpuhc(硬件组件)、dev(设备)和其他许多对象的方案。

特定 FMRI 方案给定版本的正式定义通过 FMRI 成员的无序序列进行指定,其中成员以 (member-name, data-type, data-semantics) 元组形式指定。FMRI 的一个实例是一系列 (name, type, value) 元组,其中的名称和类型与 FMRI 规范匹配,所提供的值是给定类型的值且根据该方案和版本的正式 FMRI 定义中所述的语义进行派生和解释。在 Oracle Solaris C 库 API(如 libfmevent(3LIB))中,使用 libnvpair(3LIB) 库将 FMRI 表示为 nvlists

将给定 FMRI 实例表示为字符串通常更方便,例如在命令行交互或命令输出中。每个 FMRI 方案版本的规范包括将该方案和版本的 FMRI 格式化为字符串而非“名称-值”对列表的规则,并且给定一个 FMRI 字符串时可以反向应用相同的规则以恢复更正式的 FMRI 形式。在某些情况下,与正式形式相比,FMRI 的字符串形式包含的信息量较少,但提供的信息仍足以标识资源以供管理之用。FMRI 的字符串形式通常不包括 FMRI 版本号,因此将根据给定 FMRI 字符串所匹配的正式“FMRI 到字符串”格式化规则确定版本。FMRI 的字符串形式与 RFC 2396(用作语法模型)中所述的 URI 类似。具体而言,将保留相同的字符集 :, ;, =, @, /, &, ', $,,并且当这些字符显示在字符串的 FMRI 成员值中时要求使用相同的转义编码约定。

FMRI 成员

特定 FMRI 方案给定版本的正式定义通过以下元组的无序序列进行指定:

(member-name, data-type, data-semantics)

,其中部分是必需的,部分是可选的。正式定义还指定如何以字符串形式呈现 FMRI。

member-name

为 FMRI 成员关联一个名称,其中的字符来自以下字母:

A-Z
a-z
'_' (underscore)
'-' (hyphen)
'.' (period)
data-type

指定此成员的数据类型。合法的基本数据类型列在下表中,对于所有基本类型,也会将该类型的数组定义为合法数据类型。基本的整型和双精度数据类型的定义与在 C 中一样,添加了布尔值和字符串基本数据类型:


Primitive Datatype   Description
---------------------------------------------
boolean_value        Values can be 0 or 1
string               ASCII string
[u]int8              (Un)signed 8-bit integer
[u]int16             (Un)signed 16-bit integer
[u]int32             (Un)signed 32-bit integer
[u]int64             (Un)signed 64-bit integer
double               Double precision floating point

对于每种基本数据类型,构成一个聚合数据类型,即该基本类型的有序数组:


Primitive Datatype    Description
----------------------------------------------
boolean_value array   Array of boolean_value
string array          Array of ASCII strings
[u]int8 array         Array of (un)signed 8-bit integer
[u]int16 array        Array of (un)signed 16-bit integer
[u]int32 array        Array of (un)signed 32-bit integer
[u]int64 array        Array of (un)signed 64-bit integer
double array          Array of double

定义了进一步的聚合数据类型-nvlist(“名称-值”列表)。nvlist 是 (list-member-name, list-member-datatype) 的无序列表,其中 list-member-name 使用以上用于 member-name 的字母来命名成员,list-member-datatype 是任意基本数据类型或聚合数据类型(包括 nvlist 自身)。我们将 nvlist 的成员称为:nvpairs(“名称-值”对)。

一种特殊类型的 nvlistfmri,该 nvlist 符合下面所定义的 FMRI 方案版本之一。


Synthetic Datatype    Description
---------------------------------------------------------
nvlist                Unordered list of nvpairs
nvlist array          Array of nvlist
fmri                  An nvlist that specifies an FMRI
                      scheme and version and includes other
                      members so as to be a valid FMRI
                      in that scheme version.

data-semantics

FMRI 定义中给定成员的数据语义指定应如何解释该成员的值,即,值的含义。数据语义可以根据成员数据类型将成员可使用的合法值集限制为这些可表示值的子集。

稳定性

一些 FMRI 方案(如用于 SMF 的 svc)面向管理员,而其他方案则更多是专用实现详细信息。与之对应,一些 FMRI 方案的定义构成 Committed 接口,而其他方案的定义则构成 Private 接口。请参见 attributes(5)。与所有 Private 接口一样,Private FMRI 组件的定义随时可能会发生不兼容的更改,因此不应该使用此类接口,也不应该依赖于专用 FMRI 成员的存在或假定语义。

在定义下面的 FMRI 方案时,将列出 (member-name, data-type, data-semantics) 序列,指定哪些成员是必需的、哪些成员是可选的以及以字符串形式呈现 FMRI 的规则。在指定稳定性时,每个成员有两个关联的稳定性级别:

  • (member-name, data-type) 对的稳定性

  • 对应的 data-semantics 的稳定性

两种级别的缺省值均为 Private。当成员的两种稳定性一致(这是通常的情况)时,仅写入一次稳定性级别。当两种稳定性不同时,首先写入成员名称和数据类型稳定性,后跟一个逗号,然后是数据语义稳定性级别。目前 FMRI 的稳定性级别只使用了 CommittedPrivateNot An Interface,但也允许使用其他级别。Committed FMRI 组件的语义不会针对给定方案和其中的版本发生不兼容的更改。

FMRI 方案和版本标识

要求所有 FMRI 定义包括适用于方案名称和其中主版本的成员。名称/数据类型和数据语义稳定性为 Committed,因此要求所有 FMRI 定义按如下方式开头:


Member Name      Data Type    Stability
----------------------------------------
scheme           string       Committed
version          uint8        Committed

scheme

命名此 FMRI 方案

version

方案主版本

两者结合使用可选择用于解释给定 FMRI 的规则集合(如下)。定义了少量方案名称以在不同子系统内处理资源标识,每个方案从版本号 0 开始版本化。

使用 FMRI 的非正式字符串表示形式时,始终会写入方案,但通常不会包含所使用的方案版本。会将给定 FMRI 字符串与“FMRI 到字符串”转换规则匹配的最新版本视为所使用的版本。

FMRI 授权

更为必需的(尽管在某些情况下是隐式出现的)一个 FMRI 成员是 authority


Member Name   Data Type  Stability
----------------------------------------
[authority]   nvlist     Committed, (Varies)

每个 FMRI 均包含授权信息,或者通过 authority nvlist 显式表示(出现在 FMRI 中),或者使用本地故障管理域隐式表示(如果未出现在 FMRI 中)。授权信息有两种类型:

  • 高级别授权信息,例如用于标识作为 FMRI 主题的特定资源所在的平台和主机名

  • 叶级别授权信息,提供作为 FMRI 主题的特定资源的标识信息

例如,标识磁盘的 FMRI 可以包含有关磁盘所在平台详细信息(主机名、产品名称、机箱序列号)的高级别授权信息,以及有关单个磁盘部件号、序列号等详细信息的叶级别授权信息。

遗憾的是,一些 FMRI 方案已发展到包含 authority nvlist 之外的叶级别授权信息作为独立的 FMRI 成员,并以字符串形式作为路径组件的一部分写入。

在字符串表示形式中,高级别和叶级别的 FMRI 授权信息前均附加了冒号 (:),例如:

hc://:chassis-serial=12345/<string>

":chassis-serial=12345" 是以字符串表示的授权成员。

高级别授权有两个版本(版本 0 和版本 1)。以下是对每个版本的描述。

将在下面的特定于方案的部分中描述叶级别授权成员。

版本 0

Member Name   Data Type   Stability
-----------------------------------------------------
[server-id]   string      Committed, Not an Interface
[chassis-id]  string      Committed, Not an Interface
[product-sn]  string      Committed, Not an Interface
[product-id]  string      Committed, Not an Interface
[domain-id]   string      Committed, Not an Interface
[host-id]     string      Committed, Not an Interface
[server-id]

在其上运行 Fault Manager 的实体的主机名 (uname –n) 字符串。不是不变的。

[chassis-id]

这是标识资源所在机箱的序列号。一些大型系统可以包括多个不同的机箱组件。

[product-sn]

在某些情况下,仅通过机箱 ID 无法完全标识系统,例如,对于按产品序列号加密的服务授权以及产品可能包含多个机箱元素的情况。不变。

[product-id]

产品名称字符串,例如 Sun-Fire-X4600。不变。

[domain-id]

在硬件支持该功能的情况下,标识特定硬件域。不是不变的。

[host-id]

Oracle Solaris 中的 hostid(1) 字符串;一般不使用。不一定不变。

版本 1

Member Name     Data Type    Stability
--------------------------------------------------------
[system-mfg]      string      Committed, Not an Interface
[system-name]     string      Committed, Not an Interface
[system-part]     string      Committed, Not an Interface
[system-serial]   string      Committed, Not an Interface
[sys-comp-mfg]    string      Committed, Not an Interface
[sys-comp-name]   string      Committed, Not an Interface
[sys-comp-part]   string      Committed, Not an Interface
[sys-comp-serial] string      Committed, Not an Interface
[chassis-mfg]     string      Committed, Not an Interface
[chassis-name]    string      Committed, Not an Interface
[chassis-part]    string      Committed, Not an Interface
[chassis-serial]  string      Committed, Not an Interface
[chassis-alias]   string      Committed, Not an Interface
[server-name]     string      Committed, Not an Interface
[domain-name]     string      Committed, Not an Interface
[host-id]         string      Committed, Not an Interface
[system-mfg]

顶层产品的生产商。在复合产品中,system-* 成员包含服务授权数据。在简单的独立机架系统中,system-*、sys-comp-* 和 chassis-* 数据是重复的。不变。

[system-name]

顶层产品的型号名称。不变。

[system-part]

顶层产品的部件号。不变。

[system-serial]

顶层产品的序列号。不变。

[sys-comp-mfg]

组件系统级产品的生产商。不变。

[sys-comp-name]

组件系统级产品的型号名称。不变。

[sys-comp-part]

组件系统级产品的部件号。不变。

[sys-comp-serial]

组件系统级产品的序列号。不变。

[chassis-mfg]

资源所在机箱的生产商。一些大型系统可以包括多个不同的机箱组件。不变。

[chassis-name]

机箱的型号名称。不变。

[chassis-part]

机箱的部件号。不变。

[chassis-serial]

机箱的序列号。不变。

在某些情况下,仅通过一组 *-name/*-part/*-serial 无法完全标识系统,例如,对于按产品序列号加密的服务授权以及产品可能包含多个机箱元素的情况。不变。

[chassis-alias]

这是通过 `fmadm add-alias` 分配给此机箱的 Chassis Receptacle Occupant 别名值。不是不变的。

[server-name]

在其上运行 Fault Manager 的实体的主机名 (uname –n) 字符串。不是不变的。

[domain-name]

在硬件支持该功能的情况下,标识特定硬件域。不是不变的。

[host-id]

Oracle Solaris 中的 hostid(1) 字符串;一般不使用。不一定不变。

逻辑 FMRI 方案与通用 FMRI 方案

logical FMRI 方案定义的 FMRI 只能在生成该 FMRI 的故障管理域(通常是 Oracle Solaris 实例)中进行有意义的解释。逻辑方案中属于不同故障管理域的相同 FMRI 不一定标识相同的实际资源。例如,使用 cpu 方案标识为 cpu id 1cpu 必须在生成该 FMRI 的 Oracle Solaris 实例(即,其本机环境)中解释,其他许多 Oracle Solaris 实例也具有逻辑处理器 ID 号 1,但所有此类 FMRI 均不标识同一实际处理器。本机故障管理域通过其高级别授权信息进行标识,该信息通常不在 FMRI 实例中捕获,而是通过本地 Oracle Solaris 实例中的信息确定。

universal FMRI 方案通过一种通用的唯一方式来标识资源,无论在哪里解释 FMRI,一个通用方案中的两个相同 FMRI 都标识相同的实际资源。如果有避免歧义的必要,则需要使用此类方案,例如标识出现故障的硬件组件时。

FMRI 方案不包含表示该方案是逻辑方案还是通用方案的成员。

FMRI 方案和版本

后面的部分中定义了以下 FMRI 方案版本:


Scheme Version(s) Universal? Description
-------------------------------------------------------------
cpu    0, 1       No         Logical processor identification
dev    0          No         Device resources
fmd    0, 1       No         Fault Management Daemon modules
hc     0, 1       Yes        Hardware Components
mem    0          No         Memory modules and cache
mod    0          No         Kernel modules
pkg    0, 1       Yes        Software packages
svc    0          No         SMF services & service instances
sw     0          No         Software objects
zfs    0          No         zfs filesystem resources

在这些方案中,svcpkg 方案是在日常使用 Oracle Solaris 时最可能遇到的,而其他方案通常隐藏在与故障管理子系统(在诊断出问题的情况下)的命令行交互后。

方案 cpu 版本 0

cpu 方案用于标识可能受诊断出的问题影响的逻辑 Oracle Solaris 处理器资源以及可以响应该问题诊断而脱机的资源。该方案不一定会标识所涉及的物理资源,不应当用于标识替换部件。

cpu 方案是逻辑 FMRI 方案;cpu 方案中的 FMRI 仅在授权信息所标识的故障管理域中有意义。


Member Name   Data Type    Stability
------------------------------------
scheme        string       Committed, value "cpu"
version       uint8        Committed, value 0
cpuid         uint32       Committed
[serial]      uint64       Private

cpuid

此逻辑执行单元的 Oracle Solaris 处理器实例 ID,与授权信息所标识的 Oracle Solaris 实例上的 psradm(1M) 所列出的一样。

[serial]

未记录此专用 FMRI 成员的语义。

String form:

cpu:///cpuid=<cpuid>[/serial=<hex-serial>]

<hex-serial> 是以十六进制写入的序列成员,无 0x 前缀。

方案 cpu 版本 1

cpu FMRI 方案的版本 1 与版本 0 的用法相同,只是更改和添加了一些专用 FMRI 成员。


Member Name   Data Type   Stability
------------------------------------------------
scheme        string      Committed, value "cpu"
version       uint8       Committed, value 1
cpuid         uint32      Committed
[serial]      string      Private
[cpumask]     uint8       Private
[cpufru]      string      Private
[cacheindex]  uint32      Private
[cacheway]    uint32      Private
[cachebit]    uint16      Private
[cachetype]   uint8       Private

cpuid

       As per cpu scheme version 0

[serial]
[cpumask]
[cpufru]
[cacheindex]
[cacheway]
[cachebit]
[cachetype]

未记录这些专用 FMRI 成员的语义。

String form:

cpu:///cpuid=<cpuid>[/serial=<serial>]
         [/cacheindex=.../cacheway=.../
         cachebit=.../cachetype=...]

成员 cpumaskcpufru 不以字符串形式显示。

方案 dev 版本 0

dev 方案用于标识设备。该方案不是不变的。dev 方案 FMRI 仅应在授权信息所标识的故障管理域中解释。


Member Name        Data Type   Stability
-------------------------------------------------------------------
scheme             string      Committed, value "dev"
version            uint8       Committed, value 0
device-path        string      Committed
[devid]            string      Private
[target-port-l0id] string      Private


device-path

Oracle Solaris /devices 树中用于标识设备节点的文件系统路径,例如 pci@0,0/pci108e,cb84@2,1。除了解释时此成员用于标识 /devices 路径,此类路径的内部结构(即,Oracle Solaris /devices 树的结构和节点命名)为 Not An Interface

[devid]
[target-port-l0id]

未记录这些 Private FMRI 成员的语义。

String form:

dev:///[:devid=<devid>]
    [:target-port-l0id=<target-port-l0id>]
    <device-path>

方案 fmd 版本 0

此方案用于标识 Oracle Solaris Fault Manager (fmd(1M)) 模块。

高级别授权:

Member Name  Data Type  Stability
---------------------------------
[server-id]  string     Committed, Not an Interface
[chassis-id] string     Committed, Not an Interface
[product-sn] string     Committed, Not an Interface
[product-id] string     Committed, Not an Interface
[domain-id]  string     Committed, Not an Interface

FMRI 的授权 nvlist 内不包含任何叶级别授权信息,相反,它将作为 FMRI 的顶级成员。


Member Name  Data Type  Stability
-----------------------------
scheme       string     Committed, value "fmd"
version      uint8      Committed, value 0
[authority]  nvlist     Committed, See above
mod-name     string     Committed, Not an Interface
mod-version  string     Committed, Not an Interface

mod-name

fmd 模块名称,一个不透明字符串。

mod-version

fmd 模块版本,一个不透明字符串。

字符串形式:

fmd:///module/mod-name>

方案 fmd 版本 1

此方案用于标识 Oracle Solaris Fault Manager (fmd(1M)) 模块。

高级别授权:

Member Name       Data Type  Stability
--------------------------------------
[system-mfg]      string     Committed, Not an Interface
[system-name]     string     Committed, Not an Interface
[system-part]     string     Committed, Not an Interface
[system-serial]   string     Committed, Not an Interface
[sys-comp-mfg]    string     Committed, Not an Interface
[sys-comp-name]   string     Committed, Not an Interface
[sys-comp-part]   string     Committed, Not an Interface
[sys-comp-serial] string     Committed, Not an Interface
[server-name]     string     Committed, Not an Interface
[domain-name]     string     Committed, Not an Interface
[host-id]         string     Committed, Not an Interface

与版本 0 一样,FMRI 的授权 nvlist 内不包含叶级别授权信息。相反,它将作为 FMRI 的顶级成员。

Member Name       Data Type  Stability
--------------------------------------
scheme            string     Committed, value "fmd"
version           uint8      Committed, value 1
[authority]       nvlist     Committed, See above
mod-name          string     Committed, Not an Interface
mod-version       string     Committed, Not an Interface
mod-name

fmd 模块名称,一个不透明字符串。

mod-version

fmd 模块版本,一个不透明字符串。

字符串形式:
fmd:///module/<mod-name>
方案 legacy-hc 版本 0

hc 方案用于标识硬件组件。大多数情况下,这些 FMRI 应保留为内部实现详细信息,当硬件组件被诊断为出现故障时(例如,在 fmadm(1M) 中)则通过其 FRU 标签或位置标签进行标识。

hc 方案只有一个版本(版本 0)在使用,但是要区分两个次要版本,这两个版本的区别在于是否存在成员指定的组件。包括组件成员的 hc 方案 FMRI 是已过时的传统 hc 方案的实例。

过时的传统 hc 变体:

Member Name  Data Type  Stability
-------------------------------------------------------------------
scheme       string      Committed, value "hc"
version      uint8       Committed, value 0
component    string      Committed
component

资源的 FRU 标签。

传统 hc 的字符串形式:
hc:///component=<component>
方案 hc 版本 0

授权 nvlist 是高级别授权信息,用于标识在其中生成给定 FMRI 的故障管理域。因此,其中包括用于主机名、产品名称、机箱序列号等的成员。上述的某些成员是不变的(例如平台序列号)并唯一地用于标识某些元素,而其他成员(例如主机名)是软标识,可以随时间而更改(尽管不常发生)。


Member Name   Data Type   Stability
-----------------------------------------------------
[server-id]   string      Committed, Not an Interface
[chassis-id]  string      Committed, Not an Interface
[product-sn]  string      Committed, Not an Interface
[product-id]  string      Committed, Not an Interface
[domain-id]   string      Committed, Not an Interface
[host-id]     string      Committed, Not an Interface

虽然所有成员均列为可选成员,但应包含尽可能多的成员以使给定的 FMRI 有意义。如果 FMRI 中不存在授权 nvlist,则会将本地故障管理域视为授权;如果 hc 方案 FMRI 在其本机域之外传送,则应包括显式高级别授权信息。

每个数据语义的 Not an Interface 稳定性表示只能将该值视为不透明字符串,且字符串的任意内部结构均不是接口。例如,可以使用字符串比较来匹配序列号,但序列号字符串的长度和其中所包含的各个字符的意义均不是接口。

字符串形式:

这些出现在给定 FMRI 中的授权成员可以作为以冒号分隔的 name=value 对的无序系列以字符串形式写入。我们可以将其定义为 authstr,用于说明以下导入缺省授权信息的各个 FMRI 方案的字符串形式。

authstr = server-id=<server-id>
                [:chassis-id=<chassis-id>]
                [:product-sn=<product-sn>]
                [:product-id=<product-id>]
                [:domain-id=<domain-id>]
                [:host-id=<host-id>]
                [:devid=<devid>]

授权 nvlist 中不包含任何叶级别授权/标识信息-此类信息(序列号和部件号)将作为 FMRI 的顶级成员。


Member Name    Data Type    Stability
------------------------------------------------------
scheme         string       Committed, value "hc"
version        uint8        Committed, value 0
[authority]    nvlist       Committed, See above
[serial]       string       Committed, Not-an-Interface
[devid]        string       Private
[part]         string       Committed, Not-an-Interface
[revision]     string       Committed, Not-an-Interface
[hc-root]      string       Private
hc-list-sz     uint32       Private
hc-list        nvlist array Private
[facility]     nvlist       Private
[hc-specific]  nvlist       Private

[serial]

硬件组件的序列号字符串在此 FMRI 中标识。这是一个不透明字符串,其内部结构不是接口。

[devid]

未记录这些专用 FMRI 成员的语义。

[part]

硬件组件的部件号字符串在此 FMRI 中标识。这是一个不透明字符串,其内部结构不是接口。

[revision]

部件号的修订版(字符串形式)。这也是一个不透明字符串。

[hc-root]

未记录此专用 FMRI 成员的语义。

hc-list-sz

未记录此专用 FMRI 成员的语义。

hc-list

未记录此专用 FMRI 成员的语义,但是枚举了内容的结构(可能会进行不兼容的更改)。(有序)nvlist 数组的每个成员均具有以下结构:


Member Name    Data Type   Stability
------------------------------------
hc-name        string      Private
hc-id          string      Private

[facility]

未记录此专用 FMRI 成员的语义,但是枚举了内容的结构(可能会进行不兼容的更改)。工具 nvlist 具有如下成员:


Member Name    Data Type   Stability
------------------------------------
facility-type  string      Private
facility-name  string      Private

[hc-specific]

未记录此专用 FMRI 成员的语义。

String form:
authstr is defined above
hcauthstr = [:serial=<serial>]
                 [:devid=<devid>]
                 [:part=<part>]
                 [:revision=<revision>]

hc-path =<hc-list[0].hc-name>=<hc-list[0].hc-id>
               /<hc-list[1].hc-name>=<hc-list[1].hc-id>
               /<hc-list[2].hc-name>=<hc-list[2].hc-id>
               ...
hcspecstr = private string formed from hc-specific nvlist,
               of the form "/name=value"

facstr = <facility.facility-type>=<facility.facility-name>

hc://[authstr][hcauthstr]/[hc-root/]<hc-path>
                                     [<hcspecstr>]
                                     [?<facstr>]

来自授权 nvlist 的高级别授权信息显示在序列号和部件号的叶级别授权信息旁,这些信息均以冒号分隔。此授权字符串的组件可以以任意顺序显示,高级别授权元素和叶级别授权元素可以相互交错。此类字符串的解析比较复杂,并需要事先知道哪些组件属于哪一类授权信息。

方案 hc 版本 1

hc FMRI 方案的版本 1 与版本 0 的用法相同,只是更改和添加了一些专用 FMRI 成员。

Member Name     Data Type    Stability
--------------------------------------------------------
[chassis-mfg]     string      Committed, Not an Interface
[chassis-name]    string      Committed, Not an Interface
[chassis-part]    string      Committed, Not an Interface
[chassis-serial]  string      Committed, Not an Interface
[chassis-alias]   string      Committed, Not an Interface

字符串形式:

版本 0 中的语义也适用于 hc FMRI 方案版本 1 的字符串形式。

authstr = [:chassis-mfg=<chassis-mfg>]
                [:chassis-name=<chassis-name>]
                [:chassis-part=<chassis-part>]
                [:chassis-serial=<chassis-serial>]
                [:chassis-alias=<chassis-alias>]

与 hc 方案版本 0 一样,版本 1 中的授权 nvlist 不包含任何叶级别授权/标识信息-此类信息(例如,序列号/修订版号/部件号)将作为 FMRI 的顶级成员。

Member Name    Data Type    Stability
------------------------------------------------------
scheme         string       Committed, value "hc"
version        uint8        Committed, value 1
[authority]    nvlist       Committed, See above
[fru-mfg]      string       Committed, Not-an-Interface
[fru-serial]   string       Committed, Not-an-Interface
[fru-part]     string       Committed, Not-an-Interface
[fru-revision] string       Committed, Not-an-Interface
[devid]        string       Private
[hc-root]      string       Private
hc-list-sz     uint32       Private
hc-list        nvlist array Private
[facility]     nvlist       Private
[hc-specific]  nvlist       Private
[fru-mfg]

硬件组件的生产商字符串在此 FMRI 中标识。这是一个不透明字符串,其内部结构不是接口。

[fru-serial]

硬件组件的序列号字符串在此 FMRI 中标识。这是一个不透明字符串,其内部结构不是接口。

[fru-part]

硬件组件的部件号字符串在此 FMRI 中标识。这是一个不透明字符串,其内部结构不是接口。

[fru-revision]

部件号的修订版(字符串形式)。这也是一个不透明字符串。

[devid]

未记录这些专用 FMRI 成员的语义。

[hc-root]

未记录此专用 FMRI 成员的语义。

hc-list-sz

未记录此专用 FMRI 成员的语义。

hc-list

未记录此专用 FMRI 成员的语义,但是枚举了内容的结构(可能会进行不兼容的更改)。(有序)nvlist 数组的每个成员均具有以下结构:

Member Name    Data Type   Stability
------------------------------------
hc-name        string      Private
hc-id          string      Private

[facility]

未记录此专用 FMRI 成员的语义,但是枚举了内容的结构(可能会进行不兼容的更改)。工具 nvlist 具有如下成员:

Member Name    Data Type   Stability
------------------------------------
facility-type  string      Private
facility-name  string      Private

[hc-specific]

未记录此专用 FMRI 成员的语义。

字符串形式:
authstr is defined above
hcauthstr = [:fru-mfg=<fru-mfg>]
                 [:fru-serial=<fru-serial>]
                 [:devid=<devid>]
                 [:fru-part=<fru-part>]
                 [:fru-revision=<fru-revision>]

hc-path =<hc-list[0].hc-name>=<hc-list[0].hc-id>
               /<hc-list[1].hc-name>=<hc-list[1].hc-id>
               /<hc-list[2].hc-name>=<hc-list[2].hc-id>
               ...
hcspecstr = private string formed from hc-specific nvlist,
               of the form "/name=value"

facstr = <facility.facility-type>=<facility.facility-name>

hc://[authstr][hcauthstr]/[hc-root/]<hc-path>
                                     [<hcspecstr>]
                                     [?<facstr>]

来自授权 nvlist 的高级别授权信息显示在序列号和部件号的叶级别授权信息旁,这些信息均以冒号分隔。此授权字符串的组件可以以任意顺序显示,高级别授权元素和叶级别授权元素可以相互交错。此类字符串的解析比较复杂,并需要事先知道哪些组件属于哪一类授权信息。

方案 mem 版本 0

此方案用于标识内存模块和内存页面,虽然这些最近已在 hc 方案中进行了标识。mem 方案也用于标识 cpu 高速缓存资源。


Member Name   Data Type    Stability
-------------------------------------------------
scheme        string       Committed, value "mem"
version       uint8        Committed, value 0
unum          string       Committed, Private
[serial]      string array Private
[physaddr]    uint64       Private
[offset]      uint64       Private

unum

此字符串标识内存模块,通常与平台外框或服务标签中所标记的一致。字符串类型的此成员显示为 Committed 接口,但 unum 字符串的内部结构是 Private 接口。因此,可以使用不透明 unum 字符串来标识内存模块,但对 unum 字符串的各部分的解释依赖于平台且为 Private

unum 可以标识一组内存模块(或一个内存区)。否则,应通过多个 FMRI 进行标识,一个 FMRI 标识一个内存模块,但这是来自早期实现的历史异常设计。

[serial]

通过 unum 成员指定的内存模块序列号的字符串数组。序列号字符串的内部结构不是接口,因此,您只能在匹配序列号时使用不透明字符串值并且不应用任何进一步解释。

[physaddr]
[offset]

未记录这些专用 FMRI 成员的语义。

String form:

mem:///unum=<unum>
        [/offset=<hex-offset> | /physaddr=<hex-physaddr>]
方案 mod 版本 0

此方案用于标识 Oracle Solaris 内核模块。


Member Name    Data Type    Stability
--------------------------------------------------
scheme         string       Committed, value "fmd"
version        uint8        Committed, value 0
mod-name       string       Committed
[mod-desc]     string       Committed
[mod-pkg]      fmri         (fmri)

mod-name

模块名称,如 modinfo(1M) 中所示。

[mod-desc]

模块描述,同样如 modinfo(1M) 中所示。

[mod-pkg]

交付此模块的软件包的 pkg 方案 FMRI。

String form:
mod:///mod-name=<mod-name>
方案 pkg 版本 0

pkgadd(1M)pkginfo(1)pkgrm(1M) 和相关实用程序一起使用时,此版本的 pkg 方案对应于传统的 SVR4 包管理。如果遵守软件包名称和软件包版本约定,则此方案是通用的。


Member Name   Data Type   Stability
-------------------------------------------------------------------
scheme        string      Committed, value "pkg"
version       int8        Committed, value 0
pkg-name      string      Committed
pkg-basedir   string      Committed
pkg-inst      string      Committed
pkg-version   string      Committed

pkg-name

软件包名称。

pkg-basedir

BASEDIR,如 pkginfo(1) 中所示

pkg-inst

PKGINST,如 pkginfo(1) 中所示

pkg-version

VERSION,如 pkginfo(1) 中所示

String form:
pkg:///<pkg-name>/:version=<pkg-version>
方案 pkg 版本 1

此版本的 pkg 方案对应于 pkg(5) 映像包管理系统。在 pkg(1) 命令行及其输出中此类 FMRI 采用字符串形式,命令行允许使用 FMRI 字符串的缩写。

pkg 方案版本 1 中的 FMRI 是通用的:同一个 FMRI 即使在两个不同的上下文(例如不同的 Oracle Solaris 实例)中进行解释,也标识相同的实际软件包(或其中的副本)。

pkg(5) 命令行使用版本 1 pkg FMRI 的字符串形式,并允许使用此类字符串的缩写。


Member Name   Data Type    Stability
-------------------------------------------------
scheme        string       Committed, value "pkg"
version       uint8        Committed, value 1
[authority]   nvlist       Committed
pkg-name      string       Committed
[pkg-version] nvlist       Committed
[authority]

authority nvlistpkg publisher 输出中所示指定软件包发布者:


Member Name    Data Type    Stability
-------------------------------------
publisher      string       Committed

publisher

此软件包的发布者,如 Oracle Solaris。

pkg-name

软件包的名称(主干)

[pkg-version]

Member Name    Data Type    Stability
---------------------------------------
release        string       Committed
[built-on]     string       Committed
[branch]       string       Committed
[timestamp]    string       Committed

release

组件的主版本,以点序列字符串(任意长度的无前导零十进制数字的点分序列)形式写入。

built-on

在其中构建组件的操作系统版本,同样以点序列形式指定。

branch

供应商分支版本(点序列形式)。

timestamp

ISO 8601 日期字符串:yyyymmddThhmmssZ,其中 TZ 是字母本身。

String form:

pkgauthstr = <authority.publisher>

pkg://[pkgauthstr]/<pkg-name>
    [@<release>[,<built-on>][-<branch>][:<timestamp>]

方案 svc 版本 0

svc 方案描述了 SMF(请参见 smf(5))服务和服务实例。在 SMF 命令行(例如 svcadm(1M)svccfg(1M)svcprop(1)svcs(1))及其输出中,此类 FMRI 通常以字符串形式写入,SMF 命令行允许使用缩写。

svc 方案 FMRI 是逻辑方案,因此,仅应在生成 FMRI 的故障管理域(Oracle Solaris 实例)中对该 FMRI 进行解释。


Member Name    Data Type   Stability
-------------------------------------------------
scheme         string      Committed, value "svc"
version        uint8       Committed, value 0
svc-name       string      Committed
[svc-instance] string      Committed
[contract-id]  string      Committed
[svc-scope]    string      Committed

     pkg://[pkgauthstr]/<pkg-name>
svc-name

服务名称,如 network/smtp。请参见 smf(5)

[svc-instance]

在标识服务实例时使用。通常为 default,但也可能类似于服务 network/smtpsendmail 实例。

[contract-id]

该值标识用于管理服务的特定运行实例的数值(虽然以十进制字符串形式写入)合同 ID(请参见 smf(5)contract(4))。

[svc-scope]

smf(5) 中所示,所有服务和实例对象都包含在一个表示配置信息集合的 scope 内。本地 Oracle Solaris 实例的配置称为 localhost 范围,这是当前唯一支持的范围。

String form:

svc://[<svc-scope>]/<svc-name>
        [:<svc-instance>[@<contract-id>]]

SMF 子系统命令(如 svcadm(1M))允许(甚至要求)使用上述字符串形式的缩写。字符串开头的 svc 方案标识被认为是可选的,且 SMF 命令行实用程序中暗含该标识。当使用 svc 方案标识符时,授权组件也将缩写为 svc:/<svc-name> 而非更正式的 svc:///<svc-name>。例如,在 SMF 中写入

svc:/network/smtp:sendmail

而非更正式的

svc:///network/smtp:sendmail

甚至更为正式的

svc://localhost/network/smtp:sendmail

此外,如果用于标识唯一服务或实例,则 SMF 允许使用进一步的缩写。例如,实例名称 sendmail 是唯一的,则可以使用 svcs sendmailsvcadm restart sendmail 等。

此类缩写是 SMF 子系统的约定,不是正式 FMRI 定义的一部分。当收到 nvlist 形式的 svc 方案 FMRI 时(例如,在 libfmevent(3LIB) 订阅中),将以更正式的形式(即字符串)显示。

方案 sw 版本 0

此 FMRI 方案用于标识可执行文件、库目标文件和核心文件等软件资源。这是一个逻辑 FMRI 方案。


Member Name   Data Type   Stability
-----------------------------------------------
scheme        string      Committed, value "sw"
version       uint8       Committed, value 0
object        nvlist      See belowPrivate
[site]        nvlist      See belowPrivate
[context]     nvlist      See belowPrivate

objectsitecontext 成员均为 Private 成员,并且可能会进行不兼容的更改,但下面记录了其中的内容以供参考。

object

此必需成员用于标识软件对象。此时仅适用于驻留在文件系统内的对象。


Member     Type        Description
------------------------------------------------------------
path       string      Filesystem path to object
[root]     string      If present, real path to chroot root
                       directory
[pkg]      fmri        "pkg" scheme fmri of package that
                       delivers path
site

此可选成员用于标识对象内的站点。


Member   Type    Description
------------------------------------------------------------
[token]  string  Vendor and subsystem unique publisher
                 token id
[module] string  Source module information
[file]   string  Source filename (translation unit)
[func]   string  Source function
[line]   int64   Source file line number

context

此可选成员用于传递运行时信息。


Member             Type         Description
-------------------------------------------------------
[origin]           string       "userland" or "kernel"
[execname]         string       Executable name
[pid]              uint64       Process id
[thread-id]        uint64       Thread id
[os-instance-uuid] string       Solaris instance UUID
[zone]             string       Zone name, if not the global zone
[ctid]             uint64       Contract id
[stack]            string array Symbolic stack trace

String form:

sw://[<authority>]/
       [:root=<object.root]
       :path=<object.path>
       [#<fragment-identifier>]

根路径和对象路径中的斜杠字符 / 不进行转义。

<fragment-identifier> 为以下值之一:

:token=<site.token>

:file=<site.file>[:func=<site.func>][:line=<site.line>]
方案 zfs 版本 0

Member Name   Data Type    Stability
-------------------------------------------------------------------
scheme        string       Committed, value "zfs"
version       uint8        Committed, value 0
[pool-name]   string       Committed
pool          uint64       Committed
[vdev]        uint64       Private
[vdev-name]   string       Private
[pool-name]

池名称,如 zpool list -o name 中所示

pool

池 GUID,如 zpool list -o guid 中所示

[vdev]

未记录此 Private FMRI 成员的语义

[vdev-name]

未记录此 Private FMRI 成员的语义。

String form:
hex-vdev = 'vdev' in hexadecimal with no '0x' prefix.  
hex-pool = 'pool' in hexadecimal with no '0x' prefix.
zfs://[pool_name=<pool-name>/]pool=<hex-pool>
zfs://[pool_name=<zfs://[pool_name=<hex-pool>
[/vdev=<hex-vdev>][:vdev_name=<vdev-name>]

写入 <vdev-name> 而不转义任何 / 字符。

另请参见

hostid(1)fmadm(1M)fmd(1M)fmdump(1M)pkg(5)pkg(1)pkgadd(1M)pkginfo(1)pkgrm(1M)psradm(1M)svcadm(1M)svccfg(1M)svcprop(1)svcs(1)libfmevent(3LIB)libnvpair(3LIB)contract(4)attributes(5)smf(5)

RFC 2396