관리 메뉴

드럼치는 프로그래머

[Linux] 리눅스 Booting 및 init 와 shutdown 본문

★─Programing/☆─Linux

[Linux] 리눅스 Booting 및 init 와 shutdown

드럼치는한동이 2007. 8. 6. 17:32
제가 아는바로 설명을 드릴 수도 있으나 Linux의 시스템의 시동과 종료과정에 대해서는
워낙 잘 설명된 곳이 있어 아래에 퍼왔습니다. 아래를 찬찬히 훑어보세요.
 
리눅스 시스템 처음으로 시작하기
리눅스 설치를 마치고, CD를 꺼내고 나면, 시스템이 다시 시작 됩니다.
LILO boot :
여러분이 리눅스 설치 중 Default로 선택된 값을 변경 하지 않고 기본적인 설치를 하였다면, 위와 같은 프롬프트 비슷한 것이 나타납니다.

만일, 여러분이 MS 윈도우가 설치된 상태에서 리눅스를 설치 하셨다면, Tab 키를 누르면 부팅 가능한 OS의 Label들(linux  window98 ... )이 나타날 것입니다. 그 중 리눅스 설치시 리눅스를 위한 Label로 선택했던 이름을 입력하시면 됩니다. (Default는 'linux' 입니다.)

레드햇과 마찬가지로 최근 버전인 6.2 up이상을 설치하셨다면, 그래픽 환경의 LILO가 뜨게 됩니다. 그러면, 화살표 키로 가볍게 Linux Label에 해당하는 것을 선택하시고 엔터!
하지만, 선택하지 않아도, LILO는 기본적으로 LINUX를 Loading하게 됩니다.

LILO(LInux LOader)는 주로 MBR(Master Boot Record)에 설치되어, 여러개의 커널로 부팅이 가능한 경우, 커널들이 어디어디에 위치하고 있는지에 관한 정보들을 파악하고 있다가, 사용자로 하여금 사용할 운영체제를 선택하도록 하고, 선택된 운영체제에 맞는 커널을 읽어들이는 역할을 하는 것입니다.

화면에 메시지를 가득 채우면서, 약간의 시간이 경과한 후, 와우리눅스6.2 up의 경우 다음과 같은 화면이 나타납니다.
WOW Linux release 6.2 (Puberty)
Kernel 2.2.16-3kr2 on an i686
hostname login: _
login 에  'root' 라 입력하고,
passwd : 에는 인스톨 할 때 입력했던 패스워드를 입력합니다.
이제, 명령어를 입력하면 반응을 보이게 되는, 준비된 쉘 프롬프트 상태가 되었을 것입니다.
잘 되는지 'ls' 명령을 한 번 입력해 보세요. 파일 이름 같은 리스트가 주루룩 뜬다면 성공입니다.
 
시스템이 시작되는 과정
'리눅스가 시작되면서 화면 가득히 뜨는 메시지들은 도대체 어디서 내보내는 것일까, 무슨 일이 일어나는 것일까.... ???' 라는 궁금증이 생기신 분들도 계실 것입니다.

다음은 로그인 프롬프트를 보여주기 전까지 어떤 작업들이 수행되는지에 관한 절차를 나타낸 것입니다. 물론, 지금 완전한 이해를 해야하는 것은 아닙니다. 이러한 절차를 알고 있다면, 시스템이 시작될 때 어떠한 작업을 추가하거나 삭제하는 것이 가능해집니다. 이곳에 언급된 파일들을 직접 열어 구경해보면, 좀 더 도움이 될 것입니다. 파일들에 관한 설명을 보고 싶으신 분들은 다음의 KLDP문서(리눅스 부트 프로세스)를 참고하세요.
앞부분(커널 압축 해제 이전 부분까지)은 일반적인 운영체제의 로딩 과정 을 설명한 것입니다.
 
 ↓
BIOS가 시스템 이상 여부 테스트
Booting 할 Drive 선택
선택된 드라이브의 Master Boot Sector 읽어들임
MBR이 파티션 테이블을 읽어  Booting 할 파티션을 알아냄
Booting 파티션의 Boot Sector에 가지고 있는 프로그램이
해당 운영체제를 읽어들임
Kernel 압축 해제
장착된 Hardware 검사, 장치 드라이버 설정
Kernel 이 '/(root 파일시스템)'를 read-only로 mount
FileSystem 검사
'/(root 파일시스템)'를 read/write로 다시 mount
'/sbin/init' 실행

- Kernel이 최초로 실행하는 Program으로, PID가 '1'
/etc/inittab에서 init 실행을 위한 설정 내용 확인
/etc/rc.d/rc.sysinit 실행

- Hostname, Swapping, 시스템 점검, 커널 모듈 로딩
/etc/rc.d/rc 실행 : inittab에 정의된 Default Runlevel을 실행

