리눅스(Linux) 부팅과정 - Web GuestBookcherub.sungkyul.edu/~web/jinboard/files/63_boot.pdf ·...

25
= 운영체제 실습(2) = 리눅스(Linux) 부팅과정 표월성 [email protected] http://cherub.sungkyul.edu/~web

Transcript of 리눅스(Linux) 부팅과정 - Web GuestBookcherub.sungkyul.edu/~web/jinboard/files/63_boot.pdf ·...

= 운영체제실습(2) =

리눅스(Linux) 부팅과정

표월성

[email protected]://cherub.sungkyul.edu/~web

차례

• 부팅과정

• MBR• /etc/inittab• GRUB

운영체제실습2(Linux)

부팅과정

메모리(RAM)ROM-BIOS

1. BIOS 코드로드

2. 부트로더(GRUB)로드 ( )부 더(G U )(/boot/grub/grub.conf 를참조)

3. 부트코드로드

4. 커널이미지로드 (/boot/vmlinuz-2.6.23.1-42.fc8)

MB

커널이미지 (/ oo / u 6 3 c8)

섹R

즈미

운영체제실습2(Linux)

부팅과정

Power ONPower ON

ROM-BIOS 프로그램실행O OS 램실행

▪ BIOS (Basic Input/Output System) : 메모리의 특정 번지로 자동 로드 되어 실행 됨.▪ POST(Power On Self Test) 수행-서버에장착된 H/W가 인식됨.(시리얼장치, 패러럴장치, PS/2 마우스장치, 사운드장치, IDE장치,

플로피드라이브, SCSI장치, 이더넷 카드 등 .), , )- H/W의 물리적인 손상체크와초기화가 병행됨.(CMOS내용 검사, CPU, Memory, 그래픽카드, 키보드, 마우스,

기타 각종 H/W의이상유무진단, H/W초기화수행)▪ 부팅매체(DISK, CD-ROM, Floppy 등) 검색▪ MBR(Master Boot Record)를 읽어, 부트로더(GRUB)를로드시킴

GRUB 실행(부트로더 실행)

▪ 부팅메뉴 선택 (/boot/grub/grub.conf파일참조)▪ kernel 이미지 로드 (/boot/vmlinuz-2.6.23.1-42.fc8)▪ swapper 프로세스 호출

운영체제실습2(Linux)

부팅과정

swapper프로세스 (PID 0)swapper 프로세스 (PID=0)

▪ 커널 이미지 압축해제

▪ 각 장치 드라이브들을초기화

▪ 루트(/) 파일시스템을 read-olny로마운트▪ 루트(/) 파일시스템을 read-olny로마운트- /boot/grub/menu.1st (= /boot/grub/grub.conf)에서 “root=파티션”으로 설정된 부분을 루트 파트션으로)▪ 파일시스템 검사

▪ 루트(/) 파일시스템을 read-write모드로마운트▪ init 프로세스(PID=1) 호출

init 프로세스 (PID=1)

▪ /etc/inittab파일 참조▪ /etc/inittab파일 참조▪ /etc/rc.d/rc.sysinit 스크립트 실행▪ 해당 run-level에 맞는 /etc/rc.d/rc#.d/* 스크립트 실행▪ /etc/rc.d/rc.local파일 실행▪ CTRL+ALT+DEL키 작동 설정전원(UPS)관리설정▪ 전원(UPS)관리설정▪ 가상콘솔 접속을 위한 프로토콜(mingetty) 실행▪ 실행레벨이 5일때, prefdm스크립트실행(x윈도우로 부팅)

Login 프롬프트 출력

운영체제실습2(Linux)

og 롬 출력

MBR

• 파티션 테이블

• 예)------------------------------------------------------------80 01 01 00 06 7F 3F FD 3F 00 00 00 C1 40 1F 00------------------------------------------------------------------------------------------------------------------------① Bootable Flag (1Byte)◦ 부팅 파티션 식별 정보 (어느 파티션으로 부팅할 것인지를 표시함)◦ 0x80 : 부팅 파티션(active partition)◦ 0x00 : 부팅에 사용되지 않는 파티션◦ 0x00 : 부팅에 사용되지 않는 파티션

