리눅스 시스템 부팅과정
OS 시작 시 수행되는 script : /etc/inittab
부팅메세지(bootup messages) : /var/log/dmesg
내용이 무척 많기 때문에 방법이 필요
grep으로 원하는 문자열 검색 ($ grep 단어 /var/log/dmesg)
vi 모드에서 원하는 부분 검색
dmesg 명령어 사용 (dmesg | grep 단어)
Tip
시스템 부팅 메세지 중 하드디스크 정보만 확인하기 : dmesg | grep sda
SCSI 타입의 하드디스크 정보만 확인하기 : dmesg | grep SCSI
IDE타입의 하드디스크 정보만 확인하기 : dmesg | grep hda
시스템 부팅 메시지 중 NIC 정보만 확인하기 : dmesg | grep eth
USB 장치에 관한 부팅메시지만 확인하기 : dmesg | grep usb
시스템 부팅 메시지 중 커널 정보만 확인하기 : dmesg | grep Linux
메모리에 대한 상세한 정보 : /proc/meminfo
- 부팅과정에서 발생하는 장애는 거의 60% 이상이 커널 패닉(kernel panic)이나 부트로더 에러(GRUB Error) 중 하나이다.
부팅 1단계 : ROM-BIOS 실행
ROM-BIOS : 컴퓨터 메인보드에 장착된 컴퓨터 부팅 시 가장 먼저 실행되는 프로그램 (컴퓨터 하드웨어 인식과 각 장치들의 사용을 위한 인식 및 준비를 위한 가장 기초적인 프로그램)
ROM-BIOS 프로그램은 CMOS에 들어있다.
ROM-BIOS라는 단어는 ROM(Read Only Memory)이라는 하드웨어에 들어있는 BIOS(Basic Input Output System)라는 의미
BIOS : 컴퓨터에 전원이 들어오면 자동실행 되는 CMOS에 들어있는 프로그램 (전원이 들어오는 즉시 자동 실행)
전원이 들어오는 즉시 메모리의 특정 번지로 로드되어 적재된다.
CPU는 전원이 들어오면 즉시 메모리의 이 특정 주소에 있는 BIOS 명령들을 실행하도록 만들어져 있다.
ROM-BIOS는 ROM에 저장되어 있기 때문에 시스템 전원이 꺼지더라도 지워지지 않고 남아있다.
ROM-BIOS 프로그램 = CMOS 프로그램
ROM-BIOS 역할
POST 기능, 하드웨어의 각 장치들 인식 및 초기화
부트로더 로딩 기능
POST(Power On Self Test) : 자체 진단 기능
전원이 들어왔을 때 메인보드의 ROM-BIOS의 BIOS 프로그램들은 시스템에 장착된 하드웨어 장치들(CPU, RAM, DISK 등)을 하나씩 인식하기 시작한다. 인식하면서 이상유무를 체크한 후에 이사잉 없다면 각 장치가 사용될 수 있도록 모든 장치의 초기화를 수행한다. 에러가 발생할 경우 비프음으로 알린다.
부트로더
리눅스의 부트로더 종류는 LILO와 GRUB가 있는데 요즘 거의 대부분 GRUB
POST 단계에서 이미 현재 운영체제가 저장되어 있는 장치 또한 인식 되어 있다. 부트로더(GRUB)를 가지고 있는 부팅매체(하드디스크, CD-ROM, USB 등)를 검사하기 시작한다. 가장 먼저 검색된 하드디스크 장치에서 부트로더를 불러들인다. (이것이 OS 설치 시 CMOS 환경에서 CD-ROM이나 USB를 부팅 순서를 먼저해서 사용하는 이유이다.), 먼저 검색된 부팅매체의 0번 섹터(MBR)에서 부트 프로그램(=부트섹터)을 읽어들여 메모리로 로드 한다. 바로 이 부트 프로그램에 부트로더인 GRUB가 들어있다.
ROM-BIOS에 의해 부트로더(GRUB)가 메모리로 로딩된 이후부터는 ROM-BIOS는 시스템 부팅 제어권을 GRUB에게 넘겨주고 자기 자신은 종료한다.
부팅 2단계 : 부트로더(GRUB)의 실행과 역할
부트로더의 역할
리눅스 커널 로드 (부트로더에서 선택하는 항목들이 각각의 커널들이다.)
스와퍼(Swapper) 프로세스 호출
부트로더 화면에서 어떤 부팅 메뉴로 부팅을 할 것인가를 결정하는 것은 /boot/grub/grub.conf 파일에 정의 되어 있다.
GRUB을 통해 리눅스 커널을 로딩하고 커널을 선택하여 메모리에 로드 되는 순간부터 본격적인 부팅이 진행된다. 중간에 부팅을 잠시 멈추고 GRUB 명령어 모드로 진입할 수도 있다.
부팅 3단계 : 스와퍼(Swapper) 프로세스 수행
- 스와퍼(Swapper)
앞단계(리눅스커널로드까지)에서 인식했던 각 장치들의 드라이브들을 초기화
init 프로세스 수행
PID 0번인 스와퍼라는 프로세스는 각 장치의 드라이브들을 초기화하고 그 다음 PID 1번인 init 프로세스(/sbin/init)를 실행한다. 그 후 몇가지 기능을 수행하고 종료한다.
부팅 4단계 : init 프로세스의 실행
리눅스에서 모든 프로세스는 그 실행과 함께 설정파일을 읽어들인다.
init 프로세스는 /etc/inittab 이라는 설정파일을 읽어들여 무엇을, 어떻게, 언제 실행할 것인가를 결정한다.
부팅과정에서 출력되는 거의 모든 부팅메시지들은 /etc/inittab 파일의 실행 내용이다.(한 행씩 순차적으로 실행)
부팅 5단계 : 부팅레벨의 결정 단계
- /etc/inittab 파일 내용 중 가장 먼저 실행되는 행
id:3:initdefault: |
부팅 6단계 : /etc/rc.d/rc.sysinit 스크립트 실행 (모든 부팅레벨)
부팅레벨 지정 바로 다음에 나오는 행으로 인해 /etc/rc.d/rc.sysinit이라는 스크립트 파일이 실행된다.
스크립트 파일은 “시스템초기화” 작업을 수행한다. 부팅 레벨이 몇번인가와는 상관없이 모든 부팅레벨에서 반드시 한번 실행되는 스크립트이다.
/etc/rc.d/rc.sysinit 파일이 수행하는 내용
default path 설정
/etc/sysconfig/network 파일의 실행
네트워크 설정 확인 및 적용
swapon 명령으로 스왑작동하기
호스트이름, 도메인이름 설정하기
keymap loading
fsck 실행으로 /etc/fstab 파일 참조하여 파일 시스템 점검하기
PNP 하드웨어 점검하기
/proc 파일 시스템 mount
kernel module load
depmod 실행으로 모듈 의존성 설정
system clock 설정
system font load
파일청소 작업
시리얼포트 설정 작업
/usr/sbin/netconfig 실행
/usr/sbin/timeconfig 실행
/usr/sbin/authconfig 실행
/usr/sbin/ntsysv 실행
utmp 파일의 검사 및 생성
wtmp 파일의 검사 및 생성
기타 시스템 초기화에 필요한 작업들을 수행
부팅 7단계 : /etc/rc.d/rcN.d/ 디렉토리의 스크립트 실행(부팅레벨에 따른 실행)
10:0:wait:/etc/rc.d/rc 0 |
앞 단계에서 정해진 부팅 레벨에 대항하는 디렉토리 내의 스크립트가 순차적으로 수행된다.
ex) 3번 부팅 레벨 : /etc/rc.d/rc3.d 디렉토리의 스크립트가 수행된다.
이 디렉토리 내에 존재하는 파일들은 모두 링크파일들이다. (대부분이 /etc/rc.d/init.d)
/etc/rc.d/rcN.d 디렉토리의 특징
이 디렉토리의 파일들은 각각의 부팅레벨에 따라 시스템 부팅 시에 자동실행 될 서비스(데몬)들에 대한 설정이다.
이 디렉토리에 존재하는 모든 파일들은 /etc/rc.d/init.d/ 디렉토리에 있는 파일을 원본으로 하는 링크 파일들이다.
K로 시작하는 파일 : 해당 부팅레벨로 부팅 시에 자동시작 되지 않는 서비스들
S로 시작하는 파일 : 해당 부팅레벨로 부팅 시에 자동 시작되는 서비스들
K 또는 S 다음의 숫자들은 실행될 순서를 의미
예외적으로 S99local은 /etc/rc.d/rc.local 파일을 원본으로 하는 링크 파일로서 2,3,4,5번 부팅레벨에서만 실행되도록 되어 있다.(맨 마지막 단계에 반드시 한번 수행)
예외적으로 S99single은 1번 부팅레벨에서만, S01reboot은 6번 부팅 레벨에서만 실행된다.
/etc/rc.d/rc.local 파일은 각 사용자들이 부팅시에 자동으로 실행하고자 하는 프로그램들을 설정하거나 스크립트를 설정해두는 파일이다.
부팅 8단계 : 시스템 매직키 설정을 한다.
ca::ctrlaltdel:/sbin/shutdown -t3 -r now |
CTRL + ALT + DEL 키에 대한 수행 내용을 설정한 것이다.
Tip
/sbin/shutdown -t3 -r now 명령에서 -a 옵션을 추가해 주면 /etc/shutdown.allow 파일이 존재하고 사용자가 추가되어 있을 경우(한 행에 사용자 한명씩 입력) 해당 사용자만 수행 하도록 설정할 수 있다.
부팅 9 단계 : 시스템 전원 공급 설정을 한다.
UPS 전원이 부족 할 경우와 재충전 되었을 경우에 실행되는 명령을 지정할 수 있다.
부팅 10 단계 : 가상터미널 실행과 로그인창 실행
2,3,4,5번 부팅 레벨로 부팅 시에 로그인창을 실행해주는 6개의 가상콘솔 실행 설정
/etc/inittab 파일로 인해 콘솔 로그인 화면을 실행하는 /sbin/mingetty 명령을 실행하게 된다.
부팅 11 단계 : X 윈도우 실행
x:5:respawn:/etc/X11/prefdm -nodaemon |
부팅레벨이 5번일 경우일 때만 GUI 사용자환경을 제공하기 위해서 X윈도우를 실행하게 된다.
거의 대부분의 리눅스 배포판에서는 GNOME 데스크톱을 기본적인 X 윈도우로 사용하고 있다.
위의 설정 처럼 /etc/X11/prefdm 명령이 실행되는데 prefdm이 X 윈도우를 실행 시켜주는 스크립트 파일이다.
※ 참고 : 리눅스 서버관리 실무 바이블 3.0
'Programming > Linux (Ubuntu)' 카테고리의 다른 글
Ubuntu, Genymotion 설치 (0) | 2014.10.02 |
---|---|
Ubuntu, Jenkins 설치 및 계정 추가 (0) | 2014.09.28 |
Ubuntu, Tomcat 설치 및 계정 추가 (0) | 2014.09.28 |
Ubuntu, IntelliJ Plugin 설치 (0) | 2014.09.16 |
Ubuntu, apt-get으로 oracle-java7 jdk 설치하기 (0) | 2014.09.05 |
댓글