[RHEL6] 부트로더 명령어(grub, grub-install, grub-mkconfig)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 부트로더 명령어(grub, grub-install, grub-mkconfig)

by 찬찬이 아빠 2020. 2. 5.
반응형
  1. grub(GRUB 명령쉘)

 1) 경로 : /usr/sbin/grub

 2) 요약 : GRUB 부트로더 명령어

 3) 사용 방법 : grub [옵션]

 4) 옵션

 --batch : 비대화형 모드로 실행하기 위해 배치 모드를 킴. grub --no-config-file --no-curses --no-pager와 같음

 --boot-drive=DRIVE : 스테이지 2 부트 드라이브를 지정(기본값=0x0)

 --config-file=FILE : S 스테이지 2 설정 파일을 지정(기본값=/boot/grub.menu.lst)

 --device-map=FILE : 디바이스 맵 파일(FILE)을 지정

 --help : 도움말을 출력

 --hold : 디버거가 연결될 때까지 대기

 --install-partition=PAR  : 스테이지 2의 인스톨 파티션을 지정(기본값=0x20000)

 --no-config-file : 설정 파일을 사용하지 않음

 --no-curses : 커서를 사용하지 않음

 --no-floppy : 플로피 디스크를 찾지 않음

 --no-pager : 내부 페이저를 사용하지 않음

 --preset-menu : 프리셋(preset) 메뉴를 사용. 예를 들어 사용자 시스템에 콘솔이 없고, 시리얼로만 메시지를 보려고 설정하는 경우 사용할 수 있음. 이 옵션을 사용하려면 GRUB를 --enable-preset-menu=file 옵션으로 컴파일해야 함

 --probe-second-floppy : 두 번째 플로피 드라이브를 찾음

 --read-only : 디바이스에 아무 것도 쓰지 않는 읽기 모드로 실행

 --verbose : 상세한 메시지를 보여줌

 --version : 버전 정보를 출력

 

 5) 추가 설명

GRUB 부트로더는 GRand Unified Bootloader의 약자로 리눅스 이외에 또 다른 OS도 로딩할 수 있습니다. GRUB는 현재 lilo를 대신하여 대부분의 리눅스 배포판에서 기본으로 사용하고 있습니다. 아래는 GRUB 명령어를 사용하기 앞서 미리 알고 있어야 할 내용들입니다. 먼저, GRUB에서 사용하는 디바이스 이름은 시스템에서 사용하는 디바이스 이름과 조금 다릅니다. 다음은 시스템 디바이스 이름을 GRUB 디바이스 이름에 일대일로 매칭한 표입니다.

시스템에서 사용하는 디바이스 이름 GRUB에서 사용하는 디바이스 이름
/dev/hda (hd0)
/dev/hda1 (hd0,0)
/dev/hda2 (hd0,1)
/dev/hdb (hd1)
/dev/hdb1 (hd1,0)
/dev/hdb2 (hd1,1)

 

GRUB는 2단계 혹은 3단계를 거쳐 OS를 로딩합니다. 아래는 단계별로 스테이지 1, 스테이지 1.5 스테이지 2로 나누어 설명합니다.

 

스테이지 설명
1 GRUB가 MBR이나 다른 파티션이나 드라이브의 부트 섹터에 존재하는 단계입니다. GRUB의 주된 운영이 부트 섹터의 512 byte에 한정되어 있기 때문에 스테이지 1은 다음 단계인 스테이지 1.5나 스테이지 2로 운영권을 넘깁니다.
1.5 이 단계는 하드웨어 요구사항이 있는 경우에만 스테이지 1에서 로딩됩니다. 스테이지 1.5에는 파일 시스템 고유 특성이 있습니다. 이 말은 GRUB가 로딩할 수 있는 각자의 파일 시스템을 위한 다른 버전이 있다는 뜻으로, 예를 들어 e2fs_stage1_5, fat_stage1_5와 같이 버전 정보가 파일명에 포함됩니다. 스테이지 1.5는 스테이지 2를 로딩합니다.
2 GRUB의 메인 코드를 실행합니다. menu를 보여주고 사용자가 OS를 선택하게 하고, 선택한 시스템으로 시작하는 단계입니다.

 

시스템에 있는 stage1, stage2, e2fs_stage1_5 파일을 file 명령어로 살펴봅니다.

$ cd /usr/lib/grub/i386-pc
$ ls
e2fs_stage1_5  jfs_stage1_5  reiserfs_stage1_5  stage2   xfs_stage1_5
fat_stage1_5  minix_stage1_5  stage1  stage2_eltorito

 file stage1
 stage1: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, code offset 0x48
 
 $ file stage2
 stage2: GRand Unfied Bootloader stage2 version 3.2, identifier 0x0, GRUB version 0.97, configuration file /boot/grub/menu.lst
 
 $ file e2fs_stage1_5
 e2fs_stage1_5: GRand Unified Bootloader stage1_5 version 3.2, identifier 0x2, GRUB version 0.97, configuration file /boot/grub/stage2

 

