(파티션 부팅 mbr 구글 검색어)
시스템 관리자의 쉼터, 커피닉스 > 리눅스 부팅 과정 I - MBR 과 부팅로더의 관계
1. 첫째, MBR 과 부팅로더의 관계 (멀티 부팅 이해와 부팅 과정 이해를 위한)
MBR (Master Boot Reco) : MBR이란 하드디스크로 부팅하기위한 정보와 파티션 분할 정보 부팅에 사용되는 실제 파티션 (ACTIVE PARTITION)에 대한 정보가 저장된 곳으로 하드디스크의 제일 바깥쪽에 위치한 공간으로(절대섹터0(Cylinder 0, Head 0, Sector 1), 크기:1sector(512byte)) 하드 디스크로 들어오는 관문이 되는 곳이다.
--> 이해하기 쉽도록,
1. 하드 디스크의 첫번째 정보 저장공간에 저장되어 있다.(첫번째 sector)
2. 이 첫번째 sector는 512Byte 이며, 512바이트중에서 처음 446바이트는
운영체제를 읽어들이기 위한 준비단계 코드가 들어 있으며 나머지 64바이트가
파티션에 대한 정보를 들어 있다. 2바이트는 MBR이 맞는지 확인하기 값으로
기록되어 있습니다. 446 + 64 + 2 = 512 .
< ****** 개념적인 내용이 아닌, 목적에 맞춰 이해도를 높이겠다. ****************>
MBR은 메모리에 적재될 운영체계 가 저장되어 있는 파티션의 부트 섹터 레코드 읽어 들일수 있는 프로그램을 가지고 있다. (446Byte - 로더 프로그램)
컴퓨터가 켜진다. -> ROM의 BIOS가 로딩된다. -> 디스크의 첫번째 sector (MBR)이 로딩 -> 운영체제가 있는 파티션의 부트 섹터 로딩 -> 운영체제 나머지 로딩
"디스크의 첫번째 sector (MBR)이 로딩 -> 운영체제가 있는 파티션의 부트 섹터 레코드를 로딩" 부분을 쉽게 풀이하면(lilo 나 grub 를 통한 멀티 부팅 연상) 446바이트에 "lilo 혹은 grub"가 설치되어있다고 간단하게 생각해주면 된다.
64Byte에 파티션이 어떻게 나누어져 있는지 명시해주는 파티션 테이블이 존재하는것이다. 여기서 추가적인 내용을 적어 주면, 파티션 테이블은 주파티션은 4개 밖에 생성이 되지 않는다는 말을 들었을것이다. "왜 4개인가?"라는 의문점을 가졌을텐데, 파티션테이블을 구성하기 위해서는 16Byte 가 필요하기 때문이다. 어떠한 내용들이 들어 있는지는 http://wiki.kldp.org" 에서 "파티션" 이라고 검색하기 바란다. 물론, 하나의 주 파티션을 나눠서 논리적인 파티션 구성이 가능하다. 즉, 4개이상의 파티션 구성이 가능하다는것이다.
2Byte는 얘가 MBR 맞아요!! 라고 말하는거라 보시면 됩니다.
* 정리 : 컴퓨터가 켜지면, MBR을 읽고, 운영체제가 설치된 파티션을 확인하여, 부트 로더를 로딩하고, 부트 로더는 나머지 운영체제 로딩한다. 어렵게 생각할거 없다.
Active 한 파티션(운영체제가 설치된 파티션)을 찾기 위해 MBR을 로딩하고, 운영체제를 로딩하기 위해 부트 로더를 로딩하고, 부트 로더에서는 운영체제를 순서에 맞게 올리기 위해 다음 코드를 찾는거 뿐이다. 길게 이런 내용을 적은것은 필자가 한번도 해보지 못했던 멀티 부팅에 대한 이해를 하기 위해서 이다.
## 글에서는 MBR(Master Boot Record)의 로더 프로그램과 와 Boot Sector 로더 프로그램을 별개의 것으로 취급 했지만, 동일한 내용이다. 단지, 어디에 위치해 있느냐의 문제로 생각해주면 된다. 리눅스 설치시 MBR에 lilo를 설치할 것인가? 파티션의 Boot Sector에 설치할것인가? 묻는 질문이 있을것이다. lilo 혹은 grub는 부팅로더를 로딩해주기도 하지만, 직접 운영체제를 로딩해주기도 한다. (http://pec.etri.re.kr/~qkim/BootingProcess11.pdf 이 부분을 읽어준다면, 하려는 말을 이해하는데 많은 도움이 될것이다. 아니 하려는 말 전부가 들어 있다.)
## 멀티 부팅 이해를 위한 간략한 설명
먼저, MBR의 구조를 생각해줘야한다.
MBR은 위의 설명 처럼 1. 로더 프로그램(로더 코드) 2. 파티션 테이블 3. 2byte의 매직 넘버 로 이루어져 있다. http://coffeenix.net/doc/misc/BootingProcess11.pdf ;를 보면 그림이 있기 때문에 이해하는데는 아무런 지장이 없을것이다. 위의 문서에서 MS-DOS 의 boot sector 와 linux 의 boot sector 를 그림으로 표현해주고 있는데, 사실 위 문서 내용이 전부이다. 막상 설명을 하려고 하니, 위의 문서의 반복일거 같아 http://coffeenix.net/doc/misc/BootingProcess11.pdf 를 강조하는 선에서 끝내는게 나을거 같다.
갑자기 적을 말이 없어졌다. 추가적으로 "fdisk /mbr" 에 대해서 적겠다.
fdisk /mbr 하면 MBR를 삭제 한다고 하여, 512 Byte의 전체를 삭제한다고 생각하고 있었다. 필자는 단순하게 그렇게 생각했었다. 한번더 멀티 부팅을 해본적이 없었기 때문이다.
fdisk /mbr 은 446Byte 즉, 로더 프로그램을 삭제하는것이다. 파티션 테이블에는 영향이 없는것이다. 물론 아에 날려버릴수도 있다. 리눅스 상에서 #dd command를 사용하여 512 Byte를 덮어 씌우면 되는 문제이니 말이다. 그럼 실절적인 도움이 되는 MBR에 위치한 lilo 를 삭제/복구 하는 방법을 간단하게 적어 보겠다.
삭제
1. dos 상에서의 fdisk /mbr
2, linux 상에서의 # /sbin/lilo -u /dev/hda
-> -u device 는 삭제 명령이다.
3. dd if=/dev/null of=/dev/hda bs=446 count=1 <-- 가물 가물해요. 이 부분을 버려주시길..
-> 기억이 가물하다. "/dev/null" 비어 있는, 없는 이란 개념으로 생각해주면 된다. 애당초 존재하지 않지만, 존재하는 공간으로 보면된다. 없다는 의미가 맞겠다. 예를 들어 # cp /dev/null /var/messages 를 해주면, /var/messages 의 크기는 0 이 된다. 그렇다고 /dev/null 이 빈화일과 같다고 생각하면 안 된다. 없는 공간이기 때문이다. 없는 개념이기 때문이다 사실 파일도 아니다. 뭐가 다른가 하면, 빈 파일에는 엄연히 공간이란게 존재하고, 존재하는 파일 이기때문에 어떠한 값들을 쓸수 있지만, /dev/null은 어떠한 값들도 매겨질수 없다. 예를 들어 # ls -al > /dev/null 과 # ls -al > /test/binfile 은 엄연히 틀리는것이다. # ls -al > /dev/null 에는 어떠한 값도 남겨지지 않는다. 하지만, # ls -al > /test/binfile 에는 ls -al 의 출력 값이 남는다.
* /dev/null 에 대해 간단히 정리 하면, 가상 디바이스이며, 물리적으로 존재하지 않고, 자체적으로 무언가를 하지 않는 가상 디바이스이다. 즉, 비어 있는, 존재치 않은 디바이스인것이다. 이 디바이스는 특정 화일의 크기를 0 으로 만들때, 혹은 특정 프로그램의 출력 값을 화면상에 출력되지 않고, 없애고 싶을때 사용한다.
크기 '0' 만들때 # cp -f /dev/null /var/messages
출력 값을 없앨때 # a.out > /dev/null 2> /dev/null
복구
1. # dd if=/boot/boot.b of=/dev/hda bs=446 count=1
- lilo 생성시 default 로 /boot/boot.b 백업 파일을 생성한다.
2. # /sbin/lilo
* grub 를 많이들 사용한다. grub 복구도 어렵지는 않다. root 권한 획득 하여(부팅 디스크나 리눅스 씨디의 rescue mode(복구모드) 이용) # /sbin/grub 로 grub 프롬프트를 띄운후
-> root (hd0,1)
-> install (hd0,1)/grub/stage1 d (hd0) (hd0,1)/grub/stage2 p (hd0,1)/grub/menu.lst
를 사용하여 복구 할수 있다. 단, 여기서 /boot 첫번째 하드의 두번째 파티션(hd0,1)에 위치해 있다는 가정에서 이다. 다른곳에 위치해 있다면 이 부분만 바꾸어주면 된다.
'studying' 카테고리의 다른 글
활성파티션 (0) | 2012.04.29 |
---|---|
Partition (0) | 2011.05.07 |
Python network programming (0) | 2009.12.10 |
절차적 프로그램 / 객체지향 프로그램 (0) | 2009.12.04 |
우클릭 팝업 메뉴에 파일 만들기 기능 만들기 (0) | 2009.12.04 |