Gestión de dispositivos en Oracle® Solaris 11.2

Salir de la Vista de impresión

Actualización: Julio de 2014
 
 

Ejemplo de secuencia de comandos de RCM de copia de seguridad en cinta

En este ejemplo se muestra cómo usar una secuencia de comandos de RCM para hacer copias de seguridad en cinta.

Qué hace la secuencia de comandos de RCM de copia de seguridad en cinta

La secuencia de comandos de RCM de copia de seguridad en cinta efectúa los pasos siguientes:

  1. Configura una tabla de distribución de comandos de RCM.

  2. Llama a la rutina de distribución que corresponde al comando de RCM especificado y sale con el estado 2 para los comandos RCM no implementados.

  3. Configura la sección scriptinfo.

    rcm_script_func_info=Tape backup appl script for DR
  4. Registra todas las unidades de cinta en el sistema imprimiendo todos los nombres de dispositivos de unidad de cinta en stdout.

    rcm_resource_name=/dev/rmt/$f

    Si se produce un error, la secuencia de comandos imprime la información de error en stdout .

    rcm_failure_reason=$errmsg
  5. Configura la información de recursos para el dispositivo de cinta.

    rcm_resource_usage_info=Backup Tape Unit Number $unit
  6. Configura la información de preremove comprobando si la aplicación de copia de seguridad está utilizando el dispositivo. Si la aplicación de copia de seguridad no está utilizando el dispositivo, la operación de reconfiguración dinámica continúa. Si la aplicación de copia de seguridad está utilizando el dispositivo, la secuencia de comandos comprueba RCM_ENV_FORCE . Si RCM_ENV_FORCE está establecido en FALSE, la secuencia de comandos deniega la operación de reconfiguración dinámica e imprime el siguiente mensaje:

    rcm_failure_reason=tape backup in progress pid=...

    Si RCM_ENV_FORCE está establecido en TRUE, la aplicación de copia de seguridad se detiene y la operación de reconfiguración continúa.

Salidas de casos de reconfiguración de copia de seguridad en cinta

    A continuación, se muestran las diversas salidas que se obtienen si se utiliza el comando cfgadm para eliminar un dispositivo de cinta sin la secuencia de comandos de RCM:

  • Si utiliza el comando cfgadm y la aplicación de copia de seguridad no está utilizando el dispositivo de cinta, la operación se realiza correctamente.

  • Si utiliza el comando cfgadm y la aplicación de copia de seguridad está utilizando el dispositivo de cinta, la operación falla.

A continuación se muestran las diversas salidas que se obtienen si se utiliza el comando cfgadm para eliminar un dispositivo de cinta con la secuencia de comandos de RCM.

  • Si utiliza el comando cfgadm y la aplicación de copia de seguridad no está utilizando el dispositivo de cinta, la operación se realiza correctamente.

  • Si utiliza el comando cfgadm sin la opción –f y la aplicación de copia de seguridad está utilizando el dispositivo de cinta, la operación falla con un mensaje de error similar al siguiente:

    tape backup in progress pid=...
  • Si utiliza el comando cfgadm –f y la aplicación de copia de seguridad está utilizando el dispositivo de cinta, la secuencia de comandos detiene la aplicación de copia de seguridad y la operación de cfgadm se lleva a cabo correctamente.

Ejemplo de secuencia de comandos de RCM de copia de seguridad en cinta

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