이제 grub 명령어를 실행해 봅니다. 아무 인자도 지정하지 않고 grub 명령어를 실행하면 아래와 같이 grub> 로 시작하는 GRUB 명령행으로 들어갑니다.

$ grub

[ 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>

 

<GRUB 명령행에서 사용하는 명령어>

아래는 grub 명령행에서 help 명령으로 확인할 수 있는 명령어들입니다. 참고로 GRUB 명령어는 설정 파일이나 명령행 모두에서 사용할 수 있습니다. 그 중 명령행과 전체 메뉴에 적용되는 명령어는 파란색으로 처리했습니다.  붉은색 명령어는 전체 메뉴 내의 각 엔트리에만 적용됩니다.

명령어 설명
blocklist FILE 지정한 파일(FILE)의 블록 리스트 표시를 보여줍니다.
boot 로딩된 OS를 체인로더로 부팅합니다. 인터랙티브 명령행 모드에서만 동작합니다.
cat FILE 지정한 파일(FILE)의 내용을 보여줍니다.
chainloader [--force] FILE 체인로더로 지정한 파일(FILE)을 로딩합니다. 만인 -force 옵션을 지정하면 부트로더 서명의 존재 여부와 상관없이 강제로 로딩합니다.
clear 화면을 클리어 합니다.
color NORMAL [HIGHLIGHT]

메뉴의 컬러를 변경합니다. NORMAL로 지정된 색은 메뉴의 대부분줄에 사용되고, HIGHLIGHT로 지정된 색은 커서가 위치하는 줄을 하이라이팅하는데 쓰입니다. 만일 HIGHLIGHT를 지정하지 않으면, NORMAL의 보색을 사용합니다.

컬러는 "FG/BG" 처럼 슬래시(/)로 구분하며 FB와 BG는 시볼릭 컬러 이름입니다. 심볼릭 컬러 이름은 반드시 block, blue, green, cyan, red, megenta, brown, light-gray, dark-gray, light-blue, light-green, light-cyan, light-red, light-magenta, yellow, white 중 하나여야 합니다. 그러나 첫 번째부터 여덟 번째까지의 이름은 BG에서 사용할 수 있습니다. 만일 깜박거리는 포그라운드 컬러를 원하면 접두사로 "blink-"를 FG에 사용할 수 있습니다.

 

예를 들어봅니다.

grub> color light-gray/blue cyan

이는 메뉴 줄에서는 포그라운드를 light-gray로 백그라운드를 blue 컬러로, 하이라이트 되는 부분에서는 포 그라운드를 blue로 백그라운드를 cyan으로 사용한다는 의미입니다.

configfile FILE

지정한 파일(FILE)을 설정 파일로 로딩합니다.

device DRIVE DEVICE

지정한 드라이버(DRIVE)를 시스템에 사용하는 디바이스(DEVICE)로 지정합니다. 이는 grub 쉘에서만 동작합니다.

displayapm

APM(advanced Power Management) 바이오스 정보를 보여줍니다.

displaymem

인스톨된 물리 메모리의 영역과 실제 시스템 어드레스 맵을 보여줍니다.

아래는 실행한 예제 입니다.

 

grub> displaymem

EISA Memory BIOS Interface is present

Address Map BIOS Interface is present

Lower memory: 640K, Upper memory (to first chipset hole): 3072K

[Address Range Descriptor entries immediately follow (values are 64-bit)]

   Usable RAM: Base Address: 0x0 X 4GB + 0x0,

   Length: 0x0 X 4GB + 0xa0000 bytes

   Reserved: Base Address: 0x0 X 4GB + 0xa0000,

   Length: 0x0 X 4GB + 0x60000 bytes

   Usable RAM: Base Address: 0x0 X 4GB + 0x100000,

   Length: 0x0 X 4GB + 0x30000 bytes

find FILENAME

모든 파티션에서 지정한 파일명(FILENAME)을 찾고, 파일이 포함되어 있는 디바이스의 리스트를 출력합니다.

geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]

지정한 DRIVE 드라이브 정보를 출력합니다.

halt [--no-apm]

"--no-apm" 옵션을 지정하지 않는 조건으로 시스템을 종료합니다. 만일 APM이 지원되면 APM 바이오스를 이용하여 전원을 끊습니다.

help[--all] [PATTERN ...]

내부 명령어에 대한 정보를 보여줍니다. "--all" 옵션이 없으면 전체 명령을 보여주지 않습니다.

hide PARTITION

파티션 타입 코드에 "hidden" 비트를 셋팅해서 지정한 파티션(PARTITION)을 숨깁니다.

initrd FILE [ARG...]

리눅스 포맷 부트 이미지인 초기 램 디스크를 파일(FILE)로 지정하여 로딩하고, 멤모리에 있는 리눅스 셋업 영역에 적절한 파라미터를 ARG로 설정합니다.

kernel [옵션] FILE[ARG...]

