OS/Linux - Ubuntu

[Linux - 리눅스 / Ubuntu - 우분투] 리눅스 시스템의 부팅 - BIOS(바이오스), 부트 로더, GRUB, LILO, 커널 초기화, init 프로세스, dmesg

주누다 2015. 4. 14. 00:26
반응형

리눅스 시스템의 부팅

- 리눅스 시스템의 부팅 과정은 크게 'PC 부팅' 과 '리눅스 부팅'으로 나누어짐.

- 리눅스가 철치된 하드웨어(예:PC)의 부팅과 리눅스 운영체제의 부팅 절차로 구분

리눅스 부팅 과정

전원

ON

바이오스

단계

부트 로더

단계

커널 초기화

단계

init 실행

단계

로그인

프롬프트

출력

 PC 부팅

리눅스 부팅




바이오스 단계


- PC 의 전원 스위치를 켜서 부팅시 제일 먼저 바이오스(BIOS, basic input/output system)가 동작

- 바이오스는 보통 ROM에 저장되어 있어 흔히 ROM-BIOS라고 부름

- 바이오스는 PC에 장착된 기본적인 하드웨어(키보드, 디스크 등)의 상태를 확인한 후 부팅 장치를 선택하여

 부팅 디스크의 512바이트를 로딩

- 이 512바이트를 마스터 부트 레코드(Master Boot record, MBR)이라고 함

- 디스크의 어느 파티션에 2차 부팅 프로그램(부트 로더)이 있는지에 대한 정보가 저장

- 메모리에 로딩된 MBR은 부트 로더를 찾아 메모리로 로딩하는 작업까지 수행

 

바이오스 단계의 세부 동작

 전원

ON

하드웨어

검사

부팅 장치

선택

MBR

로드

부트 로더

로드

부트 로더

단계

바이오스 단계




부트 로더 단계


- 바이오스 단계에서 MBR은 부트 로더를 찾아 메모리에 로딩

- 부트 로더는 일반적으로 여러 운영체제 중에서 부팅할 운영체제를 선택할 수 있도록 메뉴를 제공

- 리눅스의 대표적인 부트 로더는 'GRUB'와  'LILO' 임.

- 우분투에서는 부트 로더로 'GRUB' 을 사용

- 기본적으로 멀티 부팅이 아닐 경우 'GRUB' 는 메뉴를 출력하지 않고 바로 작업을 진행

- 부팅할 때 'GRUB' 메뉴를 출력하려면 '/etc/default/grub' 파일을 수정해야함.

- '/etc/default/grub' 파일을 열고 GRUB_HIDDEN_TIMEOUT=0 을 주석처리.

- 'GRUB_TIMEOUT=10' 은 GRUB 메뉴가 출력되는 시간(단위 : second) => 시간이 지나면 자동으로 부팅과정 진행

===================================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo vi /etc/default/grub

=> 'grub' 파일 내용

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
===================================================================================



- '/etc/default/grub' 파일을 수정 후 'sudo update-grub' 명령을 실행하여 변경된 내용을 적용

===================================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ sudo update-grub
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-3.13.0-49-generic
Found initrd image: /boot/initrd.img-3.13.0-49-generic
Found linux image: /boot/vmlinuz-3.13.0-48-generic
Found initrd image: /boot/initrd.img-3.13.0-48-generic
Found linux image: /boot/vmlinuz-3.13.0-32-generic
Found initrd image: /boot/initrd.img-3.13.0-32-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
  No volume groups found
done
sjw-lenovo@sjwlenovo-Lenovo-U310:~$ 

===================================================================================

- 적용후 재부팅시 GRUB 메뉴가 출력됨(GRUB_HIDDEN_TIMEOUT=0 을 주석처리했을 경우)



- 부트 로더는 리눅스 커널에 메모리에 로딩하는 역할을 수행

- 리눅스 커널은 /boot 디렉터리 아래에 'vmlinux-버전명'의 형태로 제공

===================================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ ls /boot/vm*
/boot/vmlinuz-3.13.0-32-generic
/boot/vmlinuz-3.13.0-48-generic
/boot/vmlinuz-3.13.0-48-generic.efi.signed
/boot/vmlinuz-3.13.0-49-generic
/boot/vmlinuz-3.13.0-49-generic.efi.signed
sjw-lenovo@sjwlenovo-Lenovo-U310:~$
===================================================================================





커널 초기화 단계

-  부트 로더에 의해 메모리에 로딩된 커널은 가장 먼저

 시스템에 연결된 메모리, 디스크, 키보드, 마우스 등의 장치를 검사

- 리눅스를 처음 시스템에 설치할 때 사용 가능한 하드웨어 정보를 미리 확인했다가,

 부팅할 때 이 장치들이 사용 가능한 상태로 유지되고 있는지 확인하는 것