◦ 4개의 파티션 중 1개의 파티션에만 0x80을 사용할 수 있다. ② Starting CHS Address (3 bytes)③ Partition Type(1 byte) : 파일 시스템 타입을 식별(0x06 )④ E di CHS Add (3 b t )④ Ending CHS Address (3 bytes)⑤ Starting LBA Address (starting sector)⑥ Size in Sectors (파티션의 섹터의 개수: 4 bytes)■ Signature value (2bytes ( 510 ~ 511 : 1FE ~ 1FF )) : 0xAA0x55

운영체제실습2(Linux)

/etc/inittab

• /etc/inittab– init프로세스가 제일 먼저 읽는 파일

– init프로세스가 무엇을 해야 할 것인가를 결정.(즉, 시스템을 어떻게 setup할지를 설정)할지를 설정)

– 리눅스 사용환경 초기화

• 파일시스템 점검

스 프로 스 관• 서비스 프로세스 관리

• 가상 콘솔관리

• 실행 level 관리 등.실행 등

운영체제실습2(Linux)

/etc/inittab

운영체제실습2(Linux)

/etc/inittab (inittab파일의 형식)

• /etc/inittab파일내의 각 행의 형식– name : runlevel : options : process –options

• name : 각 항목에 대한 이름 (id, si, pr 등)• runlevel : 어떤 실행레벨에서 실행할 것인가를 정의

• options : 네번째 항목의 프로세스를 실행할 때 적용되는 속성– respawn : 프로세스가 종료되면, 항상 다시 시작.(ex, login창)– wait : 지정된 프로세스가 실행되면, init는 해당 프로세스가 종료될 때까지 기다린 후에 다음작업 진행

– once : 해당 프로세스를 한번만 실행되도록 하는 옵션당 를 한번만 실행 록 옵션

– boot : 시스템이 부팅되는 동안 해당 프로세스가 실행(init는 runlevel필드를 무시함)– bootwait : 부팅되는 동안 해당 프로세스가 실행되며, init는 프로세스가 종료될때까지 기다림

– off : 아무런 동작도 발생하지 않도록 하는 옵션(일종의 주석과 같은 역할)– ondemand : 실행레벨이 1, 2, 3인 경우에만 유용. (해당 runlevel일 때만, 프로세스 동작함.)ondemand : 실행 벨 1, 2, 3인 경우 만 유용. ( 당 runlevel일 만, 동작함.)– initdefault : 시스템이 부팅되면서 어떤 실행레벨로 부팅할 것인가를 결정하게 하는 옵션

– sysinit : 시스템이 부팅되는 동안 한번만 프로세스가 실행하는 옵션(boot, bootwait보다 우선권을 갖는다)– powerwait : init는 SIGPWR신호를 받는 경우에만 프로세스가 가동 됨. – powerfail : powerwait와 같지만 init는 프로세스가 완료될때까지 기다리지 않는다powerfail : powerwait와 같지만, init는 프로세스가 완료될때까지 기다리지 않는다

– powerokwait : init가 SIGPWR신호를 받고, /etc/powerstatus파일에 OK문자열이 있을 때만 프로세스 실행됨. – ctrlaltdel : init프로세스가 SIGINT신호를 받았을 때, 실행되도록 함. – kbrequest : init프로세스가 키보드관리자로 부터 keyboardsignal을 받았을 때 해당 프로세스 실행.

• process options : 실행할 프로세스(명령어)와 명령어에 대한 옵션• process –options : 실행할 프로세스(명령어)와 명령어에 대한 옵션

운영체제실습2(Linux)

/etc/inittab (Default runlevel 설정)

• runlevel– 필요에 따라 시스템을 어떤 방식으로 부팅할 것인가를 분류해 놓은 것.

• 레벨 0 : 시스템 종료(init 0, halt, shutdown –h now)• 레벨 1 : 싱글모드(관리모드), 콘솔로만 접근가능, root만 허용(init 1)• 레벨 2 : NFS를 지원하지 않는 멀티유저 모드(init 2)• 레벨 3 : NFS를 지원하는 멀티유저 모드(init 3, full multiuser mode)• 레벨 4 : 현재 사용하지 않는 부팅모드(설정하여 사용가능함)• 레벨 5 : X윈도우 환경으로 실행된 멀티유저 모드(init 5)• 레벨 6 : 서버 재부팅 모드(init 6, reboot, shutdown –r now)( )

운영체제실습2(Linux)

/etc/inittab (rc.sysinit 스크립트 실행)

