본문 바로가기

Linux and Unix

멀티부팅 설정 후 부트로더가 삭제되었을 경우

필자의 시스템은 원래 다음과 같은 파티션 구조를 가지고 있다.

그리고 boot loader로써 grub을 사용한다.


/dev/hda1 : 윈도우즈 XP 설치

/dev/hda2 : 윈도우즈 자료 모음


/dev/hdb1 : 리눅스의 /boot

/dev/hdb2 : 리눅스의 /

/dev/hdb3 : 리눅스의 swap

/dev/hdb4 : 리눅스의 /home


/dev/hdc1 : 리눅스의 /home/data


cdrom 으로 리눅스 시스템에 부팅하기


1. 부트 순서를 시디롬이 첫번째에 오게 한다. (bios에서 설정)

2. 리눅스 시디를 시디롬에 넣는다.

3. 리눅스 시디롬으로 부팅이 되고, boot: 라는 프롬프트가 나오면 다음과 같이 입력한다.

linux root=/dev/hdb2 initrd=

4. 부팅이 완료되고 나면, 콘솔모드로 나가라. X로 로그인 하지 말고, Ctrl+Alt+F1 을 누르면 된다.

5. 먼저 root 로 로그인을 하자. 그런다음 /boot/grub/grub.conf 파일을 vi 편집기를 이용하여 수정하자.

# vi /boot/grub/grub.conf 를 실행하면 아래와 비슷하게 되어 있을 것이다. 다른 부분이 있더라도 신경쓰지 말자.


default=0

timeout=10

splashimage=(hd1,0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-8)

........root (hd1,0)

........kernel /vmlinuz-2.4.20-8 ro root=LABEL=/

........initrd /initrd-2.4.20-8.img


위와 같이 된 것을 확인했다면 그 아래쪽에 아래와 같이 적어보자.


title WinDogs XP <---- grub 화면에 보여줄 제목

........rootnoverify (hd0,0) <---- 이 부분 주의

........makeactive

........chainloader +1


완전히 다 적고 나면.. 다음과 같은 모양이 될 것이다.


default=0

timeout=10

splashimage=(hd1,0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-8)

........root (hd1,0)

........kernel /vmlinuz-2.4.20-8 ro root=LABEL=/

........initrd /initrd-2.4.20-8.img

title WinDogs XP

........rootnoverify (hd0,0)

........makeactive

........chainloader +1


위의 이 부분 주의 라고 된 것은 xp가 첫번째 하드 디스크에 설치되었을 경우를 말한다. 두번째 하드디스크에 설치 되었을 경우에는 rootnoverify (hd1,0) 라고 적어야 한다. 하드 디스크의 파티션도 생각해야겠지만.. 윈도우즈는 거의 대부분 하드디스크이 첫번째 파티션에 설치하므로 이렇게만 해도 거의 대부분이 해결 된다. rootnoveverify 에 대해서는 아래에서 설명하겠다.


6. root 로 로그인을 하라. 그리고 나서 다음 명령을 내려라.

# grub-install /dev/hda <---- grub을 부트로더로 사용할 경우, 첫번째 하드디스크의 MBR에 설치

# grub-install /dev/hdb <---- grub을 부트로더로 사용할 경우, 두번째 하드디스크의 MBR에 설치, 멀티부팅 안됨

# grub-install /dev/hdb1 <---- grub을 부트로더로 사용할 경우, 두번째 하드디스크의 첫번째 파티션에 설치, 멀티부팅 안됨


이렇게 명령하면 다음과 같은 내용을 볼수 있을 것이다.

Installation finished. No error reported.

This is the contents of the device map /boot/grub/device.map.

Check if this is correct or not. If any of the lines is incorrect,

