탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
Oracle Solaris 관리: 장치 및 파일 시스템 Oracle Solaris 11 Information Library (한국어) |
hotplug 명령을 사용하여 PCIe 핫 플러그 기능 사용
cfgadm 명령을 사용하여 SCSI 핫 플러그 기능 사용(작업 맵)
cfgadm 명령을 사용하여 SCSI 핫 플러그 기능 사용
SPARC: SCSI 장치를 SCSI 버스에 추가하는 방법
SPARC: SCSI 제어기에서 동일한 장치를 교체하는 방법
cfgadm 명령을 사용하여 PCI 또는 PCIe 핫 플러그 기능 사용(작업 맵)
cfgadm 명령을 사용하여 PCI 또는 PCIe 핫 플러그 기능 사용
cfgadm 명령을 사용하여 SATA 핫 플러그 기능 사용
RCM(Reconfiguration Coordination Manager) 스크립트 개요
15. Oracle Solaris iSNS(Internet Storage Name Service) 구성 및 관리
다음 섹션에서는 응용 프로그램 개발자 및 시스템 관리자가 사용하는 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 셸에서는 다음 명령을 사용합니다.
$ 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로 설정되어 있으면 백업 응용 프로그램이 중지되고 재구성 작업이 진행됩니다.
다음은 RCM 스크립트를 사용하지 않고 cfgadm 명령을 사용하여 테이프 장치를 제거한 경우에 나올 수 있는 다양한 결과입니다.
cfgadm 명령을 사용하고 백업 응용 프로그램에서 테이프 장치를 사용하고 있지 않는 경우에는 작업이 성공합니다.
cfgadm 명령을 사용하고 백업 응용 프로그램에서 테이프 장치를 사용하고 있는 경우에는 작업이 실패합니다.
다음은 RCM 스크립트와 cfgadm 명령을 사용하여 테이프 장치를 제거한 경우에 나올 수 있는 다양한 결과입니다.
cfgadm 명령을 사용하고 백업 응용 프로그램에서 테이프 장치를 사용하고 있지 않는 경우에는 작업이 성공합니다.
cfgadm 명령을 -f 옵션 없이 사용하고 백업 응용 프로그램에서 테이프 장치를 사용하고 있는 경우에는 작업이 실패하고 다음과 비슷한 오류 메시지가 표시됩니다.
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); } }