본문 바로가기

운영체제

[HPUX 11i v2] HPUX의 커널 재구성(kcmodule)

** 출처 : http://docs.hp.com/ko/5990-8178/ch03s10.html

* 커널 구성 명령의 개요

커널 구성을 관리하는 데 사용되는 세 가지 주요 명령으로 kconfig, kcmodulekctune이 있습니다.

kconfig는 전체 커널 구성을 관리하는 데 사용됩니다. 이 명령은 구성을 저장, 로드, 복사, 삭제하고, 구성의 이름을 변경하며, 구성을 내보내고 가져올 수 있도록 합니다. 또한, 기존의 저장된 구성을 나열하고 자세한 정보를 제공할 수도 있습니다. 자세한 내용은 “kconfig를 통한 저장된 구성 관리” 또는 kconfig(1M) 맨페이지를 참조하십시오.

kcmodule은 커널 모듈을 관리하는 데 사용됩니다. 커널 모듈은 장치 드라이버, 커널 하위 시스템 또는 커널 코드의 본문일 수 있습니다. 각 모듈은 사용되지 않거나 주 커널 실행 파일에 정적으로 바인딩되어 있거나 동적으로 로드될 수 있습니다. kcmodule은 현재 실행 중인 구성이나 저장된 구성에 있는 모듈의 상태를 표시하거나 변경합니다. 자세?내용은 “kcmodule을 사용한 커널 모듈 관리” 또는 kcmodule(1M) 맨페이지를 참조하십시오.

kctune은 커널 튜너블 매개 변수를 관리하는 데 사용됩니다. 커널 튜너블 매개 변수는 커널의 동작을 제어하는 변수입니다. 이 변수들의 용도는 다양합니다. 일반적인 용도에는 시스템 리소스의 할당을 제어하는 작업과 커널 성능의 다양한 측면을 조정하는 작업 등이 있습니다. kctune은 현재 실행 중인 구성이나 저장된 구성에서 튜너블 매개 변수의 값을 표시하거나 변경합니다. 자세한 내용은 “kctune을 사용한 커널 튜너블 매개 변수 관리” 또는 kctune(1M) 맨페이지를 참조하십시오.

이러한 세 가지 주요 명령 외에도 두 가지 커널 구성 명령이 있습니다. kcpath 명령은 현재 실행 중인 커널의 위치 정보를 출력합니다. 이 명령은 이러한 정보가 필요한 스크립트와 응용 프로그램에서 사용됩니다. 자세한 내용은 kcpath(1M) 맨페이지를 참조하십시오. kclog 명령은 커널 구성 로그 파일을 검색합니다. 자세한 내용은 “커널 구성 로그 파일” 또는 kclog(1M) 맨페이지를 참조하십시오.

마지막으로, 이전 HP-UX 릴리즈에 있는 mk_kernel, kmpathkmtune 명령을 계속해서 사용할 수 있습니다. 이 명령들은 위에 나열된 명령을 호출하는 작은 셸 스크립트로 다시 구현되었습니다. 이러한 이전 명령들은 점차 사용되지 않으므로 이후 릴리즈에서는 제거될 것입니다. mk_kernel(1M), kmpath(1M)kmtune(1M)을 참조하십시오.

* 변경 지속성

기본적으로 커널 구성 도구는 구성 변경을 현재 실행 중인 시스템에 적용하여 동작이 즉시 변경되게 합니다. 시스템 관리자는 -h(hold) 옵션을 명령에 지정하여 기본적인 처리를 재정의할 수 있습니다. 이 옵션은 시스템이 다시 부팅될 때까지 변경이 보류되도록 합니다. HP는 다음에 곧 다시 부팅할 것으로 예상되는 경우에만 이 옵션을 사용하도록 권장합니다. 변경을 한 후 몇 개월 동안 다시 부팅하지 않으면 해당 요청을 잊어버린 관리자는 변경 사항을 보고 문제로 여길 수도 있습니다.

일부 구성 변경은 다시 부팅하지 않으면 적용될 수 없습니다. 이러한 변경은 -h 옵션이 지정되지 않아도 시스템을 다시 부팅할 때까지 보류됩니다. 이러한 경우 경고 메시지가 출력됩니다.

