跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris 管理:设备和文件系统 Oracle Solaris 11 Information Library (简体中文) |
SPARC: 如何将 SCSI 设备添加到 SCSI 总线中
使用 cfgadm 命令执行 PCI 或 PCIe 热插拔(任务列表)
重新配置协调管理器 (Reconfiguration Coordination Manager, RCM) 脚本概述
15. 配置和管理 Oracle Solaris Internet 存储名称服务 (Internet Storage Name Service, iSNS)
以下各节介绍了应用程序开发者和系统管理员的 RCM 脚本任务。
以下任务列表介绍了创建 RCM 脚本的应用程序开发者的任务。
|
以下任务列表介绍了创建 RCM 脚本进行站点定制的系统管理员的任务。
|
必须按以下形式命名脚本,vendor,service ,其中:
提供脚本的供应商的股票代号,或标识供应商的任何独特名称。
脚本表示的服务名称。
必须是管理员才可以安装或删除 RCM 脚本。使用下表可确定应安装 RCM 脚本的位置。
表 6-1 RCM 脚本目录
|
请参见表 6-1。
例如:
# cp ABC,sample.pl /usr/lib/rcm/scripts
# chown user:group /usr/lib/rcm/scripts/ABC,sample.pl
# pkill -HUP -x -u root rcm_daemon
例如:
# rm /usr/lib/rcm/scripts/ABC,sample.pl
# pkill -HUP -x -u root rcm_daemon
例如,在 Korn shell 中,请使用以下命令:
$ export RCM_ENV_FORCE=TRUE
例如:
$ script-name scriptinfo $ script-name register $ script-name preremove resource-name $ script-name postremove resource-name
有关更多信息,请参见如何安装 RCM 脚本。
例如,假定脚本注册了设备 /dev/dsk/c1t0d0s0。请尝试键入以下命令。
$ cfgadm -c unconfigure c1::dsk/c1t0d0 $ cfgadm -f -c unconfigure c1::dsk/c1t0d0 $ cfgadm -c configure c1::dsk/c1t0d0
![]() | 注意 - 请确保您熟悉这些命令,因为这些命令可以改变系统的状态,并会导致系统故障。 |
本示例说明如何使用 RCM 脚本执行磁带备份。
磁带备份 RCM 脚本可执行以下步骤:
设置 RCM 命令的分发表。
调用与指定的 RCM 命令对应的分发例程,并对于未实现的 RCM 命令以状态 2 退出。
设置 scriptinfo 部分。
rcm_script_func_info=Tape backup appl script for DR
通过在 stdout 中列显所有磁带机设备名称,在系统中注册所有磁带机。
rcm_resource_name=/dev/rmt/$f
如果出现错误,则该脚本将在 stdout 中列显错误信息。
rcm_failure_reason=$errmsg
为磁带设备设置资源信息。
rcm_resource_usage_info=Backup Tape Unit Number $unit
通过检查备份应用程序是否使用该设备,设置 preremove 信息。如果备份应用程序未使用该设备,则动态重新配置操作将继续进行。如果备份应用程序使用该设备,则该脚本将检查 RCM_ENV_FORCE。如果将 RCM_ENV_FORCE 设置为 FALSE,则该脚本将拒绝动态重新配置操作,并列显以下消息:
rcm_failure_reason=tape backup in progress pid=...
如果将 RCM_ENV_FORCE 设置为 TRUE,则将停止备份应用程序,重新配置操作则继续进行。
以下是使用 cfgadm 命令移除不包含 RCM 脚本的磁带设备时的各种结果。
如果使用 cfgadm 命令并且备份应用程序未使用磁带设备,则该操作将成功。
如果使用 cfgadm 命令并且备份应用程序使用磁带设备,则该操作将失败。
以下是使用 cfgadm 命令移除包含 RCM 脚本的磁带设备时的各种结果。
如果使用 cfgadm 命令并且备份应用程序未使用磁带设备,则该操作将成功。
如果使用不带 -f 选项的 cfgadm 命令并且备份应用程序使用磁带设备,则该操作将失败,并会显示以下错误消息:
tape backup in progress pid=...
如果使用 cfgadm -f 命令并且备份应用程序使用磁带设备,则该脚本会停止备份应用程序,cfgadm 操作将成功。
#! /usr/bin/perl -w # # A sample site customization RCM script. # # When RCM_ENV_FORCE is FALSE this script indicates to RCM that it cannot # release the tape drive when the tape drive is being used for backup. # # When RCM_ENV_FORCE is TRUE this script allows DR removing a tape drive # when the tape drive is being used for backup by killing the tape # backup application. # use strict; my ($cmd, %dispatch); $cmd = shift(@ARGV); # dispatch table for RCM commands %dispatch = ( "scriptinfo" => \&do_scriptinfo, "register" => \&do_register, "resourceinfo" => \&do_resourceinfo, "queryremove" => \&do_preremove, "preremove" => \&do_preremove ); if (defined($dispatch{$cmd})) { &{$dispatch{$cmd}}; } else { exit (2); } sub do_scriptinfo { print "rcm_script_version=1\n"; print "rcm_script_func_info=Tape backup appl script for DR\n"; exit (0); } sub do_register { my ($dir, $f, $errmsg); $dir = opendir(RMT, "/dev/rmt"); if (!$dir) { $errmsg = "Unable to open /dev/rmt directory: $!"; print "rcm_failure_reason=$errmsg\n"; exit (1); } while ($f = readdir(RMT)) { # ignore hidden files and multiple names for the same device if (($f !~ /^\./) && ($f =~ /^[0-9]+$/)) { print "rcm_resource_name=/dev/rmt/$f\n"; } } closedir(RMT); exit (0); } sub do_resourceinfo { my ($rsrc, $unit); $rsrc = shift(@ARGV); if ($rsrc =~ /^\/dev\/rmt\/([0-9]+)$/) { $unit = $1; print "rcm_resource_usage_info=Backup Tape Unit Number $unit\n"; exit (0); } else { print "rcm_failure_reason=Unknown tape device!\n"; exit (1); } } sub do_preremove { my ($rsrc); $rsrc = shift(@ARGV); # check if backup application is using this resource #if (the backup application is not running on $rsrc) { # allow the DR to continue # exit (0); #} # # If RCM_ENV_FORCE is FALSE deny the operation. # If RCM_ENV_FORCE is TRUE kill the backup application in order # to allow the DR operation to proceed # if ($ENV{RCM_ENV_FORCE} eq 'TRUE') { if ($cmd eq 'preremove') { # kill the tape backup application } exit (0); } else { # # indicate that the tape drive can not be released # since the device is being used for backup by the # tape backup application # print "rcm_failure_reason=tape backup in progress pid=...\n" ; exit (3); } }