지정한 파일(FILE)에서 프라이머리 부트 이미지를 로딩합니다. 추가적으로 지정한 인자들은 "kernel command line"으로 전달됩니다. 참고로 module 명령언 반드시 kernel 명령어 이후에 로드해야 합니다.

 

[옵션]

 --no-mem-option : GRUB에 커널 "mem=" 옵션을 패스하지 않도록 알려줍니다.

 --type=TYPE : 로딩하는 커널의 타입을 알려줍니다. 이는 "netbsd", "freebsd", "openbsd", "linux", "biglinux", "multiboot"중 하나여야 합니다.

makeactive

root 명령으로 지정한 GRUB의 root 디바이스를 액티브 파티션으로 설정합니다.

map TO_DRIVE FROM_DRIVE

드라이브 FROM_DRIVE를 드라이브 TO_DRIVE로 매핑합니다. OS가 첫 번째 드라이브에 존재하지 않을 시 체인로딩할 때 필요합니다.

 

 

예를 들어 윈도우가 두 번째 HDD에 있다면

grub> map (hd0) (hd1)

grun> map (hd1) (hd0)

 

위와 같이 첫 번째와 두 번째 HDD를 바꿔서 윈도우를 첫 번째 드라이브인 것처럼 속여 부팅을 할 수 있습니다.

md5crypt

MD5 포맴ㅅ으로 패스워드를 생성합니다. 아래와 같이 MD5로 생성된 패스워드를 conf 파일에 설정할 수있습니다.

 

grub> md5crypt

Pssword : *****

Encrypted: $1$6trewT/rwtRTWRE43

module FILE [ARG...]

지정한 파일(FILE)을 멀티부트 포맷 부트 이미지를 위한 부트 모듈로 로딩합니다. 추가적으로 지정한 인자들은 "kernel" 명령어와 같이 "module command line"으로 전달됩니다.

modulenounzip FILE [ARG...]

자동으로 압축을 해제하지 않는 것만 ㅔ외하면 module과 같습니다.

pager [FLAG]

FLAG 인자가 없으면 페이지 모드를 on/off로 번갈아 선택합니다. 만일 FLAG가 있으면 on/off를 지정할 수 있습니다.

partnew PART TYPE START LEN

지정한 시작 주소(START), 길이(LEN), 타입(TYPE)의 프라이머리 파티션을 만듭니다. 시작 주소와 길이는 섹터 유닛(sector units)안에 있어야 합니다.

arttype PART TYPE

지정한 파티션(PART)을 제시한 타입(TYPE)으로 변경합니다.

quit

GRUB 쉘을 빠져나갑니다.

quietboot

메시지를 출력하지 않습니다.

reboot

시스템을 리부팅합니다.

root [DEVICE [HDBIAS]]

시스템의 루트 디바이스를 해당 디바이스(DEVICE)로 설정하고, 파티션 사이즈를 얻기 위해 마운트 합니다. 만약 아래와 같이 디바이스를 지정했다면 이는 프라미머리 디스크의 첫 번째 파티션을 루트 디바이스로 설정한 것입니다.

 

grub> root (hd0,0)

 

옵션 HDBIAS는 물리적인 디스크의 고유 넘버입니다. 예를 들어 하나의 IDE 디스크와 하나의 SCSI 디스크가 있고, 현재 리눅스 루트 파티션이 SCSI 디스크에 있다면 2번째 시스템 물리 디스크이므로 HDBIAS로 1을 사용합니다. 

rootnoverify [DEVICE [HDBIAS]]

root 명령어와 유사하나 파티션을 마운트하지 않습니다. 이 명령은 GRUB이 읽을 수 있는 디스크의 영역 바깥에 있는 OS를 루트 디바이스로 설정하고자 할 경우에 유용합니다.

serial [옵션]

시리얼 디바이스를 초기화 합니다.

 

[옵션]

--unit=UNIT : UNIT은 시리어 디바이스에서 사용하는 아라비아 숫자를 지정합니다(기본값은 0으로 COM1과 같습니다).

--port=PORT : PORT는 포트 넘버를 지정합니다.

--speed=SPEED : SPEED는 DTE-DTE 속도를 지정합니다. (기본값은 9600)

--word=WORD : WORD는 5에서 8까지의 길이를 지정합니다. (기본값은 8)

--parity=PARITY : PARITY는 패리티 타입으로 "no", "odd", "eve" 중 하나입니다. (기본값은 no)

--stop=STOP : 정지 비트의 길이(STOP)를 지정합니다. (기본값은 1)

--device=DEV : tty 디바이스의 이름(DEV)을 지정합니다. grub 쉘에서만 사용할 수 있습니다.

setkey [TO_KEY FROM_KEY]

키보드 ㅐㅁㅂ을 FROM_KEY에서 TO_KEY로 변경합니다. 인터내셔널 키보드를 설정할 때 유용합니다. 인자를 지정하지 않으면 키 매핑을 리셋합니다.

setup [옵션] INSTALL_DEVICE [IMAGE_DEVICE)

