Gestion des périphériques dans Oracle® Solaris 11.2

Quitter la vue de l'impression

Mis à jour : Juillet 2014
 
 

Exemple de script RCM de sauvegarde sur bande

Cet exemple illustre comment utiliser un script RCM pour effectuer des sauvegardes sur bande.

Actions du script RCM de sauvegarde sur bande

Le script RCM de sauvegarde sur bande effectue les opérations suivantes :

  1. Définition d'une table des sauts pour les commandes RCM.

  2. Appel de la routine de saut correspondant aux commandes RCM spécifiées et arrêt avec l'état 2 pour les commandes RCM non implémentées.

  3. Configuration de la section scriptinfo.

    rcm_script_func_info=Tape backup appl script for DR
  4. Enregistrement de tous les lecteurs de bande dans le système en affichant tous les noms de périphériques de lecteurs de bande sur stdout.

    rcm_resource_name=/dev/rmt/$f

    Si une erreur se produit, le script affiche les informations relatives à l'erreur sur stdout.

    rcm_failure_reason=$errmsg
  5. Configuration des informations sur les ressources pour le périphérique à bande.

    rcm_resource_usage_info=Backup Tape Unit Number $unit
  6. Configuration des informations de preremove en vérifiant si l'application de sauvegarde utilise le périphérique. Si l'application de sauvegarde n'utilise pas le périphérique, la reconfiguration dynamique se poursuit. Si l'application de sauvegarde utilise le périphérique, le script vérifie RCM_ENV_FORCE. Si RCM_ENV_FORCE est défini sur FALSE, le script refuse la reconfiguration dynamique et affiche le message suivant :

    rcm_failure_reason=tape backup in progress pid=...

    Si RCM_ENV_FORCE est défini sur TRUE, l'application de sauvegarde est arrêtée et l'opération de reconfiguration se poursuit.

Résultats des scénarios de reconfiguration de la sauvegarde sur bande

    Voici les différents résultats de l'utilisation de la commande cfgadm pour supprimer un périphérique à bande sans recourir au script RCM :

  • Si vous utilisez la commande cfgadm et que l'application de sauvegarde n'utilise pas le périphérique à bande, l'opération réussit.

  • Si vous utilisez la commande cfgadm et que l'application de sauvegarde utilise le périphérique à bande, l'opération échoue.

Voici les différents résultats si vous utilisez la commande cfgadm pour supprimer un périphérique à bande avec le script RCM.

  • Si vous utilisez la commande cfgadm et que l'application de sauvegarde n'utilise pas le périphérique à bande, l'opération réussit.

  • Si vous utilisez la commande cfgadm sans l'option –f et que l'application de sauvegarde utilise le périphérique à bande, l'opération échoue et un message d'erreur semblable à celui-ci s'affiche :

    tape backup in progress pid=...
  • Si vous utilisez la commande cfgadm –f et que l'application de sauvegarde utilise le périphérique à bande, le script arrête l'application de sauvegarde et l'opération cfgadm réussit.

Exemple : script RCM de sauvegarde sur bande

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