Booting

진주찬·2023년 6월 13일
0

Linux

목록 보기
8/11

부팅

: 사용자가 컴퓨터 시스템을 켤 때 운영체제를 시작하는 부트스트래핑 프로세스

  • 부팅 시퀀스 : 운영체제를 로드하는 스위치를 킬 때 수행되는 작업

리눅스 부팅 순서

  • 전원 켜기/리셋
    1) 시스템 시작 : BIOS/Boot Monitor
    2) Stage1 부트로더 : MBR(Master Boot Record)
    3) Stage2 부트로더 : LILO, GRUB2 등
    4) 커널 : 리눅스
    5) Init : 사용자 공간 서비스

BIOS(Basic Input Output System)

: 컴퓨터를 처음 켰을 때 운영되는 소프트웨어 코드

  • 주요 기능 : 다양한 디바이스를 인식하고 컨트롤한다
    ex) 부팅 가능한 장치 찾기 등
  • BIOS 진입 : 일반적으로 F12

MBR(Master Boot Record)

일반적으로 리눅스는 기본 부투로더가 포함되어있는 마스터 부트 레코드에서 부팅된다.

  • 세부사항
    - 처음 446바이트 : 기본 부트로더, 실행 코드 및 오류 메시지 텍스트
    - 다음 64바이트 : 파티션 테이블, 4개의 파티션 각각에 대한 레코드
    • 마지막 2바이트 : MBR의 유효성을 검사, 일반적으로 "OxAA55"를 사용함

부트로더

  • 커널로더 : 커널은 부트로더에 의해 메모리에 로드된다.
  • 여러 운영체제 중에 하나를 로드할 수 있다.
  • 인기많은 부트로더 : LILO, GRUB

LILO (_LI_nux _LO_ader)
: 특정 파일 시스템에 의존하지 않으며, 하드디스크 및 플로피에서 부트 가능,
커널 이미지 파일 또는 구상파일이 변경되면 LILO를 변경해야한다. (etc/lilo.conf)
커널 매개변수는 loli.conf에 지정할 수 있다.
"root=device" -> 파일시스템을 루트로 마운트 하도록 설정
"ro", "rw" -> 루트 ㅏㅍ일 시스템을 읽기전용, 읽기쓰기로 마운트
"nfsroot=server" -> 네트워크 파일 시스템을 루트로 사용
"init=program" -> 커널이 실행할 첫번째 프로그램의 이름

LILO의 에러

  • L : 첫번째 부트로더가 로드되고 시작되었다(미디어 오류 또는 불일치)
  • LI : 첫번째 부트로더가 두번째 부트로더를 로드할 수 있음(부팅 프로그램 불일치)
  • LIL : 두번째 부트로더가 시작되었지만 맵 파일의 디스크립터 테이블을 로드 할 수 없음
  • LILO : 릴로의 모든 부분이 성공적으로 로드됨

GRUB(_GR_and _U_nified _B_ootloader)
운영체제 독립 부팅
GNU의 멀티부팅 소프트웨어 패킷, 유연한 커맨드라인 인터페이스, 파일시스템 액세스, 다중 실행 가능 형식 지원, 디스크 없는 시스템 지원

  • GRUB의 작동 방식
    1) BIOS가 부팅가능한 디바이스를 찾고 MBR에게 컨트롤을 넘겨준다
    2) MBR에는 GRUB 1단계(boot.img) 포함되어 있어, 1단계에서 다음 단계만 로드
    3) GRUB 1.5단계는 첫번째 30KB에 있는 MBR(core.img)바로 다음에 오는 하드디스크를 따라 stage2를 수신한다.
    4) GRUB 2단계는 제어권을 수신하고 사용자에게 GRUb 부팅메뉴(/boot/grub)를 표시한다.
    5) GRUB은 사용자가 선택한 커널을 메모리에 로드하고 커널에게 제어권을 넘긴다.

-GRUB 수정 방식
1) "/etc/deffault/grub"(커스터마이징) -> 수정
2) "/etc/grub.d/(메뉴 및 OS 부팅용 스크립트) -> 수정(40_custom 스크립트 파일)
3) "update-grub" 명령어 수행
* "/boot/grub/grub.cfg"(부팅 시 사용) 을 직접 수정해서는 안된다.

커널 이미지

: 커널은 OS의 중심부분이다.

  • 커널은 컴퓨터가 켜져있는 동안 항상 메모리에 저장된다.
  • 커널 이미지는 실행가능한 코드가 아니라 압축된 이미지이다.

커널이 가장 먼저 하는 일은 "init" 프로그램을 실행하는 것이다.
init은 리눅스 내 모든 프로세스의 조상이다.
init 프로세스는 리눅스 시스템을 Runlevel에 따라 특정 시스템 상태로 부팅한다.
Runlevel : 일반적으로 0~6번까지 번호가 매겨진 7개의 런레벨이 있다.
-필수 런레벨 : 0 = 정지, 6=재부팅, 1=싱글 유저
(나머지 2~5 런레벨은 사용자 정의)

우분투의 런레벨

0 : "정지", 종료에 사용됨
1 : 루트 사용자만 로그인 할 수 있는 단일 사용자(복구모드)
2 : 우분투의 기본 런레벨
3~5 : 우분투에서 사용되지 않음
6 : 시스템 재부팅
n 런레벨에 관련된 모든 초기 서비스는 "/etc/rcn.d"에 저장

  • "etc/rnn.d"
    : 시스템 서비스 스크립트로의 심볼릭 링크를 포함한다.
    -시퀀스 및 실행 제어
    K : 서비스 종료
    S : 서비스 시작
    숫자(15 또는 10) : 실행 순서

시스템 런레벨 처리

"runlevel" : 현재의 런레벨 확인
"telinit" : 시스템 런레벨 변경

단일 사용자모드

: 다중 사용자 컴퓨터 운영체제가 단일 슈퍼유저로 부팅되는 모드
ex) 네트워크 서버 환경의 유지보수 등
보안 목적으로도 사용 가능,

  • 사용자나 루트의 암호를 잊어버렸을 경우, 리셋하는 방법
    1) 단일 사용자로 bash를 시작하고 시스템 부팅
    2) GRUB2 사용 및 단일 사용자 모드의 부팅 옵션을 편집
    옵션 선택 후 "e"를 누르고, "rw init=/bin/bash"로 부팅이미지 설명을 바꾼 후 ctrl+x를 누른다.

  • 종료 및 다시시작
    시스템을 안전하게 종료하기 위해서는 루트로 "halt"명령을 수행한다.
    시스템을 안전하게 재부팅 하려면 루트로 "reboot" 명령을 수행한다.

    다른 재부팅 및 종료 방법
    reboot 및 shutdown을 이용한다.

  • 옵션
    "-r" : 종료 후 재부팅
    "-h" : 종료 후 중지 또는 전원 끄기
    "now" : 지금 바로 수행
    종료 예약 ex) shutdown -h 18:00 ->오후 6:00에 중지
    shutdown -r +30 -> 30분 후에 종료 후 재부팅

0개의 댓글