fix it and re-run the script `grub-install'.


# this device map was generated by anaconda

(fd0) /dev/fd0

(hd0) /dev/hda

(hd1) /dev/hdb


위의 첫번째 줄의 Installation finished. No error reported. 가 보인다면 성공이다.

이렇게 하고 재부팅 해보라. 멀티부팅 화면이 그대로 보일 것이다.

권장하는 명령은 첫번째 것이다.


# reboot


만약 /boot 영역을 다른 파티션으로 했고, 파일 시스템을 ext3 로 했다면 조금 문제가 있을 것이다.

이유는 /boot 영역이 마운트가 안되기 때문이다. ext3 모듈이 커널에 적재되지 않았기 때문에 부팅이 안된다.

현재 커널이 시디롬에 있는 BOOT 커널이므로, 시디에 있는 모듈을 올리면 되겠지만, 쉬운 방법으로 가자.

/boot 영역이 마운트가 되지 않으면 grub-install 명령을 내려도 소용이 없다.

그 이유는 /boot/grub/grub.conf 파일을 참고 하게 되는데 그 파일을 찾을 수 없기 때문이다.


이럴 경우에는 다음과 같이 하라.

위의 1번과 2번은 동일하다.


3. boot: 프롬프트가 나왔을때 다음과 같이 입력하고 엔터를 누른다.

boot : linux rescue

Choose a Language 라는 창이 뜨면 English 에 맞추고 엔터를 누른다.

Keyboard Type 을 선택하라는 창에서도 그냥 엔터를 누른다. 시간이 좀 걸린다.

Setup Networking 이라는 창이 뜨면, 지금은 네트웍에 연결할 목적이 아니기 때문에 No를 선택한다.

만약 Yes를 눌렀다면 자신에게 맞는 것을 입력하거나 선택하고 OK를 눌러주면 된다.

다음으로 Rescue 라는 창이 뜨면 세가지를 선택할 수 있는데..

가장 무난한 방법으로 Continue를 선택하라.

무슨 창이 하나 뜨고 나서, 또 한번의 Rescue 창이 뜰 것이다. 그 창의 내용을 보면..

원래의 시스템은 /mnt/sysimage 에 마운트 되어 있다. 만약 원래의 시스템을 / 에 두고 싶다면..

프롬프트에서 chroot /mnt/sysimage 라는 명령을 하라는 것이다. OK를 누르면 프롬프트가 뜰 것이다.


4. 프롬프트 상태에서 다음과 같이 입력한다.

# chroot /mnt/sysimage

이제 이전의 시스템과 동일하게 디렉토리 구조가 바뀌었을 것이다.

여기서 한번더 확인하자. /boot/grub/grub.conf 파일이 있는가?

있다면, grub.conf 파일을 수정하자. 여기서는 기본적으로 root로 로그인 된다.


5. 그런 다음 /boot/grub/grub.conf 파일을 vi 편집기를 이용하여 수정하자.

# vi /boot/grub/grub.conf 를 실행하면 아래와 비슷하게 되어 있을 것이다. 다른 부분이 있더라도 신경쓰지 말자.


default=0

timeout=10

splashimage=(hd1,0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-8)

........root (hd1,0)

........kernel /vmlinuz-2.4.20-8 ro root=LABEL=/

........initrd /initrd-2.4.20-8.img


위와 같이 된 것을 확인했다면 그 아래쪽에 아래와 같이 적어보자.


title WinDogs XP <---- grub 화면에 보여줄 제목, 다른 제목을 적어도 상관없다.

........rootnoverify (hd0,0) <---- 이 부분 주의

........makeactive

........chainloader +1


완전히 다 적고 나면.. 다음과 같은 모양이 될 것이다.


default=0

timeout=10

splashimage=(hd1,0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-8)

........root (hd1,0)

........kernel /vmlinuz-2.4.20-8 ro root=LABEL=/

........initrd /initrd-2.4.20-8.img

title WinDogs XP

........rootnoverify (hd0,0)

........makeactive

........chainloader +1


위의 이 부분 주의 라고 된 것은 xp가 첫번째 하드 디스크에 설치되었을 경우를 말한다. 두번째 하드디스크에 설치 되었을 경우에는 rootnoverify (hd1,0) 라고 적어야 한다. 하드 디스크의 파티션도 생각해야겠지만.. 윈도우즈는 거의 대부분 하드디스크이 첫번째 파티션에 설치하므로 이렇게만 해도 거의 대부분이 해결 된다. rootnoverify 에 대해서는 아래에서 설명하겠다.


6. root 로 로그인을 하라. 그리고 나서 다음 명령을 내려라.

# grub-install /dev/hda <---- grub을 부트로더로 사용할 경우, 첫번째 하드디스크의 MBR에 설치

# grub-install /dev/hdb <---- grub을 부트로더로 사용할 경우, 두번째 하드디스크의 MBR에 설치, 멀티부팅 안됨

# grub-install /dev/hdb1 <---- grub을 부트로더로 사용할 경우, 두번째 하드디스크의 첫번째 파티션에 설치, 멀티부팅 안됨


이렇게 명령하면 다음과 같은 내용을 볼수 있을 것이다.

Installation finished. No error reported.

This is the contents of the device map /boot/grub/device.map.

Check if this is correct or not. If any of the lines is incorrect,

fix it and re-run the script `grub-install'.


