Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Linux master 1급 - 리눅스 구동 본문

OS/Linux

Linux master 1급 - 리눅스 구동

알 수 없는 사용자 2023. 1. 26. 18:49
더보기

 리눅스 마스터 1급의 이론서를 공부하면서 정리한 내용들을 적으려고 한다. 방학 동안 필기만 합격을 해놓고, 1학기의 강의를 들으면서 실기를 이번년도 상반기에 딸 것이다. 정리한 내용이 다른 분들에게도 도움이 되었으면 한다. 또한, 2급을 따지 않은 입장에서 쓴 글들은 정말 논리적으로 비약적이고, 높은 확률로 정확하지 않을 수 있으므로, 이를 보는 다른 사람들은 해당 글들을 비판하면서 볼 수 있었으면 좋겠습니다.

 해당 포스트는 리눅스 전원이 켜졌을 때 어떻게 돌아가는지를 설명한다.

 

부트매니저 ( Boot Manager )

 보조기억장치의 OS를 RAM에 적재하기 위한 프로그램.

 

동작원리

 시스템이 켜질 때, 기본적으로 ROM에 있는 BIOS가 0번 섹터인 부트 섹터에서 512바이트의 MBR(Master Boot Record)을 읽게 된다. 이때, MBR은 크기가 제한( MBR 파일을 읽는 단위가 512로 제한 )되기 때문에 IPL( Initial Program Loader )이라 불리는 부트로더의 일부만 먼저 실행된다. IPL의 역할은 파티션 테이블을 검사하고, 부트로더의 나머지 코드의 위치를 알아내 실행하는 역할을 맡는다. 아래는 MBR이 정확히 무엇인지, 더하여 GPT는 또 무엇인지 자세히 설명하는 글이다.

 

MBR & GPT 방식의 차이

MBR(Master Boot Record)와 GPT(GUID Partition Table)의 구조적 차이 -   ...

blog.naver.com

 부트매니저에도 여러 프로그램이 있다. 대표적으로 LILO(Linux Loader), GRUB(Grand Unified Boot Loader), GRUB2 등이 있다.

 

LILO(Linux Loader)

 모든 리눅스 배포판의 표준이자 가장 오래된 부트로더이다. LILO의 설정 파일은 /etc/lilo.conf 설정파일에서 이루어진다. 나중에 설정 파일에 대한것도 정리를 하겠다. 설정 파일을 변경 후 해당 사항을 적용하기 위해 lilo 명령을 반드시 수행한다.

 

GRUB(Grand Unified Boot Loader)

 GNU 프로젝트에서 만든 부트로더이며, LILO와 차이점은 CLI를 제공하고 네트워크 부팅을 제공한다. GRUB의 설정 파일은 /boot/grub/grub.conf 파일이다. GRUB Legacy 라고도 불린다.

 

GRUB2

 기존의 GRUB의 한계( 아키텍처 제한, 펌웨어 제한 등등 )를 극복하여 다양한 아키텍처와 펌웨어, GPT를 정식 지원하고, RAID 및 LVM을 지원하게 된다. 또한 파일시스템에 있어서 Apple사의 HFS+, 마이크로소프트의 NTFS 파일 시스템, 썬의 ZFS 등의 다른 벤더의 파일 시스템도 지원한다. GRUB2는 다양한 운영체제를 지원하기 때문에 Darwin 커널과 macOS 커널과 같은 XNU도 부팅할 수 있다.

 기본적인 설정파일 경로는 GRUB Legacy와 동일하게 /etc/grub/grub.cfg이며, 일부 리눅스 배포판에서는 두 부트 매니저들을 설치할 수 있도록 /etc/grub2/grub.cfg를 사용하고 있다. 대부분의 리눅스 배포판은 해당 부트매니저를 기본 부트로더로 채택하고 있다.

 

부팅과 셧다운

 부팅은 컴퓨터의 전원이 켜진 후 사용자가 시스템을 사용할 수 있도록 운영체제를 기동하는 절차를 의미한다. 절차는 다음과 같다.

    0. 시스템 시작
         전원 버튼 on

  1. 하드웨어 초기화
     컴퓨터 메인보드의 ROM 영역에 저장된 프로그램으로 시스템을 켜면 가장 면저 실행되며, 각 장치 및 하드웨어 인식과 각 장치들의 사용을 위한 준비를 수행하며 POST(Power On Self Test)를 수행
  2. 1단계 부트로더(Stage 1 Boot Loader)
     MBR(보조기억장치의 0번 섹터) 안의 boot.img를 통해 운영체제를 로드하고, 다음 2단계인 부트로더는 파일 시스템상에 위치하게 된다. 하지만 MBR는 512바이트에 불과하므로 1단계 부트로더가 파일 시스템을 해석할 수 있는 기능을 담아야 하는데, 이 기능을 512바이트에 다 넣기가 부족하다. 따라서 1.5단계 부트로더(core.img)가 필요하고 boot.img에서는 core.img로 점프하는 역할까지만 수행하게 된다.

     1.5단계 부트로더는 MBR 이후 다음 파티션의 이전 공간에 위치하게 된다. 즉, 다음 파티션은 63번 섹터인데 그 이전이면 62개의 섹터 공간(약 30KB)에 걸쳐 1.5단계 부트로더가 위치할 수 있다. 1.5단계는 이 공간을 활용하여 ext, fat, NTFS와 같은 파일 시스템 드라이버를 포함할 수 있다.
  3. 2단계 부트로더 (Stage 2 Boot Loader)
     1.5단계 부트로더인 core.img는 파일 시스템 상의 2단계 부트로더를 로드한다. 여기서 GRUB legacy 및 GRUB2는 grub.conf의 설정에 따라 선택할 수 있는 운영체제 목록을 표시하게 된다. 사용자가 운영체제를 선택하면 해당 운영체제를 위한 커널을 메모리에 로드하고 해당 커널에게 제어권을 넘긴다.

  4. 커널
     하드웨어와 소프트웨어를 관장하는 핵심 모듈이며, RAM에 로드 되면 시스템이 리부팅하거나 종료할 때까지 상주하게 된다.커널은 /sbin/init의 프로그램을 실행하게 되며, 옛날 운영체제라면 init 프로세스를 그대로 실행하고, CentOS 7 에서는 심볼릭 링크가 되어 있는 systemd 프로세스를 실행하게 된다.

 

