본문 바로가기
IT/리눅스

리눅스 부팅(시작과 종료과정)

by IT 과학정복 2024. 2. 18.
반응형

리눅스 운영 체제는 사용자에게 다양한 환경과 기능을 제공하며 컴퓨터 하드웨어를 직접 제어할 수 있는 강력한 기능을 갖추고 있습니다. 이 글에서는 리눅스 시스템의 부팅 과정과 종료 방법을 포함하여 로그인, 로그아웃, 시스템 종료 방법 및 GRUB(Grand Unified Bootloader) 부트 로더의 설정과 복구 방법에 대해 자세히 살펴보겠습니다.

리눅스 부팅 개요

리눅스 시스템의 부팅 과정은 다음 단계로 진행됩니다:

  • 전원 ON: 컴퓨터 전원이 켜지면 BIOS 또는 UEFI 펌웨어가 활성화되어 하드웨어 검사를 수행하고 부팅 가능한 장치를 찾습니다.
  • MBR/GPT 검사: BIOS/UEFI는 저장 장치의 MBR이나 GPT에서 부팅 정보를 읽어 부트 로더를 찾습니다.
  • 부트 로더 실행: 대부분 GRUB이 사용되며, 이는 리눅스 커널을 메모리에 로드합니다.
  • 커널 초기화: 커널이 로드되면 하드웨어를 초기화하고 루트 파일 시스템을 마운트 한 후 init 프로세스를 시작합니다.
  • Init 프로세스: systemd와 같은 init 시스템이 모든 필요한 서비스와 프로세스를 시작합니다.
  • 사용자 로그인: 모든 초기화 작업이 완료되면 사용자는 시스템에 로그인할 수 있습니다.

 

1. Power-On Self Test(POST)

컴퓨터를 처음 켜면, 메인보드의 펌웨어(BIOS 또는 UEFI)는 POST를 수행합니다. 이 초기 단계에서는 RAM, 프로세서 및 기타 주변 장치와 같은 시스템의 하드웨어가 제대로 작동하는지 확인합니다. 중요한 하드웨어 문제가 감지되면 과정이 중단되고 문제를 나타내는 오류 메시지나 비프음 코드가 발생합니다.

2. 부트로더 초기화

POST를 통과하면 펌웨어는 부트로더를 찾습니다. 부트로더는 운영 체제를 로드하는 작은 소프트웨어입니다. 리눅스에서 가장 일반적인 부트로더는 GRUB(GRand Unified Bootloader)과 systemd-boot(더 단순하고 주로 UEFI 시스템과 함께 사용됨)입니다.

  • BIOS 시스템: BIOS는 저장 장치(예: HDD 또는 SSD)의 마스터 부트 레코드(MBR)에서 부트로더를 검색하며, 사전에 정의된 부팅 순서를 따릅니다.
  • UEFI 시스템: UEFI 펌웨어는 EFI 파티션(저장 장치에 있는 FAT 파일 시스템으로 포맷된 전용 파티션)에서 부트 항목 목록을 읽어 부트로더를 찾습니다.
  • BIOS/UEFI 초기화: 컴퓨터가 켜지면, BIOS 또는 UEFI 펌웨어가 초기화되며, 하드웨어 테스트와 시스템 검사(POST: Power-On Self Test)를 수행합니다.
  • 부트 디바이스 선택: BIOS/UEFI는 사용자 또는 설정에 의해 지정된 부팅 순서에 따라 부트 가능한 디바이스(하드 드라이브, USB, 네트워크 등)를 찾습니다.

3. 커널 로딩

부트로더가 활성화되면, 리눅스 커널을 메모리에 로드합니다. 커널은 시스템 자원과 하드웨어 상호 작용을 관리하는 리눅스 운영 체제의 핵심 부분입니다. 부트로더는 또한 초기 램디스크(initrd 또는 initramfs)를 로드하는데, 이는 커널이 시스템을 부팅하는 데 필요한 드라이버와 모듈을 로드하기 위해 메모리에 로드된 임시 파일 시스템입니다.

  • MBR/GPT 로딩: 선택된 부트 디바이스의 첫 번째 섹터(마스터 부트 레코드 MBR 또는 GUID 파티션 테이블 GPT)에서 부트로더(예: GRUB, LILO)를 로드합니다.
  • 커널 선택: 부트로더 화면에서 사용자는 다양한 운영 체제 커널 중에서 하나를 선택할 수 있습니다. 기본적으로 최신 커널이 자동으로 선택됩니다.

 

4. 커널 초기화

커널이 로드되면, 시스템의 하드웨어와 드라이버를 초기화하고, 부트로더에 의해 지정된 루트 파일시스템을 마운트하며, init 프로세스를 시작합니다. 이 과정은 커널로부터 사용자 공간 환경으로 제어를 전환하는 중요한 과정입니다.

 

5. Init 프로세스

init 프로세스(systemd, Upstart 또는 SysVinit 중 하나, 배포판에 따라 다름)는 리눅스 커널에 의해 시작된 첫 번째 사용자 공간 프로세스이며 프로세스 ID(PID) 1을 가집니다. 스크립트와 구성 파일에 따라 모든 다른 프로세스를 시작하는 역할을 합니다. 현대 리눅스 배포판에서는 systemd가 가장 일반적인 init 시스템입니다. 이는 서비스와 다른 프로세스를 시작하여 시스템을 가동 상태로 만듭니다.

  • initramfs/initrd 로딩: 필요한 드라이버와 모듈을 포함하는 임시 루트 파일 시스템이 로드됩니다. 이는 실제 루트 파일 시스템이 사용 가능해질 때까지 필요한 최소한의 환경을 제공합니다.
  • 실제 루트 파일 시스템 마운트: 커널은 /etc/fstab에 지정된 대로 실제 루트 파일 시스템을 마운트합니다.
  • 시스템 및 서비스 초기화: init 프로세스(SysVinit, Upstart 또는 systemd 등)가 시작되어 시스템의 나머지 부분을 설정하고 사용자 공간 서비스 및 애플리케이션을 시작합니다.

6. 사용자 로그인

init 프로세스가 필요한 모든 서비스와 프로세스를 시작한 후, 시스템은 그래픽 로그인 화면이나 시스템 구성 및 설치된 환경에 따라 텍스트 기반 로그인 프롬프트와 같은 목표 상태에 도달합니다. 여기서 사용자는 시스템에 로그인할 수 있으며, 이는 사용자 세션을 시작하고 사용자 환경을 로드합니다.

 

 

종료 과정

  • 사용자가 시스템 종료, 재부팅 또는 로그아웃을 요청할 때, 리눅스는 모든 작업을 안전하게 마무리하고 컴퓨터의 전원을 종료합니다.

 

 

이번 글에서는 리눅스 시스템의 기본적인 작동 방식부터 로그인, 로그아웃, 시스템 종료 과정까지 자세히 알아보았습니다.

다음 시간에는 리눅스에 대한 더 자세한 내용을 다뤄보도록 하겠습니다.

반응형

'IT > 리눅스' 카테고리의 다른 글

리눅스 주요 디렉토리 알아보기  (0) 2024.04.29
리눅스 패키지(우분투와 CentOS)  (0) 2024.02.29
리눅스를 알아보기  (0) 2024.02.10
리눅스 iptables 알아보기  (1) 2024.01.31
리눅스 쉘(shell)을 알아보자  (1) 2024.01.30