AIX 운영체제는 IBM이 특별히 만든 유닉스 변종이다. IBM은 1986년 AIX 버전 1.0을 출시했고, 지난 22년 동안 여러 차례 개선했으며(이 글을 쓰는 시점에서 최신 버전은 AIX 6.1이다), 튼튼한 유닉스 시스템으로 자라났다.
AIX와 RS/6000 용어를 섞어 쓰는 경우도 있지만, 같은 개념이 아니다. AIX는 유닉스 운영체제이며, IBM RS/6000®은 RISC(Reduced Instruction Set Computer) 서버 하드웨어로 여기서 AIX가 돌아간다. IBM은 초기에 IBM 6150 RT 워크스테이션에서 AIX를 선보였다. 세월이 흐르면서 AIX는 IBM PS/2 인텔(Intel®) 386 컴퓨터, IBM 메인 프레임, POWER 아키텍처에서 동작하도록 발전해나갔다. 지금 AIX는 IBM System p™ 시리즈(과거 RS/6000)와 System i™ 시리즈(과거 IBM iSeries®와 AS/400®) 컴퓨터에서 동작한다.
AIX 운영체제를 부팅하는 방법은 일반 부트, 단독 부트, 네트워크 부트라는 세 가지 유형이 있다.
전형적인 AIX 부트 방법은 일반 부트 옵션이다. 일반 부트 옵션은 AIX를 지역 디스크에서 서버로 부트한다. 부트가 끝나면 운영체제는 다중 사용자 모드로 동작한다.
AIX 시스템에서 다음 부트 유형은 단독 부트이며, 유지 보수 모드 옵션으로 부른다. 단독 부트 옵션은 일반 부트 옵션과 비슷하지만, 다중 사용자 모드로 시작하는 대신에 시스템은 단독 사용자 유지보수 모드로 시작한다. AIX 시스템에서 여러 가지 방법으로 단독 부트가 가능하다. 이동식 매체(테이프나 CD)를 통해 서버를 부팅하거나, 초기 하드웨어 주변 장치 점검 과정에서 키보드가 초기화된 다음에 F5(하드웨어에 따라 F6이 될지도 모른다)를 누르거나, 아니면 (파일 시스템 손상과 같이) 문제가 발생해 일반 부트로 들어가기 앞서 시스템 복구가 필요한 경우가 대표적이다. 단독 부트는 소프트웨어 설치, 문제 해결, 진단 수행, 다른 사용자가 없는 상황에서 자원을 잠궈버릴 위험을 줄인 상태에서 하드웨어 설정과 같은 작업을 허용한다.
마지막 부트 유형은 네트워크 부트 옵션이다. 물론 일반 부트 옵션과 비슷하며, AIX 시스템은 다중 사용자 모드로 부트한다. 하지만 이 옵션을 사용하면, AIX는 부트 정보를 네트워크에 존재하는 다른 서버에서 받는다.
다양한 매체로 AIX를 부트할 수 있기 때문에, 다양한 유형을 관리할 방법이 있어야 한다. 여기서 부트 목록이 이런 문제를 해결한다. 부트 목록은 시스템이 제공하는 각 부트 방법에 대한 모든 부트 디바이스 목록을 관리한다.
특정 부트 방법에 대한 부트 목록을 보려면 간단하게 스위치 -o를 붙인다. 다음 예제에서 일반 부트 방법을 표시한다. 서버가 부트를 시도할 순서는 첫 번째 지역 논리 디스크(hdisk0), 그 다음으로 CD(cd0), 마지막으로 테이프(rmt0) 순이다.
# bootlist -m normal -o
hdisk0
cd0
rmt0
|
특정 부트 방법에 대한 부트 목록을 설정하려면 -m 스위치를 입력하고 적절한 부트 방법 다음에 원하는 부트 디바이스를 지정한다. 다음에 제시하는 예는 일반 부트 목록을 hdisk0, cd0, cd1 순서로 서버가 부트하도록 변경한다.
bootlist -m normal hdisk0 cd0 cd1
|
직전 예제에서 살펴본 바와 같이, -m 스위치는 부트 방법을 변경하거나 출력할 때 확인을 위해 매번 사용했다. 이 옵션은 normal, service(단독 사용자 유지보수 모드), both(normal과 service), prevboot(직전 부트 목록)으로 변경을 허용한다.
부트 방법을 선택했다면, 서버 전원이 들어온 다음에 일어나는 실제 사건 순서를 살펴볼 시간이 왔다.
참고: 이 기사 나머지 부분에서, 서버를 일반 부트 모드로 부트했다고 가정한다.
전원을 켜서 서버가 시작할 때, 문제점이 없는지 서버 하드웨어를 검사하고 가능한 문제점이 없는지 점검한다. 이 단계를 POST(Power-On Self-Test)라고 부른다. 서버가 이 단계를 밟고 있을 때 POST는 메모리, 키보드, 사운드 카드, 네트워크 디바이스를 점검한다. 이 시점에서 단독 모드(단독 사용자 유지보수)로 들어가고 싶다면, 키보드 초기화 이후에 F5나 F6을 누른다. 하지만 이 기사에서는 어떤 키도 누르지 않기에 서버는 정상 부트 모드로 부트가 이뤄진다.
POST 과정을 마친 다음에, 좀 더 큰 프로그램을 적재하기 위해 사용되는 작은 프로그램인 부트 스트랩을 메모리에 올린다. 그러고 나서 부트 스트랩은 부트 논리 볼륨(BLV, Boot Logical Volume)을 메모리에 올린다. BLV를 메모리에 올린 다음에 커널은 부트 과정을 넘겨 받는다.
BLV는 AIX에서 부트 가능한 이미지를 포함하는 위치다. 일반적으로 BLV는 서버의 지역 디스크에서 발견된다. BLV는 AIX 커널, rc.boot 파일, 부트 과정에 필요한 명령어, ODM(Object Data Manager)을 축약한 버전을 포함한다.
부트 가능한 이미지를 만들기 위해 bosboot 명령어를 사용한다. bosboot를 사용해 램 디스크, 파일 시스템, 커널에서 부트 파일(즉, 부팅 가능한 이미지)을 만든다. 부팅 가능한 이미지는 서버의 부트 ROS(Read-Only Storage)/EPROM(Erasable Programmable Read-Only Memory)과 인터페이스하도록 만들어진다.
다음 예제는 시스템을 부트할 지역 고정 디스크에 있는 기본 BLV에서 부팅 가능한 이미지를 생성하는 방법을 보여준다.
bosboot -a
|
BLV에 저장된 AIX 커널은 /(루트), /usr, /var 파일 시스템을 램에 생성한다. 커널과 함께 이 파일 시스템은 운영체제 부트 절차 도중에 램에 처음으로 저장된다. 파일 시스템이 램에 있기 때문에 BLV 외부에 있는 어떤 파일 시스템에도 접근하지 못한다.
파일 시스템이 RAM에 올라온 다음에, 커널은 부트 절차를 넘겨 받을 init 프로세스를 수행한다.
AIX 커널은 프로세스 init을 프로세스 식별자(PID) 1로 메모리에 올린다. 이 프로세스는 AIX에서 동작하는 다른 모든 프로세스의 어버이나 루트 프로세스다. init 프로세스가 메모리에 올라와서 부트 과정을 시작하면 init은 rc.boot를 호출한다.
rc.boot 파일은 AIX 부트 과정에서 세 가지 중요한 수행 절차를 포함한다. rc.boot에서 첫 번째 수행 절차는 운영체제 부트를 준비하기 위해 시스템 하드웨어를 초기화한다. 시스템을 시작하기 위해 꼭 필요한 몇몇 디바이스를 이 시점에서 환경 설정 관리 명령어인 cfgmgr로 설정한다.
rc.boot에서 두 번째 수행 절차는 파일 시스템 /, /usr/, /var와 페이징 영역 마운트다. 이 파일 시스템을 마운트하고 나면, init은 디스크에 존재하는 init으로 대체되며(PID는 1), 램 내용은 지워진다.
rc.boot에서 세 번째이자 마지막 수행 절차는 실제 init 프로세스를 디스크에서 수행한다. init을 수행할 때, /etc/inittab을 읽어 각 항목을 수행한다. 이 과정에서, /tmp 파일 시스템은 이제 디스크로 마운트된다. 시스템이 부트 과정에서 마지막 구간을 통과하면, rc.boot에서 첫 번째 수행 절차에서 설정하지 않은 남은 디바이스에 대해 cfgmgr 명령어를 다시 한번 실행한다.
init 프로세스를 수행한 다음 단계로 init이 /etc/inittab을 열고 각 항목을 읽어들인다. /etc/inittab 파일의 목적은 시작 시점에서 일반적인 작업을 시작하는 프로세스 목록을 init 프로세스에 전달하는 데 있다.
/etc/inittab 파일 형식은 아주 구체적이며, 각 필드는 콜론으로 나뉜다. /etc/inittab 형식은 다음과 같다.
<ID>:<Run Level>:<Action>:<Command> |
/etc/inittab 파일에 정의된 필드 설명은 다음과 같다.
- ID: 객체를 인식하는 유일한 문자열
- Run Level: 시스템이 해당
init단계에 들어갈 때 <Command>를 수행한다. 예를 들어, /etc/inittab에 있는 항목이 실행 단계 2로 설정되어 있다면, 운영체제가init단계 2로 들어가면 해당 명령이 수행될 것이다.init이나 실행 단계는 AIX와 여타 유닉스/리눅스 기반 시스템마다 제각각이다. 다음 실행 단계는 AIX용으로 정의된 내용이다.- 향후 운영체제 확장을 대비한 예약
- 2: 기본 실행 단계
- 3에서 9: 사용자 정의
-
a에서 c: 새로운 실행 단계(
init이 실행 단계 a, b, c에서 수행될 때, 프로세스는 kill 신호를 받지 않는다. 직전 실행 단계에서 동작 중인 프로세스를 건드리지 않고, 새로운 실행 단계에 할당된 프로세스를 수행한다.) -
Q, q: /etc/inittab 파일을 다시 검색하라고
init에게 지시하는 빠른 방법
- Action: 이 필드는 inittab 파일에 존재하는 각 항목에서 프로세스를 다루는 방법을
init프로세스에 알려준다. 다음은 AIX가 사용하는 필드 값이다.- respawn: 프로세스가 존재하지 않으면 프로세스를 시작한다. 종료까지 기다리지 않으며 계속해서 inittab 파일을 탐색한다. 프로세스가 끝나면 다시 시작한다.
- wait: 프로세스를 시작하고 종료를 기다린다.
- once: 프로세스를 시작하고 종료를 기다리지 않는다. 프로세스가 종료되면 다시 시작하지 않는다.
- boot: 시스템 부트 과정에서만 항목을 처리한다.
- bootwait: 서버가 단독 사용자에서 다중 사용자 모드로 넘어갈 때 처음으로 항목을 처리한다.
-
powerfail: 전원 실패 신호를
init이 받을 때만 명령을 수행한다. -
powerwait: 전원 실패 신호를
init이 받을 때만 명령을 수행하며, inittab 파일을 계속해서 탐색하기 앞서, 프로세스가 종료될 때까지 기다린다. - off: 프로세스가 현재 동작 중이라면 SIGTERM을 보내고 그 다음 20초 동안 SIGKILL을 보낸다.
- ondemand: respawn과 같지만, 실행 단계 a, b, c에만 적용된다.
-
initdefault:
init이 처음 수행될 때만 항목을 탐색한다. -
sysinit: 로그인에 앞서
init이 콘솔에 접근하기 전에 항목을 수행한다.
-
Command: /etc/inittab에서 마지막 필드다. <run level>이 시작될 때 <action>이 필요하다고 판단될 때 실제 명령을 수행한다. 명령 수행 준비가 끝나면, AIX는
sh -c exec <command>명령으로 프로세스를 포크(fork)한다.
다음 예제는 실행 단계 2를 시작하는 시점과 실행 단계 2가 매번 불릴 때마다 다시 시작되는 /usr/bin/rc.atc_bin이라는 셸 스크립트를 보여준다.
CORMANY_BIN:2:respawn:/usr/bin/rc.atc_bin |
동일한 스크립트를 실행 단계 0, 1, 3, 6, 9에서 비활성화하려면 다음 명령을 내린다.
CORMANY_BIN:245780:respawn:/usr/bin/rc.atc_bin |
AIX는 /etc/inittab 파일을 수동으로 변경하는 대신에 삶을 편하게 만들어줄 명령어를 제공한다. 명령어는 다른 AIX 명령어와 같은 이름 관례를 따른다.
-
mkitab: inittab 파일에 레코드를 추가한다.다음 예제는 실행 단계 2로 inittab에 /usr/bin/rc.atc_bin 스크립트를 추가한다.
mkitab "CORMANY_BIN:2:respawn:/usr/bin/rc.atc_bin"
-
chitab: inittab 파일에 있는 레코드를 변경한다. 구문은 inittab 파일에 있는 실제 레코드와 똑같다.다음 예제는 inittab에서 직전에 다룬 /usr/bin/rc.atc_bin 스크립트를 실행 단계 3으로 변경한다.
chitab "CORMANY_BIN:3:respawn:/usr/bin/rc.atc_bin"
-
lsitab: inittab 파일에 있는 레코드를 출력한다.lsitab을 사용하면 개별적으로나 전체적으로 inittab 레코드를 안전하게 살펴보는 방법을 제공한다.다음 예제는 inittab 파일에 있는 모든 레코드를 출력한다.
lsitab -a
다음 예제는 CORMANY_BIN으로 인식되는 레코드만 출력한다.
lsitab CORMANY_BIN
-
rmitab: inittab 파일에서 레코드를 제거한다.다음 예제는 inittab 파일에서 CORMANY_BIN으로 인식되는 레코드를 제거한다.
rmitab CORMANY_BIN
이제 inittab 파일을 읽었으며, 모든 적절한 프로세스를 수행했기에 시스템은 로그인을 기다린다. 로그인한 다음에 AIX 시스템을 즐기기 바란다.
서버에 있는 전원 스위치를 눌러 마법처럼 시동이 걸릴 때 별일 없어 보였을지도 모르겠다. 하지만 이 기사에서 살펴본 바와 같이, 시동 시점에서 AIX 시스템에는 많은 일이 일어난다. 다행히, 이 기사를 읽음으로써 튼튼한 운영체제 기초를 제공하기 위해 AIX가 수행하는 작업을 제대로 이해했을 것이다.
교육
- 유닉스를 능숙하게 사용하기: 이 연재물에서 다른 기사를 살펴보자.
- 위키백과에 나온 AIX 항목: AIX의 배경과 개발에 대한 좀 더 자세한 정보가 궁금하면 위키백과에서 제공하는 AIX 운영체제 항목을 읽어보자.
- inittab 파일 정보: inittab 파일에 대한 정보를 IBM 시스템 정보 센터에서 찾아보자.
- developerWorks의 AIX와 UNIX 영역: IBM® AIX® 시스템 관리와 유닉스 기술 향상을 위한 풍부한 정보를 제공한다.
- AIX와 UNIX 입문: 좀 더 많은 정보가 필요하면 방문하기 바란다.
- developerWorks 기술 행사와 웹 캐스트
- AIX 위키: AIX와 관련된 기술 정보를 위한 협력 공간을 방문하자.
- 포드캐스트: IBM 기술 전문가가 나누는 이야기를 들어보자.
제품 및 기술 얻기
- IBM 평가판 소프트웨어: developerWorks에서 직접 내려받아 다음번 개발 프로젝트에 활용하자.
토론
- AIX와 UNIX 포럼에 참여하자.
Adam Cormany는 National Data Center의 관리자로 현재 일하고 있다. Cormany는 유닉스 시스템 엔지니어, 유닉스 관리자, Scientific Games Corporation에서 운영 관리자를 맡아왔다. Cormany는 10년 넘게 솔라리스, 레드햇 리눅스 관리자는 물론이고 AIX도 광범위하게 다뤘다. Cormany는 pSeries AIX 시스템 관리 분야에서 IBM eServer® 공인 전문가다. 관리 업무 이외에, Cormany는 배시, csh, ksh을 사용한 셸 스크립트와 C, PHP, 펄 프로그래밍에도 광범위한 지식을 습득했다.