- 장치 검사 등 기본적인 초기화 과정이 끝나면

 커널은 일반적으로 프로세스를 생성하는 방식인 'fork'를 사용하지 않고

 생성되는 프로세스와 쓰레드를 생성

- 이 프로세스들은 메모리 관리와 같은 커널의 여러 가지 동작을 수행

- 이런 커널 프로세스의 개수와 종류는 리눅스의 버전과 종류에 따라 다름.

- 일반적인 프로세스와 구분되도록 대괄호([ ])로 표시

- 주로 PID 번호가 낮게 배정

- 'ps -ef | more' 명령으로 확인

===================================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ ps -ef | more
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 22:13 ?        00:00:02 /sbin/init
root         2     0  0 22:13 ?        00:00:00 [kthreadd]
root         3     2  0 22:13 ?        00:00:00 [ksoftirqd/0]
root         4     2  0 22:13 ?        00:00:02 [kworker/0:0]
root         5     2  0 22:13 ?        00:00:00 [kworker/0:0H]
root         7     2  0 22:13 ?        00:00:01 [rcu_sched]
root         8     2  0 22:13 ?        00:00:00 [rcuos/0]
root         9     2  0 22:13 ?        00:00:00 [rcuos/1]
root        10     2  0 22:13 ?        00:00:00 [rcuos/2]
root        11     2  0 22:13 ?        00:00:00 [rcuos/3]
root        12     2  0 22:13 ?        00:00:00 [rcuos/4]
root        13     2  0 22:13 ?        00:00:00 [rcuos/5]
root        14     2  0 22:13 ?        00:00:00 [rcuos/6]
root        15     2  0 22:13 ?        00:00:00 [rcuos/7]
root        16     2  0 22:13 ?        00:00:00 [rcu_bh]
root        17     2  0 22:13 ?        00:00:00 [rcuob/0]
root        18     2  0 22:13 ?        00:00:00 [rcuob/1]
root        19     2  0 22:13 ?        00:00:00 [rcuob/2]
root        20     2  0 22:13 ?        00:00:00 [rcuob/3]
root        21     2  0 22:13 ?        00:00:00 [rcuob/4]
root        22     2  0 22:13 ?        00:00:00 [rcuob/5]
root        23     2  0 22:13 ?        00:00:00 [rcuob/6]

===================================================================================


- 커널 프로세스가 생성되면 커널이 수행할 작업이 끝나고, 'init' 실행 단계를 동작시킴.




init 실행 단계

- init 실행 단계에 이르면 리눅스가 본격적으로 동작하기 시작했다고 생각하면 됨

- init 실행 단계에서는 다양한 서비스를 동작시킴

- 각 서비스가 시작하는 과정이 화면에 메시지로 출력되는데,

 우분투에서는 기본적으로 이 메시지를 보이지 않도록 하고 이미지를 출력시킴.

- 부트 스플래시(Boot Splash)라고 하는 이 이미지는 리눅스 배포판에 따라 다르게 출력

- 부트 스플래시 화면이 진행 중일 때 'Alt + D' 키를 누르면 메시지가 출력되는 화면으로 전환

- 부팅할 때 메시지가 출력되도록 하려면 '/etc/default/grub' 파일에서

 'GRUB_CMDLINE_LINUX_DEFAULT="quiet splah" 를 찾아 quiet 를 삭제하고 'sudo update-grub' 을 실행하여

 변경된 내용을 적용하면 됨

- 또는 부팅 후 'dmesg' 명령이나 'more /var/log/boot.log' 명령으로 확인 가능

- dmesg 명령으로 출력되는 메시지에는 데몬의 시작과 관련된 것뿐만 아니라 하드웨어 검사와 관련된 것도 모두 포함

===================================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~$ dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.13.0-49-generic (buildd@brownie) (gcc version 4.8
.2 (Ubuntu 4.8.2-19ubuntu1) ) #81-Ubuntu SMP Tue Mar 24 19:29:48 UTC 2015 (Ubunt
u 3.13.0-49.81-generic 3.13.11-ckt17)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.13.0-49-generic root=UUI
D=524f2929-981f-4018-acdd-354cfbe131f9 ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000091bff] usable
[    0.000000] BIOS-e820: [mem 0x0000000000091c00-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000020200000-0x000000003fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000040000000-0x00000000401fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000040200000-0x00000000c6458fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000c6459000-0x00000000c665afff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000c665b000-0x00000000d83b2fff] usable
--More--

===================================================================================


- 전통적으로 유닉스에서는 init 프로세스가 서비스를 실행시킴.

- 따라서 init 프로세스는 처음 생성된 프로세스로 PID가 1번임.





반응형