커널 구성 명령 중 하나를 한 번 호출할 때 여러 구성 변경이 요청되고 그 중 하나에서 다시 부팅이 필요하면 모든 요청된 변경은 시스템을 다시 부팅할 때까지 보류됩니다. 특히, 저장된 커널 구성이 kconfig -l(load)을 사용하여 로드되고 이 구성이 다시 부팅하지 않고 사용될 수 없는 경우, 실행 중인 시스템의 상태는 변경되지 않고 지정된 커널 구성은 다음 부팅 시에 사용됩니다.

다음에 부팅할 때까지 보류된 변경 목록을 kcmodule, kctune 또는 kconfig 명령에서 -D(Differences) 옵션을 사용하여 표시할 수 있습니다. 각 명령에 대한 자세한 내용은 다음 절을 참조하십시오.

다음에 부팅할 때까지 보류된 변경은 현재 실행 중인 구성이 kconfig -i(import), kconfig -l(load) 또는 kconfig -n(next boot)을 사용하여 교체되거나, kconfig -H(unHold)를 사용하여 명시적으로 취소되거나, 보류된 변경에 우선하는 변경이 이후에 발생하는 경우 취소됩니다. 다음을 실행하는 경우를 예로 들 수 있습니다.

# kctune -h nproc=5000  set to 5000, hold for next boot
# kctune nproc=6000     set to 6000, now

다음에 부팅할 때 nproc의 값은 6000이 됩니다. 5000으로의 변경은 취소됩니다. 이러한 상황에서는 경고가 출력됩니다.

현재 실행 중인 시스템에서 이루어진 변경은 시스템을 다시 부팅할 때 유지되며, 변경이 될 때까지 유효하게 남아 있습니다.


* kcmodule을 사용한 모듈 관리

 

kcmodule 명령은 현재 실행 중인 구성이나 저장된 구성에서 커널 모듈의 상태를 조회하고 변경하는 데 사용됩니다. HP-UX 커널은 각각 장치 드라이버, 커널 하위 시스템 또는 커널 코드의 다른 부분인 많은 모듈에서 빌드되었습니다. 일반적으로 커널에는 200-300개의 모듈이 있습니다.


* 모듈에 대한 정보 얻기(kcmodule)


옵션을 사용하지 않고 kcmodule을 실행하면 시스템에 있는 모듈, 해당 모듈의 현재 상태 및 다음 부팅 시의 상태를 보여 줍니다. 일반적인 시스템에서 많은 모듈이 정적 상태에 있고, 대부분이 시스템에 없는 하드웨어의 장치 드라이버인 일부 모듈은 사용되지 않으며, 적은 모듈이 로드된 상태에 있습니다. 이러한 상태는 아래에서 설명합니다.


-c(configuration) 옵션을 사용하면 kcmodule은 현재 실행 중인 시스템 대신 저장된 구성에서 모듈 정보를 표시합니다.


kcmodule의 출력은 몇 가지 옵션에 따라 달라질 수 있습니다. 나열되는 모듈을 제어하려면 -a(all), -D(Differences) 및/또는 -S(Set) 옵션을 사용합니다. -a 옵션은 필수 모듈(일반적으로 출력에서 생략됨)을 출력에 추가합니다. -D 옵션은 다음 부팅 시의 상태가 현재 상태와 다른 모듈만 출력에 표시합니다. -S 옵션은 상태가 명시적으로 설정된 모듈만 출력에 표시합니다(즉, 필수 모듈, 사용되지 않는 모듈 및 종속성을 만족시키기 위해 추가된 모듈 생략). 명령줄에 모듈 이름을 나열하여 출력을 제한할 수도 있습니다.


출력 형식을 제어하려면 -d(description), -v(verbose) 또는 -P(Parse) 옵션을 사용합니다. 이러한 옵션을 사용하지 않으면 출력은 다음과 같이 표시됩니다.

Module  State   Cause
fcms    static  depend
krs     static  required

-d 옵션은 각 모듈에 대한 설명을 추가합니다.

Module  State   Cause         Description
fcms    static  depend        Fibre Channel Mass Storage Driver
krs     static  required      Kernel Registry Service

-v 옵션은 각 모듈에 대한 자세한 정보를 몇 줄에 걸쳐 표시합니다.

Name                fcms  [3E4741A9]
Description         Fibre Channel Mass Storage Driver
State               static (to resolve dependencies)
Capable             unused static
Depends On          module libfcms
                    interface HPUX_11_23 1.0.0

Name                krs  [3E47419F]
Description         Kernel Registry Service
State               static (required)
Capable             static
Depends On          module libkrs
                    module libkrs_pdk
                    interface HPUX_11_23 1.0.0