• /etc/rc.d/rc.sysinit 스크립트y– 시스템 초기화 스크립트

– 모든 실행레벨에서 시스템이 부팅이 되면 꼭 한번 실행되는 스크립트

▪ default path설정▪ /etc/sysconfig/network파일 실행▪ 네트워크 설정 확인 및 적용

▪ swapon명령으로 스왑작동하기▪ 호스트이름, 도메인이름 설정하기▪ keymap loading▪ fsck실행으로 파일시스템 점검하기(/etc/fstab파일 참조)행 파 시 하기(/ / 파 )▪ PNP하드웨어 점검하기▪ /proc 파일시스템 mount▪ kernel module load▪ depmod실행으로 모듈의존성 설정depmod실행으로 모듈의존성 설정▪ system clock 설정(시스템 시간 설정)▪ system font load▪ 파일청소 작업

▪ 기타 시스템 초기화에 필요한 작업들 수행

운영체제실습2(Linux)

기타 시스템 초기화에 필요한 작업들 수행

/etc/inittab (rc#.d/* 스크립트 실행)

• /etc/rc.d/rc#.d/* 스크립트– 각 실행레벨에 따라 실행시켜야 할 스크립트 존재

(/etc/rc.d/init.d/* 로 링크)

▪ K로 시작 : Kill▪ S로 시작 : Start▪ 숫자 : 실행 순서 결정숫자 : 실행 순서 결정

운영체제실습2(Linux)

/etc/inittab (rc.local 파일 실행)

• /etc/rc.d/rc.local 파일 실행– 각 실행레벨에서 맨 마지막 단계에서 1번 실행되는 파일

– 부팅할 때마다 자동으로 실행할 명령어 등을 설정

스 중 행– /etc/rc.d/rc#.d/스크립트 파일 중 마지막에 실행 (S99local파일)

운영체제실습2(Linux)

/etc/inittab (CTRL+ALT+DEL키 설정)

• CTRL+ALT+DEL키 작동설정

• 매직키 사용제한– -a 옵션 추가

/etc/shutdown allow파일생성– /etc/shutdown.allow파일생성

– 한 행에 한 사용자ID를 넣어두면 됨. (여기에 기록된 사용자만 매직키 사용가능)

운영체제실습2(Linux)

원/etc/inittab (전원관리 설정)

• 전원관리 설정

– pf행• UPS전원이 부족할 경우 2분후에 자동적으로 리눅스서버를 shutdown• UPS전원이 부족할 경우 2분후에 자동적으로 리눅스서버를 shutdown시키는 설정

– pr행• UPS전원이 재충전되었을 경우, pf행에서 실행예정이었던 shutdown

절차를 자동 취소

운영체제실습2(Linux)

/etc/inittab (가상콘솔 접속)

• 가상 콘솔 접속을 위한 프로토콜 (mingetty)( g y)– 0 ~ 6까지 가상 터미널을 가리키는 것

– 부팅 후에 6개의 가상 터미널이 뜨고, login을 위해 mingetty프로그램이 실행됨 => login프롬프트 출력– login을 위해 mingetty프로그램이 실행됨 => login프롬프트 출력

운영체제실습2(Linux)

/etc/inittab (prefdm스크립트 실행)

• prefdm스크립트 실행p– 실행레벨이 5일때, prefdm스크립트 실행(x윈도우로 부팅)

운영체제실습2(Linux)

GRUB (부트로더)

• 부트로더(Bootloader)( )– 시스템에 설치되어 있는 운영체제로 부팅될 수 있도록 해주는 프로그램

– 하드디스크의 첫번째 섹터(512bytes)인 MBR에 위치함.

• GRUB (Grand Unified Bootloader)– Erich Stefan Boleyn에 의해서 개발된 부트로더

리눅스의 전통적인 b tl d 로 사용되어 왔던 LILO의 단점을 보완– 리눅스의 전통적인 bootloader로 사용되어 왔던 LILO의 단점을 보완

• Grub 부트로더의 특징– LILO에 비해 설정 및 사용이 편리.– 부트 정보가 올바르지 않더라도 부팅 시 이를 바로 수정하여 부팅할 수 있다.– Chain-load를 이용하여 멀티 부팅 지원를 용 멀 팅

– 메뉴 인터페이스 환경을 지원하며, 대화형 모드로 부트 정보를 설정할 수 있다.– 파일시스템과 커널 실행 포맷을 인식하여 하드디스크 상에서 커널의 물리적 위치

를 기록하지 않고서도, 커널 위치와 커널 이미지 파일명만 알고 있으면 부팅이 가능하다.

운영체제실습2(Linux)

GRUB (grub.conf)

• /boot/grub/grub.conf = /etc/grub.confg g g– GRUB 환경설정파일

운영체제실습2(Linux)

GRUB (grub.conf)

• /boot/grub/grub.confg g

– default 0 : 기본적으로 부팅되도록 할 부트 엔트리 값 (title 옵션)

– fallback 1 : 기본 부트 엔트리로 부팅할 수 없을 때, 2차적으로 부팅에 사용될 부트 엔트리

timeout 5 : GRUB부트 화면에서 키보드 입력을 받기까지의 대기시간– timeout 5 : GRUB부트 화면에서 키보드 입력을 받기까지의 대기시간

– splashimage : XPM형태의 그림이미지를 압축한 xpm.gz파일을 GRUB메뉴 화면의 배경 이미지로 사용할수 있다.

– hiddenmenu : GRUB부트 메뉴를 보여주지 않고, 바로 리눅스 커널로 부팅

운영체제실습2(Linux)

GRUB (grub.conf)

• title 부트엔트리 설명

– 부팅시 메뉴에 나타나는 제목

• root (HDD디바이스 명, 부트 파티션 명)– root : GRUB의 루트디바이스를 설정하는 옵션(/boot 디렉토리를 포함하는 파티션)

• kernel 커널이미지경로/커널명 root = 루트디바이스명 부트파라미터

– kernel 커널이미지 경로 및 파일 ro root=장치명 부트파라미터

– rhgb : Redhat Graphical Bootg p– quiet : 커널 메시지를 화면상에 출력되지 않도록 하는 옵션

운영체제실습2(Linux)

GRUB (grub.conf)

• initrd initrd이미지경로/initrd명함– 리눅스 설치시에는 initrd이미지 설정이 포함되어 있으나,

– 커널 컴파일 후에는 스카시 HDD가 아닌 경우에는 이 설정이 생략되어도 무방함.– (참고) initrd파일

• 리눅스 커널이 모든 초기화 작업을 마치고 가장 먼저 마운트 되는 디스크 이미지 파일. (부트파티션 보다도 먼저 마우트 함)

• initrd는 주로 커널 모듈을 추가로 로딩할려고 할 때 필요합니다. 부 을 운 는 요한 모듈을 로 스• 예) 부트 파티션을 마운트 하는데 필요한 커널 모듈을 로딩(스카시 카드 디바

이스 드라이버 모듈을 로딩)

운영체제실습2(Linux)

GRUB (grub.conf)

title Window XProotnoverify (hd1,0)makeactiveh l d

• rootnoverify : – root와 거의 같지만, mount를 하지 않는다.

chainloader +1

root와 거의 같지만, mount를 하지 않는다. – FAT32나 NTFS 파티션 처럼 인식하지 못하는 파티션인 경우 이 옵션을 사용하여 지정

• makeactive : – 루트 디바이스를 부팅 가능한 파티션으로 지정 (primary 파티션에만 사용)

• chainloader +1 : – makeactive 명령으로 부팅 가능하도록 지정한 파티션의 1번째 sector부터 읽어 들이기 시작해

부팅을 시작하도록 하는 명령

운영체제실습2(Linux)

GRUB

• GRUB에서의 디바이스 명칭– 일반적인 HDD명칭 표시 : hda , hdb, hdc, hdd– GRUB에서의 HDD명칭 표시 : hd0, hd1, hd3, hd4

• hd = hard disk– (hd0, 0) : primary HDD의 첫번째 파티션 = /dev/hda1(hd0, 0) : primary HDD 첫번 션 /dev/hda1– (hd0, 1) : primary HDD의 두번째 파티션 = /dev/hda2– (hd0, 2) : primary HDD의 세번재 파티션 = /dev/hda3

(hd1 1) d HDD의 두번째 파티션 /d /hdb2– (hd1, 1) : secondary HDD의 두번째 파티션 = /dev/hdb2

• (fd0) : floppy disk

운영체제실습2(Linux)

Q&A

• Q&AQ

운영체제실습2(Linux)