Chapter 6. 부팅과 셧다운

Table of Contents
부팅과 셧다운 과정의 개괄
부팅의 세부 과정
셧다운의 세부 과정
리부팅
단일 사용자 모드
응급 부팅 플로피

Start me up
Ah... you've got to... you've got to
Never, never never stop
Start it up
Ah... start it up, never, never, never
 You make a grown man cry,
  you make a grown man cry
(Rolling Stones)

나 일으켜 줘요
앙... 해줘요... 해줘요
절대로, 절대 절대 그만두지 말고
일으켜줘요
앙... 일으켜줘요, 진짜루, 진짜루, 진짜루
다큰 사람 울리지 말구.
다큰 사람 울리지 말구
(롤링 스톤즈 : 미국의 록 그룹)

여기서는 리눅스 시스템이 시작될 때와 멈춰질 때 어떤 일이 진행되는지를 설명할 것이며, 또한 그것이 제대로 진행되려면 어찌 해야하는지에 대해서도 알아볼 것이다. 만일, 이 때 적절한 과정이 수행되지 못한다면, 파일들이 손상을 입거나 지워질 수도 있다.

부팅과 셧다운 과정의 개괄

컴퓨터 시스템에 전원을 넣고 운영체제를 불러들이는 과정 [1] 을 가리켜 부팅(booting)이라고 한다. 이 용어는 컴퓨터가 남의 도움없이 스스로 신발끈(bootstrap)을 질끈 동여매고 일어서는 모습을 연상시키는데, 사실 실제과정이 이렇게 단순하지는 않다.

신발을 신고 일어서기 위해선 우선 신발끈을 동여매야 하듯이, 운영체제가 부팅을 하기 위해선 우선 부트스트래핑(bootstrapping) 과정을 거쳐야 한다. 우선 컴퓨터는 부트스트랩 로더(bootstrap loader)라는 작은 기계어 코드를 불러들이게 되는 데, 이 프로그램은 다시 운영체제를 불러들여서 그것을 시동시킨다. 바로 이 과정이 부트스트래핑이며, 부트스트랩 로더는 보통 하드디스크나 플로피의 특정 영역에 위치하고 있다. 이런 두 단계의 과정을 거치는 이유는 컴퓨터가 맨처음 읽어들일 수 있는 코드의 크기에 제한이 있기 때문이다(대략 몇백 바이트 정도). 만일 크고 복잡한 운영체제를 바로 읽어들일 수 있도록 하려면, 펌웨어를 괜히 복잡하게 만들어야만 할 것이다.

이런 부트스트래핑 과정은 컴퓨터의 종류에 따라 다 다르다. PC의 경우, 컴퓨터(BIOS)는 플로피나 하드디스크의 섹터(boot sector라고도 함)를 읽어들이게 되어 있으며, 이곳에 바로 부트스트랩 로더가 들어 있다. 불려진 부트스트랩 로더는 디스크의 다른 부분에서 운영체제를 읽어들이게 된다.(디스크말고 다른 곳에서 운영체제를 불러들일 수도 있다.)

일단 리눅스가 불려지게 되면 우선 하드웨어와 장치 드라이버들이 초기화되며, 그 다음에 init가 실행된다. init는 사용자들이 로그인해 작업을 할 수 있도록 기타 다른 프로세스들을 시동시켜 준다. init에 대한 자세한 이야기는 뒤에서 하도록 하자.

리눅스 시스템을 셧다운시키기 위해서는, 먼저 모든 프로세스들에게 종료하라는 지시를 내려야한다(이 지시를 받으면, 각 프로세스들은 그들이 사용하던 파일을 닫고 기타 작업들을 깔끔히 정리하게 된다). 그 다음에는 파일시스템과 스왑 공간을 언마운트 해야 하며, 이 모든 작업이 끝나야 비로소 콘솔에 전원을 내려도 좋다는 메시지를 출력하게 된다. 만일 이런 과정이 제대로 수행되지 않는다면, 아주 끔찍한 일이 벌어질 수도 있다. 특히, 파일시스템의 버퍼 캐쉬가 제대로 비워지지 않는다면, 데이터들은 다 날아가고 파일시스템이 불안해져서 결국 못쓰게 되는 사태가 발생할 수도 있다.

Notes

[1]

초창기 컴퓨터들은 단지 전원을 켜는 것만으로는 부팅이 되지 않았고, 직접 수동으로 운영체제를 불러들여야만 했다. 또한 이 최신 유행의 장난감들은 뭐든지 혼자 힘으로 해내야만 했다.