이 글은 본인이 이틀간 시행착오를 거치며 지인들의 도움을 받아 설정하게 된 내용을 정리한 것입니다. Debian에 기초해 작성되었으며 다른 배포본을 사용하는 경우 직접 컴파일을 해주거나 해당 패키지를 설치해 주어야 합니다.
Grub(Grand Unified Bootloader)의 정확한 명칭은 GNU Grub 입니다. GNU Grub는 무료 부트 로더로서 다양한 파일 시스템을 지원해 줍니다. GNU Grub는 OS의 커널을 직접 읽어 들이기 때문에 Linux의 LILO 1024실린더 제한을 해결할 수 있습니다.(LILO 최신 버전은 이 문제가 해결되었음) 따라서 8G가 넘는 partition에도 Linux를 설치할 수 있으며, 기타 다양한 운영체제를 사용할 수 있습니다..
또, GNU Grub 부팅 디스크를 작성해 놓으면 MBR 손상으로 인한 운영체제 기동 실패시 이를 복구 할 수 있는 매우 유연한 부트관리자 입니다. GNU Grub는 이러한 장점으로 몇몇 배포본에 LILO를 대신해 표준 Bootloader로 채용되었습니다. 자세한 사항은 아래 링크에서 확인하시기 바랍니다.
http://www.gnu.org/software/grub/grub.en.html → Grub에 대한 간략한 설명이 있음.
ftp://alpha.gnu.org/gnu/grub/ a Grub → 소스 아카이브.
그외 부트매니저로 여러가지가 있으나 대부분 상용 소프트웨어이므로 재정적인 능력이 있다면 보다 편리한 상용 패키지를 구입하기 바랍니다.
1. 설치. Debian(potato) 기준
Debian의 apt, dselect를 사용하여 Grub 패키지를 설치하여야 합니다.
# apt-get install Grub
실행하면 Grub 패키지가 설치되며 이때 설치되는 것이 본인의 경우 Ver. 0.5.93 이었습니다. 처음에 이것을 가지고 설정을 끝낸 후 grub-install /dev/hda를 실시했으나 해당 commamd를 찾지 못한다면서 실패를 했습니다.
따라서 상위 버전인 Ver. 0.5.95 이상을 사용하시기 바랍니다. 저는 Ver. 0.90 을 사용했습니다.
제가 실행한 방법은 먼저 0.5.93을 설치했기 때문에 제거하기 전에 /boot/grub 폴더를 만들어 주고, 파일 시스템을 사용하기 위해 해당 파일(stage1, stage2, e2fs_stage1_5)과 menu.lst를 복사했습니다. 그 후, 0.5.93 버전을 제거했습니다.
# mkdir /boot/grub
# cp /usr/share/grub/i386-pc/* /boot/grub
# cp /usr/share/doc/grub/menu.lst /boot/grub
# apt-get remove grub
--> ver. 0.90의 경우 menu.lst 의 경로가 /usr/doc/grub/example/menu.lst 입니다. 파일시스템 관련 파일은 아지 찾지 못하였습니다. 찾는 데로 수정해서 올리겠습니다.
한가지 주의할 점은 이 파일 위치가 버전에 따라 각각 틀리므로 주의 해야 합니다. 예로 Ver. 0.90 을 먼저 설치하면 위와 같이 입력해서는 안됩니다. 이때는 /usr 하위 폴더에서 해당 파일을 찾아주어야 합니다. 제 경우 시스템 파일을 찾지 못해 궁여지책으로 위와 같은 방법을 사용했습니다. 혹시 저와 같은 시행착오를 겪을 분을 위해 적어 둡니다.^^
[참고로…vi를 실행시켜 # 표시가 있는 것은 주석처리가 된 것입니다. 그리고 윗 글에 쓰인 # 은 root 계정으로 로그인을 했을 때 나타나는 프롬프트 입니다. 그냥 참고하시길…]
여기까지 했으면 다시 grub 최신 버전을 받아야 하는데, 이를 위해 apt 소스 리스트를 변경 시켜 주어야 합니다. 먼저 vi를 이용해 /etc/apt/sources.list 파일에 다음 내용을 추가하십시오.
# cd /etc/apt/
# vi sources.list
실행시키면 내용이 나옵니다. 이 내용 하단에 아래의 주소를 추가하시기 바랍니다.
deb http://http.us.debian.org/debian sid main contrib non-free
deb ftp://ftp.debian.or.kr/debian-non-US sid/non-US main contrib non-free
deb ftp://ftp.debian.or.kr/debian-kr unstable-kr main contrib non-free
그 후 패키지 업데이트와 grub 인스톨을 실시합니다.
# apt-get update
# apt-get install grub
이렇게 인스톨을 하게되면 Grub ver. 0.90 이 설치되게 됩니다.
2. 설정
이제 가장 중요한 단계인 menu.lst 편집을 보겠습니다.
Vi 를 이용해 menu.lst 를 엽니다.
# cd /boot/grub
# vi menu.lst
파일이 열리면 아래와 같은 내용이 나옵니다. ( 설명은 ---> 표시로 하겠습니다. )
#
# Sample boot menu configuration file
#
# Boor automatically after 30 secs.
Timeout 30
---> 입력대기 30초
# By default , Boot the first entry.
Default 0
---> 30초간 입력이 없으면 첫번째 쓰여진 방법으로 부팅을 함.
# Fallback to the second entry.
Fallback 1
--->첫번째 방법이 실패하면 두번째 방법으로 부팅 시도. 아래부터는 부팅을 위한 설정.
# For booting the GNU Hurd
title GNU/Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz
# For booting Linux
title GNU/Linux
root (hd1,0)
kernel /vmlinuz root=/dev/hdb1
# For booting Mach (getting kernel from floopy)
title Utah Mach4 multiboot
root (hd0,2)
pause Insert the diskette now^G!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap
# For booting FreeBSD
title FreeBSD 3.4
root (hd0,2,a)
kernel /boot/loader
# For booting OS/2
title OS/2
root (hd0,1)
makeactive
# chainload OS/2 bootloader from the first sector chainloader +1
# This is similar to “chainload”, but loads a specific file
#chainloader /boot/chain.os2
# For booting Windows NT or Windows 95
title Windows NT / Windows 95 boot menu
rootnoverify (hd0,0)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
# For installing Grub into the hard disk
title Install Grub into the hard disk
root (hd0,0)
setup (hd0)
# Change the colors.
title Chang the colors
color light-green/brown blink-red/blue
---> 메뉴의 색상 조절.
Linux와 윈도만을 듀얼 부팅 할 예정이므로 관련되지 않은 것들은 모두 지워주거나 주석처리 해줍니다.
설정하기에 앞서 partition에 대한 기본 지식이 필요하므로 이에 대해 먼저 설명을 합니다.
Hda1~4 는 기본partition에 할당되는 값이며 확장partition의 논리partition은 hda5~로 부여가 됩니다. 따라서 기본 및 확장partition을 구성하게 되면 기본partition hda1, hda2, hda3 와 논리 partition hda5~로 설정이 가능합니다.
먼저 제가 설계한 partition은 hda1에 XP, hda5에 Debian, hda6에 swap, hda7에 FAT32 데이터 영역을 두었습니다 윈도 partition과 비교하면 hda1은 c: hda5는 d: hda6은 e: 이런 식으로 나갑니다. 그러나 윈도에서는 Linux partition을 인식하지 못하므로 실제로 표기되는 윈도 partition은 hda1 c: , hda7 d: 로 나오게 됩니다.(윈도상에서의 얘기입니다.)
Grub를 이용하여 설정을 완료 하려면 Grub에서 사용하는 디스크이름을 알아야 합니다.
Grub에서는 하드디스크의 순서대로 (hd0), (hd1), (hd2) … 이런 식으로 이름을 가리키며 partition 역시 순서대로 (hd0,0), (hd0,1),…의 순으로 0 부터 시작해서 이름을 매깁니다. 따라서 제가 구성한 partition을 Glub식(式)으로 표기하면 hda1 ⇒ (hd0,0), hda5 ⇒ (hd0,4) 이런 식으로 작성이 됩니다.
#
# Sample boot menu configuration file
#
# Boor automatically after 30 secs.
timeout 30
# By default , Boot the first entry.
default 0
# Fallback to the second entry.
fallback 1
# For booting Linux
title GNU/Linux Debian
root (hd0,4)
kernel /boot/vmlinuz-2.2.19pre17 root=/dev/hdb5
# For booting Windows NT or Windows 95
title Windows NT / Windows 95 boot menu
rootnoverify (hd0,0)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
# Change the colors.
title Chang the colors
color light-gray/black red/blue
윈도의 경우 별다른 설정을 해줄 필요가 없습니다. 그러나 Linux의 경우 커널 위치를 정확히 기재해 주어야 합니다. 그렇지 않으면 부팅이 되지 않습니다.
만약 사용자가 /boot partition을 따로 잡아서 사용할 경우는 설정을 /vmlinuz-2.x.x 식으로 이름을 명기해야 합니다. 이제 편집은 끝이 났습니다. Vi 에디터를 이용해 저장하고 나와서 grub-install /dev/hda 를 실행 시킵니다.
3. 마치며…
지금까지 Grub의 설정에 대해서 알아 보았습니다. Grub를 이용하면 별다른 어려움 없이 쉽게 멀티 부팅을 이용할 수 있습니다. 물론 Linux를 설치 해야 한다는 부담이 있을 수도 있으나 Linux 설치가 어려운 것은 아니므로(설치가 아니라 설정이 어려움^^) lilo나 Bootloader에 만족하지 못하거나 보다 안정적인 멀티부트관리를 하고 싶은 분들은 한번 사용해보는 것도 좋을 듯 싶습니다. Grub에서는 바이오스에서 인식하는 모든 장치에 접근할 수 있고 ext2, ReiserFS, Minix, BSD FFS, FAT, FAT32 등 다양한 파일시스템을 지원하므로 다른 운영체제를 추가할 때도 별 어려움 없이 설정 하실 수 있습니다.