자동적으로 GRUB을 인스톨합니다. setup 명령은 조금 더 유연한 install 명령을 백엔드로 이용하여 GRUB을 INSTALL_DEVICE로 인스톨 합니다. install 명령은 사용자가 설정할 내용이 다양하기 때문에 setup 명령을 사용하면 보다 쉽게 설정할 수 있습니다. GRUB 이미지가 있는 곳은 IMAGE_DEVICE로 지정할 수 있으며, 만약 지정하지 않으면 ROOT 명령어로 설정한 현재의 루트 디바이스를 이용합니다.

 

[옵션]

--force-lba : LBA 모드를 사용합니다.

--prefix=DIR : GRUB 이미지가 있는 디렉터리를 지정합니다.

--stage2=STAGE2_FILE : 인스톨 시 지정한 스테이지 2 파일(STAGE2_FILE)을 GRUB에 넘겨줍니다.

terminal [옵션] [console] [serial]  [hercules] [graphics]

터미널을 선택합니다. 인자가 없으면 현재 설정을 보여줍니다. 만일 여러 터미널을 지정하면 어떤 키가 입력될 때가지 대기합니다. "console"과 "serial"을 모두 지정하면 먼저 입력한 키의 터미널이 선택됩니다.

 

[옵션]

--dumb : 터미널을 덤 터미널(dumb terminal)로 지정합니다.

--no-echo : 입력한 문자를 출력하지 않습니다.

--no-edit : 배쉬 에디팅(BASH-like editing) 기능을 비활성화 합니다.

--timeout=SECS : 지정한 초 동안 타임아웃을 지정합니다.

--lines=LINES : 라인의 최대값을 지정합니다.

--slient : 메시지를 숨깁니다.

terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ] [--enter-standout-mode=SEQ] [--exit-standout-mod=SEQ]]

터미널의 특성을 정의합니다. 옵션을 지정하지 않으면 현재의 셋팅을 보여줍니다.

testvbe MODE

VBE(VESA BIOS Extension) 모드를 테스트합니다. 취소하려면 아무키나 누룹니다.

unhide PARTITION

파티션 타입 코드에 있는 "hidden"을 제거하여 PARTITION 숨기기를 해제합니다.

uppermem KBYTES

강제로 인스톨된 상위 메모리를 KBYTES 크기로 가장합니다.

vbeprobe [MODE]

VBE 정보를 조사합니다. MODE가 지정되면 지정한 모드 정보만 보여줍니다.

 

다음은 grub 명령행에서 help가 아닌 help --all 명령에서만 볼 수 있는 명령어 입니다.

명령어 설명
cmp FILE1 FILE2 두 파일(FILE1과 FILE2)을 비교하고 다른 점을 보여줍니다.
debug 디버그 모드를 on/off 합니다.
dump FROM TO 파일(FROM)에서 파일(TO)로 내용을 덤프합니다. FROM은 반드시 GRUB 파일이고 TO는 OS 파일이어야합니다.
embed STAGE1_5 DEVICE 지정한 디바이스(DEVICE)가 드라이버이거나 FFS 파티션이면서 부트로더 영역 안에 있다면 스테이지 1.5(STAGE1_5) 파일을 MBR 이후의 섹터에 포함시킵니다. 만일 성공하면, 스테이지 1.5(STAGE1_5) 파일에 채워진 섹터 수를 출력합니다. 참고로 사용자가 이 명령을 직접적으로 실행할 일은 거의 없습니다.
fstest

파일 시스템 테스트 모드를 토글합니다.

 

grub> fstest

 Filesystem tracing is now on

grub> fstest

 Filesystem tracing is now off

impsprobe

인텔 멀티프로세서 스펙 1.1이나 1.4 설정 테이블을 조사하고, 찾은 CPU를 타이트루트(tight loop)로 부팅합니다. 이 명령은 스테이지 2에서만 사용됩니다.

 

grub> impsprobe

Scanning from 0x9f000 for 1024 bytes

Scanning from 0xf0000 for 65536 bytes

Found MP Floating Structure Pointer at f3820

Intel MultiProcessor Spec 1.4 BIOS support detected

   APIC config: "Virtual Wire mode"    Local APIC address: 0xffee00000

   OEMid : OEM00000 Product id : PROD00000000

   Processor [APIC id 0 ver 17]: #0 Bootstrap rocessor (BSP)

   Processor [APIC id 1 ver 17]:

   Bus id 0 is PCI

   Bus id 1 is PCI

   Bus id 2 is PCI

   Bus id 3 is PCI

   Bus id 4 is PCI

   Bus id 5 is PCI

   Bus id 6 is PCI

   I/O APIC id 4 ver 17, address: 0xfec00000

install [옵션] STAGE1 [d] DEVICE STAGE2 [ADDR][p][CONFIG_FILE][REAL_CONFIG_FILE]