- 실행될 runlevel의 디렉토리 존재 여부를 확인
- 실행시킬 프로세스 중 이미 실행중인 것을 종료시킴
- /etc/rc.d/rc[0-6].d 내의 'S'로 시작하는 스크립트를 실행
/etc/rc.d/rc.local  : 매번 실행할 내용을 넣어둔다.
/etc/rc.d/rc.serial : 시리얼 포트를 초기화한다.
login (getty) / X-Window (xfm)
 
 
/etc/rc.d/rc[0-6].d에서 [0-6]은 실행할 실행레벨로, 다음과 같은 종류가 있습니다.
0
시스템 종료 halt
1
단일 사용자가 사용하는데 적합하도록, 시스템이 최소화된 상태로 부팅하기 원할 경우 사용
2
다중 사용자 모드. 단 NFS를 지원하지 않음.
3
다중 사용자 모드로, 완전한 Networking을 가능하게 한다.
4
사용되지 않음. 사용자 정의 레벨로 사용될 수 있다.
5
X Window 로 부팅 되도록 할 때 사용
6
Reboot
실행레벨은 시스템의 사용 용도나 형편에 따라, 수행되어야 할 서비스들을 묶어 놓은 그룹 정도로 해석할 수 있습니다. 관리자만이 시스템에 접근해야 할 필요가 있을 경우에는 실행레벨 1로, X window 로 로그인 하려면 실행레벨 5로 정해주면, 알아서 그룹으로 묶여 있는 서비스들이 시작되거나, 종료되는 것입니다.
해당 디렉토리를 검색해 보면 알 수 있겠지만, 각 실행레벨(runlevel)은 각기 실행할 스크립트들을 각각의 디렉토리에 링크파일로 가지고 있어, init에 의해 해당 스크립트를 실행시키도록 합니다.
앞서 말했듯이 사용자의 편의대로 실행레벨을 별경할 수 있으며, 아래 파일을 수정함으로써 가능합니다.

3 부분을 원하는 실행레벨로 바꾸면 됩니다.
#vi /etc/inittab
...
id:3:initdefault:
...
당연한 이야기겠지만, 위의 실행레벨로 미루어 볼 때, 3 혹은 5가 올 것입니다.
그외, 사용자가 정의 한 특정 실행레벨로 실행 시키고 싶을 때는 실행레벨 4가 올 수도 있을 것입니다.
그러나, 0 혹은 6같은 실행레벨을 준다면, 부팅 즉시 종료 혹은 리부팅을 시키는 것이 됩니다.
 
부팅시, 실행 할 프로그램 추가하기
위의 절차 중에서 /etc/rc.d/rc 스크립트의 실행내용을 보면, /etc/inittab 파일 중 'id'부분에 정의된 실행레벨에서 실행될 스크립트들을 실행시키는 일을 합니다.

실행시킬 스크립트들은 /etc/rc.d/rc[0-6].d 디렉토리에 들어 있는데, 이 파일들은 알고 보면, /etc/rc.d/init.d 디렉토리에 실제적인 실행 스크립트들이 들어 있습니다. 그래서, 추가적으로 실행될 스크립트를 추가하려면, /etc/rc.d/init.d 에 스크립트를 추가하고, 실행되기 원하는 레벨의 디렉토리에서 링크를 만들어 주는 것입니다.

위 보기의 경우, 실행 레벨이 '3'이고, /etc/rc.d/rc3.d 디렉토리에 실행될 스크립트를 가리키는 링크들이 들어 있습니다.

그 링크 이름의 구성을 보면,
앞쪽의 Character가 두가지인 것을 알 수 있습니다.

        'K'  Stop
        'S'  Start

를 의미하는 것으로, 'K15httpd'는

        /etc/rc.d/init.d/httpd  stop

으로 실행되고, 'S85httpd'는

        /etc/rc.d/init.d/httpd  start

로 실행되는 것입니다.
뒤의 숫자는 실행 순서를 나타내는 것으로 번호가 앞서는 것이 먼저 실행됩니다.

이렇게 실행레벨 별로 따로 실행시킬 필요가 없는 경우에는
 /etc/rc.d/rc.local
에 실행시킬 스크립드의 내용을 넣어 두면, 해당 실행레벨의 스크립트들이 실행되고, 마지막으로 항상 스크립트가 실행됩니다.
 
시작 프로세스 관리
부팅시 자동으로 실행되어야 할 서비스들은 사용자의 필요에 따라 실행 여부를 조정할 수 있습니다. 리눅스에서는 다음과 같은 방법들을 사용하여, 쉽게 서비스를 조정할 수 있습니다. 이것은 위에서 살펴 본 디렉토리의 내용들을 보다 쉽게 관리할 수 있도록 한 것입니다.
linuxconf
linuxconf는 서비스 설정 뿐만이 아니라, 시스템에 관한 대부분의 것들을 모두 설정할 수 있습니다. 그 중, 제어->제어판->서비스 활동 제어 메뉴를 선택하여, 아래와 같은 메뉴에서 설정을 변경할 수 있습니다.
 

