리눅스 부팅 프로세스 (시스템 엔지니어 개발 면접)
개요
- BIOS
- MBR
- Boot Loader (GRUB)
- Kernel
- Systemd
- Runlevels
순서로 부팅이 일어난다.
1. BIOS / UEFI
- 컴퓨터가 실행될 때 cpu와 램에는 어떠한 자원도 로딩되지 않은 상태입니다. 그 때 기본적인 입출력이 가능하게 하고, MBR 섹터를 찾습니다.
- BIOS는 컴퓨터의 마더보드에 내장된 소프트웨어로, 시스템을 켜면 CPU가 BIOS에 저장된 코드를 실행하여 하드웨어를 초기화하고, 부팅 순서를 설정합니다.
- delete 키 또는 F12 키를 눌러 바이오스 설정 창에 진입할 수 있습니다.
- UEFI는 BIOS의 현대적 대체제로, 더 빠른 부팅 시간과 보안 기능을 제공합니다. 이는 파티션과 파일 시스템을 직접 읽을 수 있어, 더 큰 드라이브와 더 복잡한 설정을 지원합니다.
- 기본적으로 부트로더를 내장하고 있어 로딩 과정이 필요 없으며 BIOS보다 더 화려한 그래픽 인터페이스를 제공합니다.
2. MBR / GPT
- BIOS에서 하드디스크의 지정한 섹터를 가르켜 MBR이 메모리에 적재됩니다. 작은 용량이기에 부팅에 관한 정보를 다 담을 수 는 없어서, 부트로더를 불러와야합니다.
- MBR(Master Boot Record)는 하드 드라이브의 첫 번째 섹터에 위치하며, 부트 로더 코드와 파티션 테이블을 포함합니다. 이는 시스템이 어느 파티션에서 부팅해야 하는지 결정합니다.
- GPT(GUID Partition Table)는 UEFI와 함께 사용되며, MBR보다 더 큰 드라이브와 더 많은 파티션을 지원합니다.
3. BOOT LOADER & GRUB
- LILO, GRUB 등의 부트로더가 존재합니다. 운영체제를 선택할 수 있고 커널을 적재하는 역할을 합니다.
- GRUB(GRand Unified Bootloader)는 다중 부팅을 지원하는 강력한 부트 로더입니다. 이는 커널 선택 메뉴를 제공하고, 사용자가 다양한 커널 옵션과 운영 체제를 선택할 수 있게 합니다.
- GRUB는 /boot 파티션에 위치하며, 커널 및 초기 램 디스크를 메모리로 로드하고 실행합니다.
- 글로벌 설정: 이 섹션은 전체 grub.conf 파일에 영향을 미치는 설정을 포함합니다. 예를 들어, 타임아웃(부팅 메뉴가 표시되는 시간), 기본 부팅 항목 등이 있습니다.
- 부팅 항목: 이 섹션은 각각의 운영 체제 또는 부팅 옵션에 대한 설정을 포함합니다. 각 항목은 title로 시작하며, 그 아래에 root, kernel, initrd 등의 지시어가 포함됩니다. 이들은 각각 부팅할 파티션, 커널 파일의 위치, 초기 RAM 디스크 이미지 등에 대한 정보를 제공합니다.
- 기타 지시어: password, hiddenmenu 같은 추가적인 지시어를 통해 부팅 과정을 보다 세부적으로 제어할 수 있습니다.
4. KERNEL
- 부트 로더는 커널을 메모리로 로드합니다. 리눅스 커널은 하드웨어와 소프트웨어 간의 인터페이스 역할을 하며, 시스템의 핵심 기능을 관리합니다.
- 커널은 하드웨어 드라이버를 초기화하고, 시스템의 주요 구성 요소를 설정합니다.
- 사용자는 쉘로 커널과 통신을 할 수 있습니다.
5. SYSTEMD
- 커널에 ‘데몬’ 이라는 서비스가 하나씩 추가됩니다. 그 중 가장 첫 번째로 적재되는 데몬이 systemd입니다.
- systemd는 일부 리눅스 배포판에서 유닉스 시스템 V나 BSD init 시스템 대신 사용자 공간을 부트스트래핑하고 최종적으로 모든 프로세스들을 관리하는 init 시스템입니다.
6. RUN LEVELS
- 리눅스는 다양한 '런 레벨' 또는 systemd의 '타겟'을 사용하여 다른 모드에서 작동합니다. 이들은 시스템의 다양한 상태를 나타냅니다(예: 멀티유저 모드, 그래픽 모드).
- inittab에 부팅 설정이 자세히 기록되어 있습니다.
- 레벨 0 : 시스템 종료
- 레벨 1 : 싱글모드 (관리 모드)
- 레벨 2 : NFS를 지원하지 않는 멀티 유저 모드
- 레벨 3 : NFS를 지원하는 멀티 유저 모드
- 레벨 5 : 그래픽을 지원하는 X윈도우 환경으로 진입하는 모드
- 레벨 6 : 재시작
INITTAB
- [Identifier:RunLevel:Action:Command]
- id는 항목의 식별자입니다.
- runlevels는 해당 항목이 활성화되는 실행 레벨을 나타냅니다.
- action은 특정 조건에서 실행할 동작을 정의합니다.
- process는 실행할 명령이나 스크립트입니다.
7. REFERENCE