JavaScript is required to for searching.
탐색 링크 건너뛰기
인쇄 보기 종료
Oracle Solaris 관리: 장치 및 파일 시스템     Oracle Solaris 11 Information Library (한국어)
search filter icon
search icon

문서 정보

본 문서 정보

1.  이동식 매체 관리(개요)

2.  이동식 매체 관리(작업)

3.  이동식 매체에 액세스(작업)

4.  CD 및 DVD에 쓰기(작업)

5.  장치 관리(개요/작업)

6.  동적으로 장치 구성(작업)

동적 재구성 및 핫 플러그 기능 사용

첨부 지점

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 장치를 구성하는 방법

RCM(Reconfiguration Coordination Manager) 스크립트 개요

RCM 스크립트란 무엇입니까?

RCM 스크립트로 어떤 작업을 수행할 수 있습니까?

RCM 스크립트 프로세스는 어떻게 작동합니까?

RCM 스크립트 명령

RCM 스크립트 처리 환경

RCM 스크립트 작업

응용 프로그램 개발자 RCM 스크립트(작업 맵)

시스템 관리자 RCM 스크립트(작업 맵)

RCM 스크립트 이름 지정

RCM 스크립트 설치 또는 제거

RCM 스크립트를 설치하는 방법

RCM 스크립트를 제거하는 방법

RCM 스크립트를 테스트하는 방법

테이프 백업 RCM 스크립트의 예

테이프 백업 RCM 스크립트가 수행하는 작업

테이프 백업 재구성 시나리오의 결과

예--테이프 백업 RCM 스크립트

7.  USB 장치 사용(개요)

8.  USB 장치 사용(작업)

9.  InfiniBand 장치 사용(개요/작업)

10.  디스크 관리(개요)

11.  디스크 관리(작업)

12.  SPARC: 디스크 설정(작업)

13.  x86: 디스크 설정(작업)

14.  COMSTAR를 사용하여 저장 장치 구성

15.  Oracle Solaris iSNS(Internet Storage Name Service) 구성 및 관리

16.  format 유틸리티(참조)

17.  파일 시스템 관리(개요)

18.  파일 시스템 만들기 및 마운트(작업)

19.  추가 스왑 공간 구성(작업)

20.  파일 및 파일 시스템 복사(작업)

21.  테이프 드라이브 관리(작업)

색인

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 스크립트를 설치해야 하는 위치를 확인합니다.

표 6-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. 적절한 디렉토리에 스크립트를 복사합니다.

    표 6-1을 참조하십시오.

    예를 들면 다음과 같습니다.

    # cp ABC,sample.pl /usr/lib/rcm/scripts
  3. 스크립트의 사용자 ID와 그룹 ID를 원하는 값으로 변경합니다.
    # chown user:group /usr/lib/rcm/scripts/ABC,sample.pl
  4. RCM 데몬에 SIGHUP을 보냅니다.
    # pkill -HUP -x -u root rcm_daemon

RCM 스크립트를 제거하는 방법

  1. 관리자로 전환합니다.
  2. RCM 스크립트 디렉토리에서 스크립트를 제거합니다.

    예를 들면 다음과 같습니다.

    # rm /usr/lib/rcm/scripts/ABC,sample.pl
  3. RCM 데몬에 SIGHUP을 보냅니다.
    # pkill -HUP -x -u root rcm_daemon

RCM 스크립트를 테스트하는 방법

  1. 스크립트를 실행하기 전에 명령줄 셸에서 RCM_ENV_FORCE 등의 환경 변수를 설정합니다.

    예를 들어, Korn 셸에서는 다음 명령을 사용합니다.

    $ 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_FORCEFALSE로 설정된 경우 스크립트는 동적 재구성 작업을 거부하고 다음과 같은 메시지를 인쇄합니다.

    rcm_failure_reason=tape backup in progress pid=...

    RCM_ENV_FORCETRUE로 설정되어 있으면 백업 응용 프로그램이 중지되고 재구성 작업이 진행됩니다.

테이프 백업 재구성 시나리오의 결과

다음은 RCM 스크립트를 사용하지 않고 cfgadm 명령을 사용하여 테이프 장치를 제거한 경우에 나올 수 있는 다양한 결과입니다.

다음은 RCM 스크립트와 cfgadm 명령을 사용하여 테이프 장치를 제거한 경우에 나올 수 있는 다양한 결과입니다.

예—테이프 백업 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);
            }
    }