GRUB을 설치합니다. 스테이지 2(STAGE2)나 스테이지 1.5 파일은 반드시 이미지가 설치될 디렉터리에 있어야합니다(예 /boot/grub 디렉터리). 이 명령은 스테이지 1 파일인 STAGE1 파일을 로딩 검증하고, 스테이지 2나 1.5 단계에 STAGE2 파일을 로딩하기 위해 스테이지 1 파일에 있는 블록 리스트를 인스톨하고, 완성된 스테이지 1 파일을 디바이스(DEVICE)의 첫 번째 블록에 씁니다.

 

[옵션]

--force-lba : LBA 모드를 위해 정상성 체크(sanity check)를 비활성화합니다.

--stage2=STAGE2_FILE : 로우(raw) 디바이스 대신 STAGE_2 파일을 통해 스테이지2를 다시 씁니다.

 

[파라미터]

STAGE1 : STAGE1을 스테이지 1 파일로 지정합니다.

d : 부팅 드라이브가 없다면 인스톨된 STAGE2를 실제 디스크로 찾도록 스테이지 1에 알려줍니다. 스테이지 1 단계에서 부팅 드라이브가 없다면 인스톨되어 있는 STAGE2에서 실제 디스크를 찾습니다.

DEVICE : 최종으로 만들어진 스테이지 1 파일을 쓸 목적(destination) 디바이스를 지정합니다.

STAGE2 : 스테이지 1이 로딩할 스테이지 2 파일을 STAGE2로 지정합니다.

ADDR : 스테이지 1에서 스테이지 2나 스테이지 1.5를 로딩할 주소를 지정합니다. 스테이지 2는 0x8000이, 스테이지 1.5는 0x2000이 가능합니다. 생략되면 GRUB는 주소를 자동적으로 결정합니다.

p : STAGE2가 위치하고 있는 파티션이 스테이지 2의 첫 번째 블록에 쓰여집니다.

CONFIG_FILE : 스테이지 2 설정 파일의 위치를 지정합니다.

REAL_CONFIG_FILE : STAGE2 파일이 실제 스테이지 1.5 파일이고, READ_CONFIG_FILE을 실제 설정 파일명으로 지정하고 스테이지 2 설정 파일에 이를 기록합니다.

 

ioprobe DRIVE

드라이브(DRIVE)에 사용된 I/O 포트를 찾습니다.

lock

사용자 인즈이 되지 않았다면 명령 실행을 중지합니다.

password [--md5] PASSWD [FILE]

메뉴 파일의 첫 번째 섹션에서 사용되면 모든 대화형 편집 컨트롤(메뉴 엔트리 에디터와 명령어 라인)이 비활성화됩니다. 만일 이 명령을 입력하면 FILE을 새로운 설정 파일로 로딩하고, GRUB 스테이지 2를 재시작합니다. 또한 FILE 인자를 제외하면 GRUB는 단지 특권 명령어를 해제합니다. --md5 옵션은 GRUB에 PASSWD가 md5 암호화라고 알려줍니다.

pause [MESSAGE...]

MESSAGE를 출력하고, 아무 키나 입력될 때까지 대기합니다.

print [MESSAGE...]

MESSAGE를 출력합니다.

read ADDR

지정한 ADDR 주소에 있는 메ㅗㅁ리에서 32비트 만큼 읽고, 16진수로 출력합니다.

savedefault [NUM | 'fallback']

인자가 주어지지 않으면 현재 엔트리를 기본 부트 엔트리로 저장합니다. 인자가 숫자 일 때는 이 숫자가 저장됩니다. 인자로 폴백이 지정되면 해당 폴백의 엔트리 포인트가 저장됩니다.

testload FILE

여러 방법으로 지정한 파일(FILE)의 전체 내용을 읽어 파일시스템 코드를 테스트합니다. 만일 출력에 에러가 없고, 마지막에 변수 i와 파일 위치*filepos)가 같은 값("i=X, filepos=Y")을 리포트하면 파일 시스템은 오류가 없고 커널을 로딩할 수 있다는 뜻입니다.

 

 

<GRUB 설정 파일>

데비안 계열에서는 /boot/grub/men.lst 파일로 존재하며 레드햇 계열에서는 /etc/grub.conf에서 menu.lst 파일을 심볼릭 링크로 사용하고 있습니다.

 

아래는 간단한 부트 메뉴 설정 파일의 예제입니다.

# 메뉴 화면을 30초 동안 보여주고 아무 입력도 없으면 자동적으로 부팅합니다.
timeout 30

# 첫 번째 엔트리를 기본 부팅 영역으로 지정합니다.
default 0

# 두 번째 엔트리를 폴백(fallback)으로 합니다.
fallback 1

title GNU/Linux
root (hd1,0)
kernel /boot/vmlinuz ro root=/dev/hdb1
initrd /boot/initrd.img

 

위에서 설명한 GRUB 명령어는 설정 파일이나 명령어 쉘에서 모두 사용할 수 있습니다. 추가적으로 메뉴 설정을 위해 설정 파일의 전체 섹션에서만 사용할 수 있는 명령어들도 있습니다. 

 

<전체 섹션에서 사용할 수 있는 명령어>