# this device map was generated by anaconda

(fd0) /dev/fd0

(hd0) /dev/hda

(hd1) /dev/hdb


위의 첫번째 줄의 Installation finished. No error reported. 가 보인다면 성공이다.

이렇게 하고 재부팅 해보라. 멀티부팅 화면이 그대로 보일 것이다. 권장하는 명령은 첫번째 것이다.


# reboot


이제 rootnoverify에 대해서 설명하기 전에 root 옵션에 대해서 먼저 설명하겠다.

root (hd1,0)

리눅스 커널이 위치하고 있는 파티션으로, “root”는 해당 파티션을 현재 GRUB의 루트 디바이스로 지정하는 명령어이다. 루트 디바이스로 지정된 파티션은 GRUB에 의해 마운트되서 해당 파티션에 있는 파일들을 읽어들일 수 있게 된다. 대부분의 경우 리눅스 루트 파티션이 이에 해당할 것이다. 필자의 경우 hdb1을 GRUB에서 인식할 수 있는 루트 파티션으로 사용하고 있으므로 (hd1,0)라고 적어주었다.


rootnoverify

“root”와 비슷하지만 해당 파티션을 마운트하지 않는다. NTFS 파티션처럼 GRUB이 인식할 수 없는 파티션을 루트 디바이스로 지정할 때 사용된다.

위와 같이 rootnoverify (hd0,0) 이라고 하면, 첫번째 하드 디스크의 첫번째 파티션을 root 처럼 인식하게 된다.

만약 첫번째 파티션의 두번째 디스크를 할당하고 싶다면 rootnoverify (hd0,1)이라고 해야 한다.

다음을 보면 조금은 이해가 될 것이다.

hda1 => (hd0,0)

hda2 => (hd0,1)

hdb3 => (hd1,2)

hdb4 => (hd1,3)


makeactive

GRUB의 루트 디바이스를 부팅 가능한 파티션으로 지정한다. “makeactive” 명령어는 첫 번째 하드디스크의 프라이머리(Primary) 파티션에서만 사용할 수 있다. 하지만 사용하지 않아도 무방하다.


chainloader +1

“chainloader +1”은 “makeactive” 명령으로 부팅 가능하도록 지정된 파티션의 첫 번째 섹터부터 읽어들이기 시작해 부팅을 시작하도록 하라는 뜻이다. “makeactive” 명령이나 “chainloader +1” 명령의 경우 특별한 일이 없다면 편집할 필요가 없을 것이다. 윈도우로 부팅하는 메뉴를 만들고 싶다면 위에서 단지 “rootnoverify (hd0,0)” 부분을 윈도우가 설치되어 있는 파티션으로 변경해 주며 된다.