solaris-kz 标记使用 brands(5) 中所述的标记区域框架运行区域,此类区域的内核和 OS 安装独立于全局区域使用的内核和 OS 安装。
solaris-kz 安装独立于全局区域的安装;该安装不是 pkg(5) 链接映像,可以独立于全局区域内容进行修改。solaris-kz 区域可以像其他标记区域那样直接从全局区域安装,也可以按下文中所述通过引导介质安装。
指定用于安装的清单时,使用的清单应是一个适合全局区域安装的清单。由于内核区域始终安装到根池的已知位置,不应指定安装目标磁盘。
引导环境 (Boot environment, BE) 管理独立于全局区域。在全局区域中创建 BE 不会在该区域中创建新 BE。请参见 beadm(1M)。
solaris-kz 区域与其他标记区域不同,该区域运行单独的内核,从全局区域分析该区域时会有一些明显的不同。
在 solaris-kz 区域中运行的进程不能直接从全局区域访问。例如,要查看名为 kz-zone 的内核区域中的一系列进程,不能使用带 –z kz-zone 选项的 ps 命令,而需要使用以下命令:
# zlogin kz-zone ps -e
全局区域和每个内核区域管理自己的进程 ID 空间。因此 process 1234 可能同时存在于全局区域以及一个或多个内核区域。这些进程是不同的进程。如果全局区域管理员要中止 kz-zone 中的 process 1234,应使用以下命令或等效命令执行此操作:
# zlogin kz-zone kill 1234
从全局区域运行 ps(1) 和类似工具将看到与管理 solaris-kz 区域实例关联的进程,如 kzhost 和 zlogin-kz。这对于调试很有用,但在其他情况下,这些是专用实现详细信息。
类似地,资源管理功能也是不同的。例如,在配置 solaris-kz 区域时 max-processes 这类资源控制不可用,因为其只在共享单个内核实例时才有意义。即在 solaris-kz 区域内运行的进程不会占用全局区域中的进程表槽,因为内核是独立的。
zonestat 实用程序显示区域的资源使用情况。其输出通常是正确的,但可能会反映主机值。例如,lwps 这类资源控制值显示主机上使用的 lwps,而不是在区域内使用的 lwps。
solaris-kz 标记使用特定的硬件功能;这些功能在较旧的系统和虚拟环境中可能不可用。要检查系统是否支持 solaris-kz brand,请安装 brand-solaris-kz 软件包,然后运行 virtinfo 命令。
# virtinfo -c supported list kernel-zone
如果在支持列表中没有显示 kernel-zone,可查看 syslog 获取更多信息。与内核区域有关的消息将包含字符串 kernel-zone。
solaris-kz 标记区域必须位于一个或多个设备上。如果在安装前未定制配置,则将在全局区域的根 zpool 中创建缺省的 zfs(1M) 卷。使用设备资源指定安装区域的设备时,这些设备资源的 bootpri 属性可设置为任何正整数值。如果不会将某个设备用作引导设备,则该设备不能设置 bootpri 属性。 要取消设置 bootpri,可在设备资源范围内清除 bootpri。如果在安装过程中存在多个可引导的设备,则这些设备将用于区域中的镜像 ZFS 根池。缺省引导顺序由以下设备排序方式确定:先按 bootpri 排序,如果多个设备具有相同的 bootpri,再按 id 排序。
不能为内核区域设置 zonepath。作为一项实现具体设置,会使用 tmpfs(7FS) 将其设置为一个固定位置。它不包含任何持久数据或用户可调的数据。由于区域根包含在根 ZFS 卷内,因此它不会挂载到全局区域的区域路径下,这点与传统区域不同。访问区域根只能通过区域本身来实现,例如 zlogin。
solaris-kz 区域不能直接利用共享内核功能(如 ZFS 数据集和文件系统挂载),而是通过块设备(如原始磁盘、ZFS 卷和 lofi 设备)来为区域提供存储。
solaris-kz 区域的根始终可以访问。可以通过在 zonecfg 中使用 add device 来添加存储。指定的设备路径必须是原始设备,要么是 ZFS 卷、原始磁盘,要么是 lofi 设备。指定的设备必须是整个磁盘或 LUN。应使用不带任何分区/分片后缀的设备路径,例如:
# zonecfg -z myzone zonecfg:myzone> add device zonecfg:myzone:device> set match=/dev/rdsk/c4t9d0 zonecfg:myzone:device> set id=4 zonecfg:myzone:device> set bootpri=1
可以指定 id 来固定区域内的磁盘地址。如果不指定,则自动分配。
必须至少将一个设备的 bootpri 设置为正整数以指示该设备是可引导的。在内核区域内部,所有用作 ZFS 根池的镜像或者备件的设备必须是可引导的。
如 zonecfg(1M) 中所述,设备资源还可以配置存储 URI 使区域的配置可移植到其他主机系统。请参见 suri(5)。
对于 solaris-kz 标记区域,add device 只支持存储设备。
内核区域必须是独占栈。通过添加 net 或 anet 资源来提供网络访问。这些资源定义的 NIC 用作虚拟 NIC 驱动程序 zvnet 的后端,如在区域中所看到的那样。对于存储设备,可以指定 ID 来标识区域内的虚拟 NIC 地址。
内核区域可以自己托管区域(在这种情况下,内核区域充当这些区域的全局区域)。但是,因为内核区域的网络配置部分由其区域配置定义,托管区域在可以使用的 MAC 地址方面受到限制。不允许将 mac-address 设置为 random 或特定 MAC 地址来引导区域。
要向内核区域提供额外的 MAC 地址,请将其添加到相关资源的 mac-address 属性。请参见 zonecfg(1M)。这将使该 mac-address 成为内核区域中的出厂地址。
托管区域然后可以自己使用该 MAC 地址。为此,需要将托管区域的 mac-address 属性配置为所设置的显式 MAC 地址(使用 mac-address 属性),或指定 auto。有关这些设置的详细信息,请参见 zonecfg(1M)。
必须将固定数量的主机 RAM 分配给内核区域。这通过在 zonecfg(1M) 中为 capped-memory 资源设置 physical 属性来配置。指定值必须舍入到支持的平台值。分配的内存将被锁定,因此交互设备不能对其分页。
可以通过 zoneadm suspend 命令将内核区域挂起到磁盘。区域的运行状态将写入到磁盘。由于这包括区域使用的整个 RAM,因此占用的时间和空间相当多。
仅当内核区域的配置中有暂停资源时,内核区域才支持暂停和恢复。在暂停资源中,必须指定路径或存储(但不能同时指定两者)。path 属性指定将包含暂停映像的文件的名称。包含该文件的目录必须存在,并且 root 用户可写入该目录。在启动 svc:/system/zones:default 之前挂载的任何文件系统都可使用。storage 属性指定将包含暂停映像的磁盘设备的存储 URI(请参见 suri(5))。将使用整个设备。此设备不能共享。
暂停映像会在写入之前压缩。因此,暂停映像的大小通常会明显小于区域的 RAM 大小。在暂停期间,会向控制台日志中输出并记录一条消息,指示暂停映像的大小。
在压缩之后,会使用 AES-128-CCM 对暂停映像加密。加密密钥是由 /dev/random(请参见 random(7D))自动生成的,并存储在密钥源资源的 raw 属性中。
如果区域挂起,zoneadm boot 命令将恢复区域。如果不需要恢复,可以使用 boot –R 选项进行全新引导。
如果多个主机可以访问暂停映像和区域的其余存储(通常通过使用 suspend:storage 和 device:storage 属性访问),则暂停映像可用于支持使用 zoneadm detach 或 zoneadm attach 的一般区域冷迁移之后的热迁移,但使用 zoneadm suspend 而不是 zoneadm shutdown 作为第一步。这将避免在目标主机上产生区域启动成本(不包括恢复区域所用的时间)。
源主机和目标主机必须采用相同的平台。在 x86 上,供应商 (AMD/Intel) 以及 CPU 修订版本必须匹配。在 SPARC 上,硬件平台必须相同。
在恢复时,使用区域的当前配置来引导,并允许指定新的配置。但是,存在一些限制,因为恢复区域需要特定设置。任何不兼容都将导致引导失败。例如,出现以下情况时,引导过程可能会失败:
CPU 支持不同特性(有关示例,请参见 cpuid(7D))
配置具有不同的 capped-memory 值
配置定义了不同的虚拟 CPU 数量
缺少磁盘(没有具有合适的 id 属性的 device 资源)
缺少虚拟 NIC(没有具有合适的 id 属性的 net 或 anet 资源)
没有对存储标识执行特定检查请注意,管理员有责任确保在特定 ID 下列出的设备是区域应该看到的设备。
为此标记定义了以下辅助状态(如 zoneadm list -is 所示):
此区域已挂起,下一次引导时将恢复。请注意,必须连接此区域才能看到此状态。
此区域处于 running 状态,但内核调试器正在此区域内运行,因此无法处理网络请求等。可以连接到区域控制台与调试器交互 (kmdb)。
此区域处于 running 状态,但区域遇到紧急情况,不过主机未受影响。
内核区域的每个可引导设备都包含称为主机数据的状态信息。此数据跟踪区域在何处使用、是否已暂停以及其他状态信息。主机数据使用 AES-128-CCM 加密和验证,将相同的加密密钥用于暂停映像。
在读取或引导某个内核区域时,会读取主机数据以确定是否有其他系统在使用该内核区域的引导存储。如果有其他系统在使用引导存储,则该内核区域将进入不可用状态,并且错误消息将指示哪个系统正在使用引导存储。如果可以确定没有其他系统在使用引导存储,则可以在 zoneadm attach 中使用 -x force-takeover extended 选项修复该内核区域。在执行此命令之前,请查看下面的警告。
如果加密密钥不可访问,则将无法读取主机数据和任何暂停映像。在这种情况下,任何读取或引导区域的尝试都将导致区域进入不可用状态。如果无法恢复加密密钥,则可以在 zoneadm attach 子命令中使用 -x initialize-hostdata extended 选项来生成新的加密密钥和主机数据。在执行此命令之前,请查看下面的警告。
要防止在热迁移或冷迁移过程中丢失加密密钥,请在源系统上使用 zonecfg export 生成一个可在目标系统上使用的命令文件。例如:
root@host1# zonecfg -z myzone export -f /net/.../myzone.cfg root@host2# zonecfg -z myzone -f /net/.../myzone.cfg
在此示例中,因为 myzone.cfg 包含加密密钥,因此必须保护其内容以防泄露。
可以使用 SYSsolaris-kz 模板对 solaris-kz 标记区域进行配置。
此标记不支持以下 zonecfg(1M) 资源和属性:
anet:address anet:linkmode anet:pkey capped-memory:locked capped-memory:swap dataset device:allow-partition device:allow-raw-io fs file-mac-profile fs-allowed ip-type limitpriv max-lwps max-msg-ids max-processes max-sem-ids max-shm-memory rctl:zone.max-lofi rctl:zone.max-swap rctl:zone.max-locked-memory rctl:zone.max-shm-memory rctl:zone.max-shm-ids rctl:zone.max-sem-ids rctl:zone.max-msg-ids rctl:zone.max-processes rctl:zone.max-lwps rootzpool zpool
实时区域重新配置不支持 solaris-kz 标记区域。
对于此标记,实时区域重新配置支持以下 zonecfg(1M) 资源和属性:
capped-cpu (zone.cpu-cap) cpu-shares (zone.cpu-shares) device virtual-cpu
对于此标记,实时区域重新配置不支持以下 zonecfg(1M) 资源和属性:
admin anet anet:mac capped-memory dedicated-cpu net pool scheduling-class
如果在持久配置中更改了列出的不支持的资源和属性并将更改应用于正在运行的区域,实时区域重新配置将忽略这些更改。
如果尝试在实时配置中修改列出的不支持的资源和属性,这些修改都将被拒绝。
solaris-kz 标记支持的属性具有如下所列的特定缺省值:
Resource Property Default Value global zonepath /system/zones/%{zonename} autoboot false ip-type exclusive auto-shutdown shutdown net configure-allowed-address true anet mac-address auto lower-link auto link-protection mac-nospoof anet:mac mac-address auto
以下 solaris-kz 标记特定的子命令选项受 zoneadm(1M) 支持。
将指定的 solaris-kz 标记区域映像连接到区域。假定区域的可引导设备已正确填充。
-x force-takeover 扩展选项清除指示区域已在其他系统上安装或运行的状态信息。使用此选项时需要极其谨慎:如果某个区域的两个实例同时使用同一个存储,则将损坏文件系统。
-x initialize-hostdata 扩展选项重新初始化加密密钥和主机数据。与使用 -x force-takeover 一样,在使用此选项之前,要确保没有其他系统在使用该区域。
如果区域挂起,可以使用 -R 选项忽略挂起的映像(稍后将删除该映像),并进行全新引导。
-L 选项通知引导装载程序列出可用的引导环境。可通过交互方式选择要引导的 BE。
-Z 选项通知引导装载程序引导特定的 BE。例如:
# zoneadm -z myzone \
boot -- -Z rpool/ROOT/solaris
提供从系统信息库安装后将应用的配置文件或配置文件的目录。
所有配置文件必须具有 .xml 扩展名。
对于 zoneadm clone,如果存储是自动创建的,则其创建时的大小与源区域中磁盘的大小相同。
可以使用全局区域的发布者和缺省 AI 清单、定制 AI 清单、Solaris 安装介质的 ISO 映像或统一归档文件安装核心区域。
除非使用 –a、–b 或 –m 选项,否则使用缺省 AI 清单、/usr/share/auto_install/manifest/default.xml 和全局区域的 pkg(5) 发布者执行安装。支持的介质类型包括文本安装程序和自动安装程序。这允许安装任何支持的 Oracle Solaris 版本。Solaris 11.2 是核心区域中支持的第一个 Solaris 版本。
如果使用 –m 选项指定 AI 清单,将根据 AI 清单的内容执行 IPS 或统一归档文件安装。请参见 ai_manifest(4)。
如果使用 –b 选项提供可引导 Solaris 安装介质的 ISO 映像,则从安装介质引导核心区域,且安装程序在区域的控制台上运行。在安装期间建立控制台登录会话,从而允许与安装程序进行交互和/或观察安装程序。
如果使用 –a 选项指定统一归档文件,则从统一归档文件执行安装。如果统一归档文件包含多个区域(archiveadm info 输出中的可部署系统),使用 –z 选项指定要安装哪个归档的区域。统一归档文件是使用 archiveadm(1M) 创建。
支持下列安装选项。
从指定的统一归档文件安装。archived_zone 可以是全局区域、核心区域或 solaris 标记区域。如果归档区域是 solaris 标记区域,则执行非全局-全局 pkg(5) 映像转换。为了成功转换,区域的安装环境必须有足够的网络访问,从而允许访问所有 pkg(5) 发布者。最轻松的实现方式是允许通过 DHCP 配置核心区域的网络。
从指定介质引导并安装。
提供从系统信息库安装后将应用的配置文件或配置文件的目录。
所有配置文件必须具有 .xml 扩展名。
将指定给自动化安装程序的清单文件。
显式设置根文件系统的大小(缺省值为 16g)。
从 https URI 处的统一归档文件安装时使用指定的证书、CA 证书和/或密钥。仅在与 –a 选项一起使用时有效。
安装过程的详细输出。
使用 archived_zone 从统一归档文件安装区域。请参见 archiveadm(1M) info 命令的输出中的 "Deployable Systems"(可部署系统)了解特定统一归档文件的可用值列表。仅在与 –a 选项一起使用时有效。
archiveadm(1M)、ai_manifest(4)、pkg(5)
可以在内核区域所在的同一主机上使用 VirtualBox,但必须进行相应地配置。有关更多详细信息,请参见 VirtualBox 文档。