스크립트나 프로그램에서 사용하도록 고안된 -P 옵션은 출력되는 정보를 완전히 제어할 수 있도록 합니다.

# kcmodule -P name,desc fcms krs
name    fcms
desc    Fibre Channel Mass Storage Drivername    krs
desc    Kernel Registry Service

-P(Parse) 옵션의 의미와 스크립트 및 프로그램에 의해 사용되는 방식에 대한 자세한 내용은 “명령 출력의 구문 분석” 또는 kconfig(5) 맨페이지를 참조하십시오.



* 모듈 정보의 해석


위의 예제 출력을 보면 모듈마다 이름과 텍스트 설명이 있는 것을 알 수 있습니다. 각 모듈에는 모듈의 나이에 따라 일반적으로 [3E36E5FA]나 0.1.0처럼 표시되는 버전도 있습니다. 이전 모듈은 첫 번째 형태를 사용하고 최신 모듈은 두 번째 형태를 사용합니다.

커널 구성은 주어진 모듈의 한 버전만 사용할 수 있습니다. 그러나 현재 실행 중인 시스템이 다음 부팅 시에 사용될 모듈의 버전과 다른 버전을 사용하는 경우 여러 버전이 나열될 수 있습니다. 버전 번호는 일반적으로 간략한 목록에서는 생략되지만 모듈의 버전이 둘 이상인 경우에는 포함됩니다.

현재 실행 중인 구성의 각 커널 모듈에는 모듈이 사용되는 방식을 설명하는 상태가 있습니다. 가능한 상태는 다음과 같습니다.

unused 모듈이 시스템에 설치되었지만 사용되지 않습니다.
static 모듈이 커널 실행 파일에 정적으로 바인딩되어 있습니다. 이것은 가장 일반적인 상태입니다. 모듈을 이 상태로 만들거나 이 상태에서 벗어나게 하려면 커널 실행 파일에 다시 연결하고 다시 부팅해야 합니다.
loaded 모듈이 커널에 동적으로 로드되었습니다. 최신 모듈은 이 상태를 지원합니다. 이러한 모듈은 다시 부팅하지 않고도 커널 구성에 추가되거나 커널 구성에서 제거될 수 있습니다.
auto 모듈이 처음에 필요할 때 커널에 동적으로 로드되지만 아직은 필요하지 않습니다.

 

kcmodule이 현재 실행 중인 시스템에 대한 정보를 표시하는 중에 다음에 부팅할 때까지 보류된 구성 변경이 있으면 kcmodule은 현재 상태와 다음 부팅 시의 상태를 모두 나열합니다. 다음에 부팅할 때 다음의 보충적 의미를 가진 동일한 상태가 사용됩니다.


unused 모듈이 사용되지 않습니다.
static 모듈이 커널 실행 파일에 정적으로 바인딩됩니다.
loaded 모듈이 부팅 과정 중 커널에 동적으로 로드됩니다.
auto 모듈이 각 부팅 후 처음으로 필요할 때 커널에 동적으로 로드됩니다.
 

kcmodule이 저장된 구성에 대한 정보를 표시하고 있을 때 동일한 상태가 사용됩니다.

각 모듈 상태 옆에 있는 “이유”는 모듈이 해당 상태에 있는(또는 있게 될) 이유를 나타냅니다. 다음과 같은 이유가 있습니다.


explicit 시스템 관리자가 명시적으로 상태를 선택했습니다.
best 시스템 관리자가 모듈을 사용하기로 선택했지만 특정 상태를 선택하지 않았으므로 모듈은 모듈 개발자가 결정한 “최상의(best)” 상태에 있습니다.
auto 모듈이 자동 상태였으며 모듈을 사용하려고 할 때 자동으로 로드되었습니다.
required 모듈이 개발자에 의해 필수로 표시되었습니다.
depend 구성에 있는 다른 모듈이 해당 모듈에 의존하기 때문에 해당 모듈이 사용 중입니다.
 

여러 모듈이 각기 다른 상태를 지원할 수 있습니다. 거의 모든 모듈이 static 상태일 수 있으며, 몇몇 모듈만 loaded 또는 auto 상태를 지원합니다. 많은 모듈이 unused 상태일 수 있지만 required 모듈은 이 상태일 수 없습니다. 출력의 “지원 상태(Capable)” 줄은 모듈이 지원하는 상태를 보여 줍니다. 모듈이 필수인지 알아보려면 “지원 상태” 줄에 unused가 표시되어 있는지 확인하십시오. 표시되어 있으면 모듈은 필수가 아닙니다.


