2.3. runlevel

그럼 이제, inittab 파일을 한줄한줄 분석해 보겠습니다. # 으로 시작하는 줄은 주석이라는거 다 알고 계실 겁니다. inittab 파일의 용도와 저자가 나오고, 각 런레벨(ren level) 에 대한 간략한 정의(?)가 나옵니다. [1]

# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)

렌레벨 0

시스템을 종료할 때 사용되는 런레벨입니다.

렌레벨 1

싱글 유저 모드에서 사용되는 레벨입니다. 여러분이 lilo: 프롬프트 에서 linux single 이라고 입력하면 런레벨 1 에서 리눅스가 시작하게 됩니다. [2] 이 때는 디폴트로 root 로 로그인되며, 대다수의 중요한 데몬들은 실행되지 않게 설정되어 있습니다.

렌레벨 2

NFS 를 지원하지 않는 다중 사용자 모드를 정의합니다. [3]

렌레벨 3

네트워킹을 지원하는 다중 사용자 모드입니다. (디폴트 런레벨로 주로 지정됩니다.)

렌레벨 4

여러분이 나름대로 정의해서 쓸 수 있는 런레벨입니다. 필요에 따라서 실행시키기 원하는 데몬이나 서비스를 /etc/rc.d/rc4.d 디렉토리 밑에 설정함으로써 여러분만의 특성을 갖는 고유의 런레벨을 정의할 수 있습니다.

렌레벨 5

X 를 실행시키기 위한 런레벨로 약속되어 있습니다.

렌레벨 6

시스템을 재부팅시키도록 정의된 런레벨입니다.

만약, inittab 파일의 처음에 나오는

id:3:initdefault:
의 라인을
id:6:initdefault:
혹은
id:0:initdefault:
등으로 지정해 버리면, 여러분의 리눅스 시스템은 부팅하자마자 종료되어 버리거나, 재시작을 거듭 반복하게 되어 버리므로 주의하시기 바랍니다. 그럴때에는 부팅시 lilo 에 옵션을 주어서 0이나 6 이외의 런레벨로 부팅해서 고쳐 주시면 됩니다.

잠깐! 런레벨이란 무엇인가... 하고 생각하시는 분들이 있을 겁니다. 아마, 여기까지 읽으셨다면, 대충 짐작은 하고 계시리라 생각합니다.

init 맨페이지의 정의 :

런레벨은 선택된 그룹의 프로세스만 시스템에서 실행되도록 허락 하기 위해 만든 소프트웨어 설정이다. [4]

시스템을 관리하다 보면, 시스템의 점검 혹은 디버깅을 위해서 보통때의 설정 과는 좀 다르게 몇가지 서비스를 시작하지 않고 부팅하고 싶은 경우가 있을 것입니다. 예를 들어서, 네트워크 지원 기능을 off 하고서 부팅하고 싶다든지, 다중 사용자 모드가 아니라 싱글 사용자 모드로 부팅하고 싶다든지 하는 경우가 생길 수 있습니다.

이처럼 서로 다른 설정으로 부팅하기 위해서 각각의 설정을 "런레벨" 이라는 이름으로 나누어 놓은 것입니다. 그리고, "런레벨" 에 대한 약속으로 0, 1, 2, 3, 5, 6 번 런레벨 [5] 은 미리 예약되어서 "시스템 종료, 재부팅, 싱글유저모드, 다중사용자 모드, 네트워크가 지원되지 않는 다중 사용자 모드 등으로 하자" 라고 약속을 해 둔 것입니다. (사실 예약된 런레벨은 0, 1, 6 밖에 없습니다. 하지만 나머지 2, 3, 5 번은 "관례상" 각각의 해당 용도로 사용하고 있는 것 같습니다. 런레벨 2, 3 은 SunOS 등 다른 System V 계열의 init 프로세스를 쓰는 운영체제에서도 리눅스와 동일하게 사용하고 있습니다.) 그 외에 7, 8, 9번 런레벨도 사용자가 정의해서 쓸 수 있지만, 관례상 그렇게 하지 않는다고 합니다. 그리고, S 와 s 런레벨도 특수한 런레벨로써 존재합니다.

만약 여러분이 시스템 종료시에 디폴트로 제공되는 일에 더해서 실행시키고 싶은 것이 있다면, 런레벨 0 에 추가를 하시면 되는 것입니다.

이렇게 각각의 런레벨에 원하는 작업을 추가하기 위해서는 /etc/rc.d/rcN.d [6] 디렉토리 아래의 심볼릭 링크들을 조정하시면 됩니다. 자세한 내용은 이 문서 4절에 적어 두었습니다.

주석

[1]

이처럼 런레벨을 정의하고, 런레벨 별로 디렉토리를 할당해서 init 를 실행시키는 방식의 init 를 system V 스타일의 init 라고 합니다. init 프로그램은 크게 BSD 스타일과 system V 스타일의 두종류가 있는데, 우리나라에서 사용하는 대부분의 리눅스 배포본 (실제 제가 써본 것은 레드햇 계열과 데비안밖에는 없습니다. ㅡ.ㅡ)에서는 system V 스타일의 init 를 사용합니다.

[2]

lilo 에 주는 명령은 lilo HOWTO 를 참조하세요.

[3]

데비안 배포본의 경우, 레벨 2 가 디폴트 런레벨(Full-multiuser mode)

[4]

A runlevel is a software configuration of the system which allows only a selected group of processes to exist.

[5]

레드햇의 경우

[6]

데비안의 경우 /etc/rcN.d 입니다.