[시스템] grub bootloader 사용하기

grub는 grand unified bootloader의 약자로 GNU에서 개발하고 있는 부트로더

입니다. 원래 hurd(GNU에서 개발하고 있는 커널)용이었지만 다른 GNU유틸리티와

마찬가지로 다른 OS에서도 사용할수 있습니다.

저같은 경우에는 현재 파일시스템을 전부 ext2에서 reiserfs로 전환하여 사용하고

있고 reiser로 전환한후에 lilo가 먹통이 되는(선택프롬프트가 안뜨고 바로 리눅스

커널 이미지를 읽어버리더군요) 현상이 있어서 lilo를 지우고 loadlin으로 리눅스

를 부팅하는 가련한 방법을(-.-)사용하고 있었습니다.

grub로 바꿀까는 생각은 전부터 있었지만 reiserfs를 지원하지 않아서 미루다가

며칠전 0.5.95버젼이 나오면서 reiserfs를 지원하기 시작하길래 바로 설치 하였습니다.

grub는 lilo가 bios의 정보는 완전히 무시하는 것에 비해 바이오스 정보를 그대로 사용합니다.

먼저 grub는 하드디스크 인식을 다음과 같이 인식합니다.

hd0(0,1,2,3,…) -> hda(1,2,3,4,…)

hd1(0,1,2,3,…) -> hdb(1,2,3,4,…)

이런식이죠.. 주의 할것은 hd0은 무조건 hda가 아니라 시스템이 인식하는 첫번째

하드디스크 입니다. sda가 hd0이 될수도 있다는 야그죠. 그리고 파티션 번호는

1번부터 시작하는것이 아니라 0번부터 시작합니다. 이것만 주의하면 사용하기 편

하실 것입니다.

먼저 grub를 얻을수 있는곳은 ftp://alpha.gnu.org/gnu/grub 에서 얻을수 있습니다.

제일 최근 버젼은 0.5.95입니다.

먼저 파일을 풀고 컴파일 설정을 한다음 컴파일을 합니다.

tar xvzf grub-0.5.95.tar.gz

$cd grub-0.5.95

$./configure –prefix=/usr –나머지 설정 (설정을 보고 싶으면 ./configure –help)

$make all install

하면 컴파일부터 설치까지 끝납니다.

그다음에는 /usr/share/grub/i386-pc/ 디렉에 있는 파일들을 /boot/gurb 디렉토리에

복사를 합니다.

$mkdir -p /boot/grub

$cp -r /usr/share/grub/i386-pc/* /boot/grub/

다음엔 grub를 심습니다.

먼저 grub를 실행하면 grub쉘로 들어가게 됩니다.

GRUB version 0.5.95 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB

lists possible command completions. Anywhere else TAB lists the possible

completions of a device/filename. ]

grub>

저는 hda5 파티션이 리눅스 루트 파티션입니다. 그래서 다음과 같은 명령으로 grub를

설치합니다.

grub> install (hd0,4)/boot/grub/stage1 (hd0) (hd0,4)/boot/grub/stage2 0x8000 p

(hd0,4)는 hda5를 가르키는 거고 /boot/grub/stage[12]는 grub이미지를 (hd0)은

grub가 설치될 파티션을 가르키는 겁니다.

한꺼번에 치기 힘드시면 tab키를 누르면 bash의 명령어 완성기능처럼 목록들을 보여줍니다.

grub> install (hd0,

Possible partitions are:

Partition num: 0, Filesystem type is fat, partition type 0xb

Partition num: 4, Filesystem type is reiserfs, partition type 0x83

Partition num: 5, Filesystem type is reiserfs, partition type 0x83

Partition num: 6, Filesystem type is reiserfs, partition type 0x83

Partition num: 7, Filesystem type is fat, partition type 0xb

Partition num: 8, Filesystem type unknown, partition type 0x83

이런식으루 말이죠. 물론 파일과 명령어도 마찬가지 입니다.

설치가 끝나면 메뉴 파일을 편집하여야 합니다. 메뉴 파일은 아까전에

/usr/share/grub/i386-pc/에 복사한 menu.lst라는 파일이며 아까전에 복사했으니

/boot/grub디렉토리에 있을것입니다.

이것은 예제 파일이므로 사용자가 적당히 고쳐야 합니다. 편집할것은 파티션 문제

정도 밖에 되지 않기 때문에 앞에 설명한대로만 고쳐주면 작동 합니다.

제대로 설정하고 나서 다시 grub 쉘로 들어간다음 메뉴파일을 로딩하여 봅니다.

$grub

GRUB version 0.5.95 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB

lists possible command completions. Anywhere else TAB lists the possible

completions of a device/filename. ]

grub> configfile=(hd0,4)/boot/grub/menu.lst

GRUB version 0.5.95 (640K lower / 3072K upper memory)

ejjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjd

q GNU/Linux q

q GNU/Linux Safe-mode q

q GNU/Linux old q

q Windows 98 boot menu q

q Install GRUB into the hard disk q

q Change the colors q

q q

q q

q q

q q

fjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjc

Use the up and down arrows to select which entry is highlighted.

Press enter to boot the selected OS, \\’e\\’ to edit the

commands before booting, or \\’c\\’ for a command-line.

The highlighted entry will be booted automatically in 30 seconds.

다음과 같은 화면이 뜨며 실제 부팅될때 뜨는 화면 입니다.

그리고 아래와 같은 키를 사용할수 있으며 만약 설정이 잘못되어 있더라도 즉석에서

바꿀수도 있습니다. (e키 사용) 하지만 저장은 되지 않습니다.

그리고 c키를 이용하여서 grub쉘로도 들어갈수 있습니다.

부가적인 기능으로는 diskless부트, 네트웍 부트 기능도 갖추고 있습니다.

lilo와는 달리 bios의 정보에 의존하므로 1024실린더 제한같은것은 원천적으로 없으며

메뉴및 커맨드라인 인터페이스를 가지고 있으므로 사용자 입맞에 맞게 설정할수

있습니다.

관심있으신분은 설치해보십시오.. (다른것과 마찬가지로 처음부터 된다는 보장은

없으니.. 백업은 필수! -.-)

ps1. reiserfs에서 심벌릭 링크파일은 인식하지 않습니다.

보통 커널 이미지가 /boot/vmlinuz-커널 버젼 으로 되어 있고 이것이

/boot/vmlinuz 로 링크되어 있을것입니다. ext2에서는 상관이 없는데

reiserfs에서는 제대로 인식이 안되더군요. reiserfs를 사용할때는 버젼

이름까지 다 적어주십시오.

ps2. grub는 lilo와 다르게 커널이 바뀔때마다 심어줄 필요는 없습니다.

grub가 파일시스템을 직접 억세스해서 커널이미지를 읽기 때문이죠.

=============================================================

긴급시 grub 으로 부팅을 시키는 과정입니다.

grub >

먼저 root 지정을 해 줍니다.

grub > root (hd0,0)            

-> 실제 /boot 파티션의 위치를 지정한다. 만일 별도의 /boot 파티션

이 없는 경우에는 /  위치를 지정합니다.

grub > kernel  /vmlinuz-2.4.20-8smp   ro   root=/dev/sda2

->  실제 / 파티션 위치를 적어 줍니다.

grub > initrd  /initrd-2.4.20-8smp.img

-> SCSI 하드인 경우 initrd 이미지가 없으면 하드 인식을 못함.

grub > boot

하면 부팅 됩니다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

2 Responses

  1. 2022년 6월 21일

    2penknife

  2. 2023년 1월 26일

    2essential

페이스북/트위트/구글 계정으로 댓글 가능합니다.