명령어 설명
default num 타이틀로 짖ㅓㅇ한 메뉴 중 기본으로 선택하고자 하는 메뉴 엔트리(num)를 지정합니다. 메뉴 엔트리는 0부터 시작하고, 별도로 지정하지 않으면 첫 번째 엔트리가 선택됩니다.
fallback num 에떤 이유로 기본 엔트리가 에러가 날 때 사용할 엔트리를 지정합니다. 이 값이 지정되어 있고 디폴트 엔트리가 동작하지 않으면 GRUB는 사용자 입력을 기다리지 않고 곧바로 폴백 엔트리로 부팅합니다.
hiddenmenu 메뉴를 보이지 않게 합니다. 타임 아웃 전에 사용자가 Esc 키를 누르면 화면에 메뉴가 표시됩니다.
timeout time 타임아웃 기간을 초 단위로 지정합니다. 타임아웃은 디폴트 엔트리로 부팅하기 전 사용자 입력을 대기하는 시간입니다.
title name

지정한 이름(name)으로 새로운 부트 엔트리를 시작합니다. 아래는 윈도우 멀티 부팅을 위한 예제 입니다. 설정 파일 맨 하단에 추가하면 됩니다.

 

# Windows 위한 부팅 설정
title Windows boot menu
rootnoverify (hd0,0)
makeactive
chainloader +1

 

<GRUB 설치하기>

1. GRUB 부트 CD 생성하기

 1) 현재 디렉터리에서 ISO 파일을 만들 작업 디렉터리를 생성합니다.

# mkdir -p iso/boot/grub

 

 2) stage2_eltorito 파일이 있는 /usr/lib/grub/i386-pc 디렉터리를 작업 디렉터리로 복사합니다.

# cp /usr/lib/grub/i386-pc iso/boot/grub

 

 3) ISO 파일을 생성하는 작업을 완료한 후 genisoimage 명령어를 실행합니다. 이 명령어는 iso/boot/stage2_eltorito를 부트 이미지로 해서 iso 디렉터리 하위 내용들을 isoimage.iso 파일로 생성하는 예제입니다.

$ genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot \
-boot-load-size 4 -boot-info-table -o isoimage.iso is

 

 

2. GRUB 명령어 쉘에서 설치하기

 grub> 으로 시작하는 명령어 쉘에서 GRUB를 인스톨할 수 있습니다.

grub> find /boot/grub/stage1
 (hd0,0)
 grub> root (hd0,0)
 grub> setup (hd0)

 

 

<메인 메뉴 사용하기>

부팅 후 메인 메뉴를 보면 등록된메뉴 타이틀을 볼 수 있는데 부팅하고자 하는 메뉴로 화살표 키를 이용하여 이동한 후, Enter 키를 입력하면 부팅을 시작합니다. 만일 timeout 옵션을 사용하고, hidden 메뉴를 활성화했다면 Esc 키를 입력해야 메뉴를 볼 수있습니다.

 

메인 메뉴 화면에서 e키는 각 타이틀의 명령을 편집할 수 있습니다. c키를 입력하면 grub 명령을 실행한 것처럼 grub> 으로 시작하는 명령행으로 들어갑니다.

 

 

<GRUB2 버전>

2010년 8월에 GRUB2 1.98 베타 버전이 나왔습니다. 이전 GRUB 버전은 더 이상 개발되지 않으나 설정 파일 하나로 메뉴를 간단하게 편집할 수있게 하여 사용자가 쉽게 사용할 수 있도록 했습니다.GRUB2는 쉘스크립트 문법을 사용하고, 변경된 메뉴를 적용하는 부분이 더 어려워졌습니다.

 

<새로워진 기능>

 - 조건식과 함수를 포함한 스크립트를 지원

 - 동적 모듈 형식으로 로드할 수 있음

 - 디렉터리 /boot/grub 아래에 많은 *.mod 파일을 볼 수 있는데 이 파일들은 GRUB2 부트로더가 필요에 따라 로딩함

 - Rescue 메뉴를 지원

 - /etc/grub.d/05_debian_theme 파일로 테마를 컨트롤 할 수 있음. 이 파일은 배포판 마다 다를 수 있음

 - 그래픽 부트 메뉴지원 및 splash 성능이 개선됨

 - 하드 드라이브에서 ISO 이미지로 직접 부팅 할 수 있음

 - 새로운 설정 파일 구조를 가짐

 - PowerPC 같은Non-X86 플랫폼 지원

 

 

 1) 이전 GRUB 버전과 달라진 점

 기본 메뉴 구조는 GRUB 이전 사용자들이 볼 때 유사해 보이지만, 내부적으로는 아래와 같이 많은 부분이 달라졌습니다.

  - 설치된 OS가 하나뿐이라면 기본 메뉴를 띄우지 않고 곧 바로 해당OS를 부팅함

  - 부팅 중에 메뉴를 보려면 Shift 키를입력해야함(이전 GRUB에서는 ESC 키)

  - /boot/grub/menu.lst 파일은 없음 /boot/grub/grub.cfg가 대신함

  - grub 프롬프트에서 "find boot/grub/stage1" 명령은 더 이상 없음. 스테이지 1.5는 더 이상 쓰지 않음

  - 메인 메뉴 파일인 /boot/grub.grub.cfg는 루트 계정으로도 편집할 수 없음. update-grub 멸영으로 자동 생성해야 함

  - grub.cfg는 커널이 추가/제거되거나 또는 사용자가 update-grub 명령을 실행할 경우 업데이트 되어 덮어쓰게 됨

  - 사용자는 /etc/grub.d/40_custom 파일로 커스텀 파일 설정을 해야함. 이 파일은 덮어쓰지 않음

  - 메뉴 디스플레이 설정을 변경하는 주 설정 파일은 /etc/default/grub 파일임

  - 메뉴 설정은 /etc/default/grub 이외에도 /etc/grub.d 디렉터리에 있는 모든 파일을 이용함

  - 첫 번째 파티션은 0이 아니라 1임. 첫 번째 디바이스는 0으로 이전 버전에서와 같음

  - update-grub 명령을 실행할 때마다 윈도우 같은 타 OS도 자동적으로 찾음

  - update-grub 명령을 실행해야지만 변경된 설정 파일이 적용됨

 

 

 2) GRUB2 사용하기

