JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:设备和文件系统     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  管理可移除介质(任务)

2.  写入 CD 和 DVD(任务)

3.  管理设备(任务)

4.  动态配置设备(任务)

动态重新配置和热插拔

连接点

拆离 PCI 或 PCIe 适配卡

连接 PCI 或 PCIe 适配卡

使用 (hotplug) 命令进行 PCIe 热插拔

PCI 热插拔操作 (hotplug) 故障排除

使用 cfgadm 命令执行 SCSI 热插拔(任务列表)

使用 cfgadm 命令进行 SCSI 热插拔

如何显示有关 SCSI 设备的信息

如何取消配置 SCSI 控制器

如何配置 SCSI 控制器

如何配置 SCSI 设备

如何断开 SCSI 控制器连接

SPARC: 如何连接 SCSI 控制器

SPARC: 如何将 SCSI 设备添加到 SCSI 总线中

SPARC: 如何更换 SCSI 控制器上的相同设备

SPARC: 如何移除 SCSI 设备

对 SCSI 配置问题进行故障排除

如何解决失败的 SCSI 取消配置操作

使用 cfgadm 命令执行 PCI 或 PCIe 热插拔(任务列表)

使用 cfgadm 命令执行 PCI 或 PCIe 热插拔

PCIe LED 指示灯行为

如何显示 PCI 插槽配置信息

如何移除 PCI 适配卡

如何添加 PCI 适配卡

对 PCI 配置问题进行故障排除

使用 cfgadm 命令进行 SATA 热插拔

如何取消配置 SATA 设备

如何配置 SATA 设备

重新配置协调管理器 (Reconfiguration Coordination Manager, RCM) 脚本概述

什么是 RCM 脚本?

RCM 脚本的功能

RCM 脚本进程的工作原理

RCM 脚本命令

RCM 脚本处理环境

RCM 脚本任务

应用程序开发者 RCM 脚本(任务列表)

系统管理员 RCM 脚本(任务列表)

命名 RCM 脚本

安装或删除 RCM 脚本

如何安装 RCM 脚本

如何删除 RCM 脚本

如何测试 RCM 脚本

磁带备份 RCM 脚本示例

磁带备份 RCM 脚本的功能

磁带备份重新配置方案的结果

示例-磁带备份 RCM 脚本

5.  管理 USB 设备(任务)

6.  使用 InfiniBand 设备(概述/任务)

7.  管理磁盘(概述)

8.  管理磁盘使用(任务)

9.  管理磁盘(任务)

10.  设置磁盘(任务)

11.  使用 COMSTAR 配置存储设备(任务)

12.  配置和管理 Oracle Solaris Internet 存储名称服务 (Internet Storage Name Service, iSNS)

13.  format 实用程序(参考信息)

14.  管理文件系统(概述)

15.  创建和挂载文件系统(任务)

16.  配置附加交换空间(任务)

17.  复制文件和文件系统(任务)

18.  管理磁带机(任务)

索引

RCM 脚本任务

以下各节介绍了应用程序开发者和系统管理员的 RCM 脚本任务。

应用程序开发者 RCM 脚本(任务列表)

以下任务列表介绍了创建 RCM 脚本的应用程序开发者的任务。

任务
说明
参考
1. 确定应用程序使用的资源。
确定应用程序使用的可能要动态移除的资源(设备名称)。
2. 确定用于释放资源的命令。
确定用于通知应用程序从应用程序中正常释放资源的命令。
应用程序文档
3. 确定用于资源移除后进行后续处理的命令。
包括用于通知应用程序资源移除的命令。
4. 确定资源移除失败时使用的命令。
包括用于通知应用程序可用资源的命令。
5. 编写 RCM 脚本。
根据任务 1-4 中标识的信息,编写 RCM 脚本。
6. 安装 RCM 脚本。
将脚本添加到相应的脚本目录中。
7. 测试 RCM 脚本
通过手动运行脚本命令和启动动态重新配置操作来测试脚本。

系统管理员 RCM 脚本(任务列表)

以下任务列表介绍了创建 RCM 脚本进行站点定制的系统管理员的任务。

