본문 바로가기

알고 있는 것들/ICT

리눅스 부팅 과정 이해

반응형

리눅스 보편적인 부팅과정 (Cento OS 7 64bit)

-동작 순서- 

1. 전원 온

2. POST (Power on Self Test) - Hard were 점검 과정

3. BiOS(Basic Input Output System)단계(PC용 팜웨어의 종류 coms세팅)

4. 부팅 장치 검색 - 하드웨어 점검 -

5. 부트 로더 실행(Grub / LiLo실행)     /boot/grub2/grub.cfg (부팅시 커널 선택을 위한 설정 파일)

6. 실행 할 커널 선텍 (실행할 커널의 목록을 보여준다)

7. 커널 로드 및 PID 1 번 실행    - 메모리에 로딩 

8. 기타 필수 프로그램

   /var/log/boot/log (로그메세지 설정)

   - 이때 시스템에서 설정된 런레벨에 맞는 프로그램을 실행한다.

9. 부팅완료

 

 

런레벨

-이때 커널은 리눅스 OS에서 설정한 RunLevel 에 맞는 프로세스를 실행한다.

런 레벨 (리눅스가 부팅할 때 시스템의 상태 표현한 값) - init

/etc/init/rc-sysinit.conf를 통해 기본 runlevel을 바꿀 수 있다.

 

0- halt(시스템 종료) Run-level 0로 변경하면 시스템 종료

1 Single user mode;;; 시스템 복원 모드 ;;; 기본적으로  '관리자 권한'을 획득

  (주로 파일 시스템 점검, 패스워드 분실 시 복구할 때 사용

2 Multi user Mode without NFS(Network File System) 공유파일

   (네트워크를 사용치 않는 텍스트 유저모드 )

3 Full multi User Mode

 (거의 모든 자원 사용 가능한 텍스트 유저 모드  / GUI 환경 아님 )

4 Unused(사용 하지 않는다.)

5 level3과 비슷하나 x윈도우가 실행된 그래픽 유저모드

6 Reboot(시스템 재부팅) ;; Run-lovel 6으로 변경하면 시스템 재부팅

 

 - 런레벨은 숫자 또는 문자로 표현된 시스템 상태

 - 런레벨은 서비스와 사용자가 사용할 수 있는 자원들에 대한 정의상태

 

who -r (현재 런레벨 확인 명령어)

init 0 (해당 런레베로 변경) - 많이 사용하지 않는 구 명령어

/etc/rc -rc확인 (런레벨에 맞는 rc스크립트)

 

------------------------------------------------------------------------------------

 

부팅과정 요약

 

전원공금 - 물리적인 영역

 Power On Self Test - 

 Bios에 설정된 부팅장치 -

 MBR(Master Boot Record)- 2가지 부트로더 (LiLo, Grub)

GRUB실행의 예

-논리적인 영역에서 실행  

LiLo(리로): Llnus LOader

 - 전통적인 부트로더

 - /etc/lilo.conf 에 설정파일 저장

 

GRUB : GRand Unified Bootloader

 - 레드헷 7.x 부터 기본 부트로더로 제공

 - LiLo의 단점을 보완

 - 사용이 편리

 - 부트정보가 올바르지 않아도 부팅시에 바로 수정가능(환경재설정)

 - 윈도우 계열 외에도 다른 OS와 멀티부팅 가능

 - 대화형 모드 제공

 - /boot/grub/grub.conf 에 설정파일 저장

   /etc/grub.conf 와 링크

 

/etc/grub.conf OR /boot/grub/grub.conf 설정파일

 

 - timeout = 부팅시간() : timeout 100

 - default 엔트리번호: 기본값으로 부팅되도록 설정된 순서 :default 0

 - fallback 엔트리번호 : 부팅실패 시 차순위 부팅순서 : faliback 1

 - splashimg (장치명, 파티션) 이미지파일 splashimg(hd0,0) /boot/grub/splash.xpm.gz

 

--------------멀티부트시 설정---------------------

  - title부팅제목 title Redhat 9 (2.4.20)

 - root(하드디스크장치.파티션) root(hd0.0) - 장치연결 순서 와 파티선 순서

   (hd0 - hd a (프라이머리 마스터)

    hd1 - hd b (         슬레이브)

    hd2 - hd c (세컨더리  마스터)

    hd3 - hd d (         슬레이브)

 --------------------------------------------------------------

 - kernel /vmlinuz-버젼 ro root=/dev/장치명

 

 - initrd 이미지 파일명 : 시스템 초기화용 램디스크 파일

 

 

패스워드 설정

 - password --md5 [md5포맷패스워드] 맨 윗줄 추가

 

Windows 설치 후 GRUB가 없어졌을 때

-리눅스1 cd로 부팅 후

-boot: vmlinuz root=/dev/hda2 (입력_)

-# grub-install /dev/hda

 

Windows와 멀티부팅

-/etc/grub.conf 내 설정 

 - title 타이틀 명 (ex : title Windows XP pro

 - rootnoverify (장치명, 파티션) (ex : rootnoverify(hd0,0)

 - makeactive

 - chainloader +1

 

/etc/grub.conf 설정이 잘 못되어 부팅이 안될 때

 -GRUB부팅화면에서 "e'키로 해당 메뉴 편집 가능

 

- grub.conf 파일 내용

default=0

timeout=10

splashimage=(hd0.0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-0)

           root(hd0.0)

           kernel /vmllnuz-2.4.20-8 ro root=LABEL=/ - 커널파일 위치

           initrd /initrd-2.4.20-80.img             - 램디스크 설정 / 생략가능

title Red Hat Linux (2.4.23)

           root(hd0.0)

           kernel /vmllnuz-2.4.23 ro root=/dev/sda2  - 커널 업그레이드 후 커널 파일 선택

 

-- 커널을 업그레이드 했을 경우 grub를 편집한다 평소에는 편집 안 한다. 

 

 

 

md5crypt

passwd: 암호입력

 

init 프로세스 데몬 : 백그라운드로 실행된다.

리눅스 pc를 부팅 할 때 커널 메모리에 로드되고 여러가지 초기화 과정(하드웨어, 페이지 테이블)이 정상적으로 이뤄지면 커널은 프로세스들을 만들어 사용자가 컴퓨터가 사용 할 수 있는 환경을 만드는데 이때 가장 먼저 만들어 지는 프로세스가 init 프로세스이다

  

init프로세스는 가장 먼저 생성되어 부팅시 자동으로 실행해놓은 프로그램들(네트워크 서비스나 usb driver 등록 등등)을 실행시켜준다. 실행시켜주는 방법은 간단히 fork 해서 프로세스를 생성하는 것이다. 정상 부팅후 pstree로 프로세스간 관계를 살펴보면 다음과 같다.

   

/etc/init/rc-sysinit.conf를 통해 기본 runlevel을 바꿀 수 있다.

그런데 이것을 뒤집은 새로운 방식의 부팅 프로세스가 systemd이다.

 

init프로세스가 모든 작업을 차례차례 진행했다면, systemd는 프로세스 생성과정에서 병렬화 기능을 제공해(aggressive parallelization capabilites) init 프로세스보다 빠르게 부팅이 가능하도록 한다. 더 많은 feature들이 있는 것 같은데 아직 전반적인 지식이 부족해서 이해하지는 못하고 있다..

 

아직 모든 리눅스 OS에 적용된것은 아니고, Fedora, CentOS7 에만 적용되었다. Debian에서는 아직 정식으로 적용되진 않았다.

반응형