아래는 GRUB2에서 새롭게 추가된 핵심 설정 파일에 대해 설명합니다.

 

  ① /boot/grub/grub.cfg : 메인 설정 파일로 이전의 menu.lst 파일을 대신합니다. 이 파일은 읽기 전용 파일이므로 사용자가 직접 수정할 수 없습니다.

 

  ② /etc/grub.d/ : GRUB 스크립트를 포함하는 디렉터리로 이 디렉터리에 포함된 스크립트를 실행하여 grub.cfg 파일을 생성합니다. 아래는 /etc/grub.d 디렉터리가 포함하고 있는 파일들입니다.

# ls - alh
합계 56K
drwxr-xr-x    2 root root 4.0K 2010-07-01 02:52 .
drwxr-xr-x  129 root root 12K 2010-07-02 22:11 ..
-rwxr-xr-x    1 root root 4.4K 2010-04-13 06:59 00_header
-rwxr-xr-x    1 root root 1.4K 2010-04-13 06:40 05_debian_theme
-rwxr-xr-x    1 root root 4.5K 2010-04-13 06:59 10_linux
-rwx-r-xr-x   1 root root 918 2010-03-23 02:38 20_memtest86+
-rwx-r-xr-x   1 root root 6.5K 2010-04-13 06:33 30_OS-prober
-rwx-r-xr-x   1 root root 214 2010-04-12 04:44 40_custom
-rw-r--r--    1 root root 483 2010-04-22 04:22 README

 

 위의 파일들은 모든 실행 퍼미션을 포함하고 있는데 만일 chmod -x 옵션으로 실행 퍼미션을 제거하면 해당되는 파일의 설정이 메뉴에서 빠지게 됩니다. 아래와 같이 memtest를 메뉴에서 삭제할 수있습니다.

$ sudo chmod -x 20_memtest86+

 

 아래 표는 위 예제에 있는 파일들에 대한 자세한 설명입니다.

파일 이름 설명
00_header /etc/default/grub에서 GRUB 셋팅을 로딩하는 스크립트
05_debian_theme

백그라운드, 컬러, 테마 등을 정의

배포판 마다 이름이 다를 수있음

10_linux

설치된 배포판의 메뉴 엔트리를 로딩

20_memtest86+

memtest 유틸리티를 로딩

30_os-prober

또 다른 OS를 위한 HDD를 스캔하는 스크립트로 부트 메뉴에 추가

40_custom

사용자가 부가적인 엔트리를 부트 메뉴에 추가하기 위한 템플릿

 

  ③ /etc/default/grub : GRUB 메뉴 설정을 포함하는 파일로 전체적인 옵션인 timeout, 기본 부트 엔트리 등을 포함하고 있습니다. 만일 이 파일을 수정하면 update-grub(또는 grub-mkconfig) 명령으로 /boot/grub/grub.cfg 파일을 업데이트해야 합니다. 다음 표는 성정 파일에 포함할 수 있는 값에 대한 자세한 설명입니다.

 

설정값 설명
GRUB_DEFAULT=0

메뉴에서 기본 선택되는 엔트리를 지정

0은 첫 번째 엔트리를 말함

GRUB_DEFAULT=saved는 사용자가 이전 부트에서 마지막으로 선택한 메뉴를 기본 선택 엔트리로 지정

GRUB_HIDDEN_TIMEOUT=0

값이 0이면 GRUB_TIMEOUT 시간 동안 화면에 메뉴를 출력하지 않음

이 때 메뉴를 보려면 Shift 키를 입력해야 함

만일 값이 0이면서 다른 OS 엔트리가 없다면 카운트 다운 없이 바로 부팅됨