任务
说明
参考
1. 确定要动态移除的资源。
使用 cfgadm -l 命令确定可能要移除的资源(设备名称)。
2. 确定要停止的应用程序。
确定用于正常停止应用程序的命令。
应用程序文档
3. 确定用于移除资源前后进行各种处理的命令。
确定移除资源前后要执行的操作。
4. 编写 RCM 脚本。
根据任务 1-3 中标识的信息,编写 RCM 脚本。
5. 安装 RCM 脚本。
将脚本添加到相应的脚本目录中。
6. 测试 RCM 脚本。
通过手动运行脚本命令和启动动态重新配置操作来测试脚本。

命名 RCM 脚本

必须按以下形式命名脚本,vendor,service ,其中:

vendor

提供脚本的供应商的股票代号,或标识供应商的任何独特名称。

service

脚本表示的服务名称。

安装或删除 RCM 脚本

必须是管理员才可以安装或删除 RCM 脚本。使用下表可确定应安装 RCM 脚本的位置。

表 4-1 RCM 脚本目录

目录位置
脚本类型
/etc/rcm/scripts
特定系统的脚本
/usr/platform/`uname -i`/lib/rcm/scripts
特定硬件实现的脚本
/usr/platform/`uname -m`/lib/rcm/scripts
特定硬件类的脚本
/usr/lib/rcm/scripts
任何硬件的脚本

如何安装 RCM 脚本

  1. 成为管理员。
  2. 将脚本复制到相应目录。

    请参见表 4-1

    例如:

    # cp ABC,sample.pl /usr/lib/rcm/scripts
  3. 将脚本的用户 ID 和组 ID 更改为所需的值。
    # chown user:group /usr/lib/rcm/scripts/ABC,sample.pl
  4. SIGHUP 发送到 RCM 守护进程。
    # pkill -HUP -x -u root rcm_daemon

如何删除 RCM 脚本

  1. 成为管理员。
  2. 从 RCM 脚本目录中删除脚本。

    例如:

    # rm /usr/lib/rcm/scripts/ABC,sample.pl
  3. SIGHUP 发送到 RCM 守护进程。
    # pkill -HUP -x -u root rcm_daemon

如何测试 RCM 脚本

  1. 运行脚本之前,在命令行 shell 中设置环境变量,如 RCM_ENV_FORCE

    例如,在 Korn shell 中,请使用以下命令:

    $ export RCM_ENV_FORCE=TRUE
  2. 通过从命令行手动运行脚本命令来测试脚本。

    例如:

    $ script-name scriptinfo
    $ script-name register
    $ script-name preremove resource-name
    $ script-name postremove resource-name
  3. 确保脚本中的每个 RCM 脚本命令都会列显 stdout 的相应输出。
  4. 在相应的脚本目录中安装脚本。

    有关更多信息,请参见如何安装 RCM 脚本

  5. 通过启动动态删除操作来测试脚本。

    例如,假定脚本注册了设备 /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 脚本可执行以下步骤:

  1. 设置 RCM 命令的分发表。

  2. 调用与指定的 RCM 命令对应的分发例程,并对于未实现的 RCM 命令以状态 2 退出。

  3. 设置 scriptinfo 部分。

    rcm_script_func_info=Tape backup appl script for DR
  4. 通过在 stdout 中列显所有磁带机设备名称,在系统中注册所有磁带机。

    rcm_resource_name=/dev/rmt/$f

    如果出现错误,则该脚本将在 stdout 中列显错误信息。

    rcm_failure_reason=$errmsg
  5. 为磁带设备设置资源信息。

    rcm_resource_usage_info=Backup Tape Unit Number $unit
  6. 通过检查备份应用程序是否使用该设备,设置 preremove 信息。如果备份应用程序未使用该设备,则动态重新配置操作将继续进行。如果备份应用程序使用该设备,则该脚本将检查 RCM_ENV_FORCE。如果将 RCM_ENV_FORCE 设置为 FALSE,则该脚本将拒绝动态重新配置操作,并列显以下消息:

    rcm_failure_reason=tape backup in progress pid=...

    如果将 RCM_ENV_FORCE 设置为 TRUE,则将停止备份应用程序,重新配置操作则继续进行。

磁带备份重新配置方案的结果

以下是使用 cfgadm 命令删除不包含 RCM 脚本的磁带设备时的各种结果:

以下是使用 cfgadm 命令删除包含 RCM 脚本的磁带设备时的各种结果。

示例-磁带备份 RCM 脚本

#! /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);
            }
    }