ntsysv


X window를 사용하지 않는 사용자들이 주로 사용하는 툴로, 아래와 같이 '*' 선택된 부분이 부팅시 실행되는 서비스입니다. 기본적으로는 현재 실행 중인 레벨의 서비스를 조정하지만, 실행시 다른 레벨을 지정해 주면, 다른 레벨의 실행 서비스도 조정할 수 있습니다.
 

chkconfig
아래와 같이 모든 실행 레벨의 상태를 텍스트로 보여줍니다. 명령행에서 옵션을 사용해 추가하거나, 삭제할 수 있습니다.  
 
 
부팅 과정의 Log 확인하기
시스템에 따라 속도 차이는 있겠지만, 부팅 되는 과정이 모니터에 쭈루룩 표시되고 나면, 그 내용을 보고 싶어도 제대로 볼 수가 없습니다.
다음과 같이, 부팅에 관한 Log를 확인할 수 있습니다.
# dmesg

혹은

# cat /var/log/messages
혹은, 간단하게, Shift + Pg Up / Pg Dn 버튼을 이용하여, 볼 수도 있습니다.
 
시스템 종료하기
이제 그만 리눅스를 종료하고, 컴퓨터를 꺼야겠다. 그러나,
이것도 익숙치 않으면, 고민스러운 일입니다.
몇가지 시스템 종료 방법을 소개합니다.
X window 모드로 부팅한 경우
runlevel 5로 부팅한 경우, X window로 Start하게 됩니다.
이런 경우, 좌측의 발바닥을 누르고, --> 로그아웃 --> 시스템 종료를 선택합니다.
 
 
init
위에서 언급했던 'init '를 이용하여 시스템을 종료하거나, 리부팅하는 것이 가능합니다.
# init  0  (시스템 종료)
# init  6  (시스템 리부팅)
그러나, 이 방법은  여러명의 사용자가 시스템에 연결되어 있는 경우, 좋지 않은 방법입니다.
shutdown
이런 경우, 사용자들에게 미리 대처할 수 있도록 시간여유와 시스템 종료에 관한 메시지를 내보내는 'shutdown'명령을 사용하는 것이 좋습니다.
# shutdown -h now  : 지금 당장 시스템 종료
# shutdown -r  +t5   : 5초 후 리부팅
# shutdown +10 : 10분 후 셧다운
# shutdown -c   : shutdown 예약 취소
halt
halt명령은 아직 정해지지 않은 디스크의 운영 상태를 완성시키고, /var/log/wtmp에 login 과 logout에 관한 내용을 저장하고, 커널에게 reboot 할 것인지, poweroff 할 것인지를 알려, 시스템을 안전하게 종료하도록 합니다.
shutdown -h now 와 같은 명령입니다.
Ctrl + Alt + Del 키로 시스템 종료 및 리부팅
/etc/inittab 파일안의
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
항목에 위와 같이 설정하면, Ctrl + Alt + Del로 리부팅 시킬 수 있습니다.
init 명령으로 실행레벨을 바꾸거나, 종료할 경우, 다중 사용자 모드라면, 현재 사용중인 사용자들이 아무런 대책없이 종료 당하게 되므로, shutdown 명령을 사용하여 사용자들로 하여금 미리 대비할 여유를 주는 것이 좋습니다.
다음 파일 안에 shutdown 시킬 권한이 있는 사용자들을 정의할 수도 있습니다.
shutdown 명령을 -a 옵션과 함께 사용하며, /etc/inittab 파일 안에 정의해 두어야 합니다.
ca::ctrlaltdel:/sbin/shutdown -a  -t3 -r now
-a 옵션에 의해서, 어떤 사용자가 콘솔로 로그인 하여 Ctrl + Alt + Del 키를 입력하면, 다음 파일을 검사합니다.
/etc/shutdown.allow
이 파일에는 셧다운이 가능한 사용자들의 id가 들어 있어, 이중 하나의 사용자 혹은 root사용자가 아니라면, 다음과 같은 메시지와 함께 shutdown은 더 이상 진행되지 않습니다.
shutdown: no authorized users logged in
이렇게 함으로써, 어떤 사용자가 시스템에 물리적으로 접근하여, Ctrl + Alt + Del 키를 눌러 시스템을 실수로, 혹은 고의적으로 잽싸게 종료시키는 것을 방지할 수가 있습니다.
원본 : 리눅스 Booting 및 init 과 shutdown

'★─Programing > ☆─Linux' 카테고리의 다른 글

[Linux] 파일시스템의 종류  (0) 2007.08.06
[Linux] 손쉬운 리눅스 관리  (0) 2007.08.06
[Linux] cron 사용법  (0) 2007.08.06
[Linux] 데몬이란?  (0) 2007.08.06
[Linux] 리눅스 편리한 단축키들  (0) 2007.08.06
Comments