일반적으로 모듈 사이에는 종속 관계가 있습니다. 예를 들면, 장치 드라이버는 드라이버 지원 모듈이 구성되어 있지 않으면 커널에 구성될 수 없는 것이 일반적입니다. 이러한 종속성은 출력의 “종속 주체” 줄에 표시됩니다. 모듈은 이름과 버전으로 지정된 특정한 다른 모듈에 종속될 수 있습니다. 모듈은 다른 모듈이 제공해야 하는 인터페이스에 종속될 수도 있으며, 이때 해당 인터페이스를 제공하는 모듈을 특정하게 지칭하지 않을 수 있습니다. 이러한 인터페이스를 제공하는 모듈은 출력에 “내보내기” 줄이 표시되며, 이 줄에는 모듈이 내보내는 인터페이스가 나열됩니다.



* 모듈 상태의 수동 변경

 

모듈의 상태를 변경하려면 kcmodule 명령줄에 모듈 상태 할당을 입력합니다 (“시스템 파일을 통한 구성 관리”도 참조). 예를 들면, cdfs라는 CD 파일 시스템 모듈을 로드하는 경우 다음과 같습니다.

# kcmodule cdfs=loaded

사실, loaded는 개발자가 선택한 cdfsbest 상태입니다. 따라서 이것은 다음과 동일합니다.

# kcmodule cdfs=best

모듈을 언로드하려면 다음과 같이 합니다.

# kcmodule cdfs=unused


자세한 내용은 kcmodule(1M) 맨페이지를 참조하십시오.


위의 예제에서와 같이 명령을 사용하여 모듈을 변경하면, 가능한 경우 현재 실행 중인 시스템에 즉시 변경이 이루어집니다. 즉시 변경이 가능하지 않을 수도 있습니다. 예를 들면, CD 파일 시스템이 마운트되어 있어서 cdfs가 언로드될 수 없을 수도 있습니다. 이러한 경우 kcmodule은 변경을 보류하고 다음 부팅 시에 변경을 적용합니다. 모듈을 static 상태로 만들거나 이 상태에서 벗어나게 하는 변경은 즉시 적용될 수 없으며 항상 다음에 부팅할 때까지 보류됩니다. 다음에 부팅할 때까지 보류되어야 하는 변경이 kcmodule 명령줄에 하나라도 있으면 모든 변경이 보류됩니다.

모듈을 static 상태로 만들거나 이 상태에서 벗어나게 할 때 kcmodule 명령은 꽤 오랫동안 실행됩니다. 그 이유는 이러한 변경을 할 때 커널 실행 파일이 다시 연결되어야 하기 때문입니다. 여러 변경을 함께 적용하려면 모든 변경을 같은 kcmodule 명령줄에 나열하거나 시스템 파일에 모든 변경을 하고 시스템 파일을 가져오는 것이 좋습니다 (“시스템 파일을 통한 구성 관리”를 참조). 두 방법 모두 커널 실행 파일이 한 번만 다시 연결되도록 해야 합니다.

즉시 변경을 적용하지 않고 다음에 부팅할 때까지 변경을 보류하려고 할 수도 있습니다. 이러한 경우에는 kcmodule에서 -h(hold) 옵션을 사용할 수 있습니다. HP는 다음에 곧 부팅할 것으로 예상되는 경우에만 이 옵션을 사용하도록 권장합니다. 변경 후 몇 개월 동안 다시 부팅하지 않으면 해당 요청을 잊어버린 관리자는 보류된 변경 사항을 문제로 여길 수도 있습니다.

-c(configuration) 옵션을 사용하여 저장된 커널 구성을 변경할 수 있습니다. 변경 내용은 저장된 구성에 즉시 적용되지만 이 구성이 로드되거나 부팅될 때까지 실행 중인 시스템에는 영향을 주지 않습니다. 자세한 내용은 “kconfig를 통한 저장된 구성 관리”를 참조하십시오.

모듈 상태를 변경할 때 kcmodule은 백업 동작을 지정하는 -B-K 옵션을 지원하고 로그 파일 설명을 지정하는 -C 옵션을 지원합니다. 자세한 내용은 “오류에서 복구하기”“커널 구성 로그 파일”을 참조하십시오.

태그