5. INIT 프로세스(CentOS 6)
 INIT 프로세스는 부팅을 위해 필요한 초기화 작업을 실제로 수행하게 된다. 가장 먼저 모든 시스템의 프로퍼티, 하드웨어, 디스플레이, SELinux, 커널 모듈, 파일 시스템 마운트 등을 체크하기 위해 /etc/rc.d/rc.sysinit 스크립트를 수행한다. INIT 프로세스는 /etc/inittab 파일을 읽어 실행 레벨을 확인하고 그에 맞는 스크립트를 실행한다. 가령 실행 레벨이 5인 경우 /etc/rc5.d 디렉터리에 위치한 스크립트가 실행된다. 실행 레벨과 관련된 스크립트가 모두 수행되고 나면 INIT 프로세스는 /etc/rc.local에 정의된 프로세스를 마지막으로 실행한다.

레벨 설명
0 시스템 종료를 의미
1 단일 사용자 모드(Single user mode) 또는 시스템 복원 모드
Root 권한 셸을 얻을 수 있음
2 다중 사용자 모드(Multi user mode)
네트워크 기능을 제공하지 않는 텍스트 기반 유저 모드
3 네트워크 기능을 제공하는 다중 사용자 모드
4 현재 사용되고 있지 않은 모드
5 X 윈도우를 사용하는 다중 사용자 모드
6 시스템을 재부팅할 때 사용하는 실행 레벨

 

5. systemd(CentOS 7)
 systemd는 유닛(unit)이라는 단위로 시스템 및 서비스를 제어하는 관리자이며, 기존에는 /sbin/init 경로에 위치하는 System V 계열의 INIT 프로세스가 PID 1을 가졌지만 CentOS 7 부터는 sbin/init 에 심볼릭 링크가 걸려 있는 /usr/lib/system/systemd가 그 역할을 수행한다. systemd는 여러 서비스 스크립트를 병렬로 실행이 가능하다.

 systemd는 다양한 유닛을 제공하여 INIT 프로세스의 실행 레벨의 개념에 대응하는 Target 유닛의 개념이 있다. systemd는 부팅 시 default.target 유닛에 심볼릭 링크되어 있는 Target유닛을 실행하게 된다. 만약 default.target 유닛이 multi-user.target으로 심볼릭 링크되어 있다면 부팅시 multi-user.target과 연관된 유닛들이 실행될 것이다.

구분 Target 유닛
Runlevel Systemd Target
0 runlevel0.target poweroff.target
1 runlevel1.target rescue.target
2 runlevel2.target multi-user.target
3 runlevel3.target multi-user.target
4 runlevel4.target multi.-user.target
5 runlevel5.target graphical.target

 

6. 사용자 프롬프트(user prompt)
 모든 초기화가 완료됐다면 실행 레벨에 따라 X-Window 혹은 terminal을 통해 사용자의 입력을 받을 준비가 완료된다.

 

Log in/out

 리눅스는 아이디와 패스워드를 통해 사용자를 식별하고 사용자 간 실행환경을 독립적으로 제공한다. INIT/Systemd 프로세스의 실행 레벨에 따라 단일 사용자 모드, 멀티 유저 모드, X 윈도우를 통한 멀티 유저 모드로 나뉘어진다.

모드 실행 레벨 내용
단일 사용자 모드 1 시스템에 연결된 화면과 키보드를 통해 단일 사용자 로그인이 가능하다.
멀티 사용자 모드 2, 3 실행 레벨 2의 경우 네트워크를 통한 로그인이 제공되지 않고, 실행 레벨 3의 경우 네트워크를 통한 로그인이 제공된다.
멀티 유저 모드(X-윈도우) 5 X 디스플레이 매니저를 통해 구현되는 그래픽 화면을 통해 아이디와 패스워드를 입력하여 로그인이 가능함

 로그인 후 시스템의 사용이 모두 종료되면 로그아웃을 해야 하는데, logout 혹은 exit 명령어를 통해 로그아웃이 가능하다. 또는 키보드의 ctrl + d 단축키를 통해 로그아웃 가능하다. X 윈도우라면 GUI를 통해 시스템을 종료하거나 shutdown -h now, halt, poweroff, init 6 등의 명령어를 통하여 종료가 가능하다.

Comments