Skip Navigation Links | |
Exit Print View | |
Oracle Solaris 11.1 Administration: Devices and File Systems Oracle Solaris 11.1 Information Library |
1. Managing Removable Media (Tasks)
2. Writing CDs and DVDs (Tasks)
4. Dynamically Configuring Devices (Tasks)
Dynamic Reconfiguration and Hot-Plugging
Detaching PCI or PCIe Adapter Cards
Attaching PCI or PCIe Adapter Cards
PCIe Hot-Plugging With the (hotplug) Command
Troubleshooting PCI Hot Plug Operations (hotplug)
SCSI Hot-Plugging With the cfgadm Command (Task Map)
SCSI Hot-Plugging With the cfgadm Command
How to Display Information About SCSI Devices
How to Unconfigure a SCSI Controller
How to Configure a SCSI Controller
How to Configure a SCSI Device
How to Disconnect a SCSI Controller
SPARC: How to Connect a SCSI Controller
SPARC: How to Add a SCSI Device to a SCSI Bus
SPARC: How to Replace an Identical Device on a SCSI Controller
SPARC: How to Remove a SCSI Device
Troubleshooting SCSI Configuration Problems
How to Resolve a Failed SCSI Unconfigure Operation
PCI or PCIe Hot-Plugging With the cfgadm Command (Task Map)
PCI or PCIe Hot-Plugging With the cfgadm Command
How to Display PCI Slot Configuration Information
How to Remove a PCI Adapter Card
Troubleshooting PCI Configuration Problems
SATA Hot-Plugging With the cfgadm Command
How to Unconfigure a SATA Device
How to Configure a SATA Device
Reconfiguration Coordination Manager (RCM) Script Overview
How Does the RCM Script Process Work?
RCM Script Processing Environment
Application Developer RCM Script (Task Map)
System Administrator RCM Script (Task Map)
Installing or Removing an RCM Script
Tape Backup RCM Script Example
What the Tape Backup RCM Script Does
5. Managing USB Devices (Tasks)
6. Using InfiniBand Devices (Overview/Tasks)
9. Administering Disks (Tasks)
11. Configuring Storage Devices With COMSTAR (Tasks)
12. Configuring and Managing the Oracle Solaris Internet Storage Name Service (iSNS)
13. The format Utility (Reference)
14. Managing File Systems (Overview)
15. Creating and Mounting File Systems (Tasks)
16. Configuring Additional Swap Space (Tasks)
17. Copying Files and File Systems (Tasks)
The following sections describe the RCM script tasks for application developers and system administrators.
The following task map describes the tasks for an application developer who is creating an RCM script.
|
The following task map describes the tasks for a system administrator who is creating an RCM script to do site customization.
|
A script must be named as vendor,service where the following applies:
Is the stock symbol of the vendor that provides the script, or any distinct name that identifies the vendor.
Is the name of the service that the script represents.
You must be an administrator to install or remove an RCM script. Use this table to determine where you should install your RCM script.
Table 4-1 RCM Script Directories
|
See Table 4-1.
For example:
# 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
For example:
# rm /usr/lib/rcm/scripts/ABC,sample.pl
# pkill -HUP -x -u root rcm_daemon
For example, in the Korn shell, use the following:
$ export RCM_ENV_FORCE=TRUE
For example:
$ script-name scriptinfo $ script-name register $ script-name preremove resource-name $ script-name postremove resource-name
For more information, see How to Install an RCM Script.
For example, assume your script registers the device, /dev/dsk/c1t0d0s0. Try these commands.
$ cfgadm -c unconfigure c1::dsk/c1t0d0 $ cfgadm -f -c unconfigure c1::dsk/c1t0d0 $ cfgadm -c configure c1::dsk/c1t0d0
Caution - Make sure that you are familiar with these commands because they can alter the state of the system and cause system failures. |
This example illustrates how to use an RCM script for tape backups.
The tape backup RCM script performs the following steps:
Sets up a dispatch table of RCM commands.
Calls the dispatch routine that corresponds to the specified RCM command and exits with status 2 for unimplemented RCM commands.
Sets up the scriptinfo section.
rcm_script_func_info=Tape backup appl script for DR
Registers all tape drives in the system by printing all tape drive device names to stdout.
rcm_resource_name=/dev/rmt/$f
If an error occurs, the script prints the error information to stdout.
rcm_failure_reason=$errmsg
Sets up the resource information for the tape device.
rcm_resource_usage_info=Backup Tape Unit Number $unit
Sets up the preremove information by checking if the backup application is using the device. If the backup application is not using the device, the dynamic reconfiguration operation continues. If the backup application is using the device, the script checks RCM_ENV_FORCE. If RCM_ENV_FORCE is set to FALSE, the script denies the dynamic reconfiguration operation and prints the following message:
rcm_failure_reason=tape backup in progress pid=...
If RCM_ENV_FORCE is set to TRUE, the backup application is stopped, and the reconfiguration operation proceeds.
Here are the various outcomes if you use the cfgadm command to remove a tape device without the RCM script:
If you use the cfgadm command and the backup application is not using the tape device, the operation succeeds.
If you use the cfgadm command and the backup application is using the tape device, the operation fails.
Here are the various outcomes if you use the cfgadm command to remove a tape device with the RCM script.
If you use the cfgadm command and the backup application is not using the tape device, the operation succeeds.
If you use the cfgadm command without the -f option and the backup application is using the tape device, the operation fails with an error message similar to the following:
tape backup in progress pid=...
If you use the cfgadm -f command and the backup application is using the tape device, the script stops the backup application and the cfgadm operation succeeds.
#! /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); } }