GRUB_TIMEOUT 동안 메뉴를 보려면 "=" 이후에 값을 지정하지 않음

GRUB_HIDDEN_TIMEOUT_QUIET=true

true면 카운트 ㄷ운을 출력하지 않음

GRUB_TIMEOUT=10

이전 설정의 timeout 10과 같음

-1로 설정하면 사용자가 엔트리를 선택할 때가지 무한정 대기

GRUB_DISTRIBUTOR=`lsb_release -l -s 2> /dev/null || echo Debian`

메뉴 엔트리에 추가할 배포판 이름을 추출

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

정상 모드에서의 이전 GRUB의 kernel 항목 중 linux 항의 끝에 추가

GRUB_CMDLINE_LINUX=""

정상(normal) 모드와 리커버리 모드에서의 이전 GRUB의 kernel 항목 중 linux 항의 끝에 추가

 

 

 3) 사용자 메뉴 추가하기

사용자 지정 메뉴를 추가하려면 /etc/grub.d/40_custom 파일을 열고 맨 아래에 원하는 내용을 추가합니다.

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry " My Test Title" {
set root = (hd0,1)
linux /boot/vmlinuz.test ro quiet splash
initrd /boot/initrd.img.test
}

 

이전 GRUB에서 GRUB2로 업그레이드되면서 menu.lst 파일에도 다음과 같은 변화가 생겼습니다.

이전 GRUB GRUB2
title

menuentry

menuentry로 시작하는 첫 번째 라인은 반드시 { 로 끝나야 합니다.

이는 menuentry으 ㅣ마지막 라인에서 } 로 닫습니다.

root

set root=

kernel

linux

(h0,0)

파티션 시작값이 0에서 시작

(hd0,1)

파티션 시작 값이 1에서 시작

 

만일 /etc/grub.d/40_custom이 수정 완료되었다면 update-grub 명령으로 /boot/grub/grub.cfg 파일에 업데이트를 해줘야 합니다.

$ sudo update-grub

 

일부 배포판에서 에러가 발생하면 grub-mkconfig 명령을 사용하면 됩니다.

$ sudo grub-mkconfig -o /boot/grub/grub.cfg

 

 

 

  2. grub-install(GRUB 설치)

 1) 경로 : /sbin/grub-install

 2) 요약 : 지정한 드라이브에 GRUB를 설치

 3) 사용 방법 : grub-install [옵션] install_device

 4) 옵션

 -h, --help : 도움말을 출력

 -v, --version : 버전 정보를 출력

 --root-directory=DIR : GRUB 이미지를 루트 디렉터리 대신 지정한 디렉터리(DIR) 아래에 설치

 --grub-shell=FILE : grub 쉘 파일(FILE)을 지정

 --no-floppy : 플로피 드라이브를 찾지 않음

 --force-lba : GRUB를 LBA 모드로 실행. 사용자 시스템에 디스크를 추가하거나 제거하려면 옵션을 사용해야함

 --recheck : 이미 존재하더라도 디바이스 맵을 다시 찾음

 

 5) 추가 설명

grub-install 명령어는 GRUB 쉘을 자동 설치합니다. install_device는 GRUB를 설치할 디바이스명으로  /dev/hda와 같은 시스템 디바이스 형태나 (hd0) 같은 GRUB 디바이스명 형태를 사용할 수 있습니다.

# grub-install /dev/hda

 

--grub-shell 옵션은 GRUB 쉘로 사용할 수 있는 파일을 지정합니다. 아래는 grub에 추가적으로 지정한 내용을 옵션으로 추가한 예입니다.

# grub-install --grub-shell="grub --read-only" /dev/fd0

 

 

 

  3. grub-mkconfig(GRUB 설정파일 생성)

 1) 경로 : /usr/sbin/grub-mkconfig

 2) 요약 : grub 설정 파일인 grub.cfg 파일을 새롭게 생성

 3) 사용 방법 : grub-mkconfig [옵션]

 4) 옵션

 -o, --output=FILE : 지정한 설정 파일(FILE)로 생성

 -h, --help : 사용법을 출력

 -v, --version : 버전 정보를 출력

 

 5) 추가 설명

grub-mkconfig는 grub 설정을 생성하는 명령어로 옵션을 지정하지 않으면 메시지를 화면에 출력합니다. 데비안 기준으로 grub는 /boot/grub 디렉터리에 설정 파일인 grub.cfg를 저장합니다.

$ ls -al /boot/grub/grub.cfg
-r--r--r-- 1 root root 4273 2010-09-04 16:31 /boot/grub/grub.cfg

 

-o 옵션은 지정한 파일 이름으로 설정 파일을 업데이트하여 생성합니다.

$ sudo grub-mkconfig -o /boot/grub/grub.cfg
$ ls -al /boot/grub/grub.cfg
-r--r--r-- 1 root root 4339 2010-11-14 02:53 grub.cfg

 

참고로 update-grub 명령은 grub-mkconfig -o /boot/grub/grub.cfg 명령과 동일합니다.

반응형

댓글