멀티 부팅 - GRUB 및 boot.ini 파일, 플로피 이미지 이용
목차
- 주의 : 이 작업에서 사용하는 boot.ini는 윈도에서 매우 중요한 파일이므로 작업하기 전에 백업을 해 두기 바랍니다.
아는 사람으로부터 GRUB와 boot.ini 파일을 이용하여 멀티 부팅을 구현해 달라는 요청을 받았습니다. 그런데 제가 리눅스를 쓸 때를 제외하고는 한 번도 GRUB를 쓴 적이 없었다는 점을 깨달을 수 있었습니다. 심지어 boot.ini 파일에 대해서도 정확히 알지 못하고 있었습니다.
그래서 이번에 GRUB와 boot.ini 파일 및 플로피 이미지 파일을 이용하여 멀티 부팅을 구현하기로 했습니다.
작업 파일 준비#
일단 작업에 필요한 파일은 따로 준비할 것이 거의 없습니다. 다만 멀티부팅을 구성할 때 쓰일 플로피 이미지 파일은 따로 준비해야 합니다. 없다면 직접 만들거나 인터넷의 부트 플로피 이미지 웹사이트(http://www.bootdisk.info/)에서 구할 수도 있습니다. 제 경우는 PC 방에 있던 파일을 구할 수 있었습니다.
그림 1. PC방에서 구한 고스트 도구
위 그림과 같은 유틸리티에서 플로피디스크 부트 이미지 파일을 빼낼 수 있었습니다. 빼낸 파일은 각각 용도에 따라 이름을 지정해 주었습니다. 참고로 이 프로그램은 code_R1 님의 작품으로 여겨집니다.
위의 그림 1에서 나온 6개의 메뉴는 각각 플로피 이미지 파일 한 개를 가리키며, 그 목록과 쓰임은 다음과 같습니다.
[code shell; tab-size:12; smart-tabs: true]back1H2P.ima - 첫 번째 하드의 첫 번째 파티션을 첫 번째 하드의 두 번째 파티션의 루트 디렉터리에 GHOST.GHO라는 이름으로 저장합니다. back2H1P.ima - 첫 번째 하드의 첫 번째 파티션을 두 번째 하드의 첫 번째 파티션의 루트 디렉터리에 GHOST.GHO라는 이름으로 저장합니다. rest1H2P.ima - 첫 번째 하드의 두 번째 파티션의 루트 디렉터리에 있는 GHOST.GHO 파일에서 첫 번째 하드의 첫 번째 파티션으로 복구합니다. rest2H1P.ima - 두 번째 하드의 첫 번째 파티션의 루트 디렉터리에 있는 GHOST.GHO 파일에서 첫 번째 하드의 첫 번째 파티션으로 복구합니다. ghostx.ima - 단순히 고스트 프로그램을 실행해 주는 역할만 합니다. pqmagic.ima - 파티션 매직 프로그램을 실행해 줍니다.[/code]이 플로피 이미지를 이용하여 GRUB 메뉴를 구성하겠습니다. 작업에 앞서 위의 플로피디스크 이미지 파일을 c:\windows 폴더에 복사합니다.
boot.ini 파일에 대하여#
boot.ini 파일에 대한 전반적인 내용은 Microsoft 고객지원 웹페이지(http://support.microsoft.com/)에서 다음 두 페이지를 살펴보기 바랍니다.
그밖에 QAOS.com 사이트에서 다음과 같은 여러 페이지에서도 정보를 구할 수 있습니다.
boot.ini 속성 바꾸기#
boot.ini 파일을 찾을 수 없을 때에는 DOS에서 숨김 파일 보기 글을 참조하여 찾습니다. 다만 여기에서는 그 문서를 편집해야 하므로 명령 프롬프트를 열어야 합니다.
boot.ini 파일을 건드린 적이 없다면 이 파일은 읽기전용/숨김/시스템 속성을 가지고 있습니다. 이 세 속성이 없어야만 편집하여 저장할 수 있습니다. 명령 프롬프트를 연 뒤에 다음과 같이 입력하면 됩니다.
[code shell]attrib -r -h -s c:\boot.ini[/code]대부분 위와 같이 하면 boot.ini 파일을 편집하여 저장할 수 있는 상태가 됩니다. 이것을 그림으로 나타내면 다음과 같습니다.
그림 2. boot.ini 파일의 속성을 바꾸는 명령 프롬프트 화면
boot.ini 설명#
[code shell][boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect[/code]위의 코드에서 [boot loader] 구역의 default 항목의 값이 [operating systems] 구역의 항목과 비슷함을 알 수 있습니다. 바로 multi(0)disk(0)rdisk(0)partition(1)\WINDOWS라는 부분이 완전히 동일한데, 그것은 이른바 ARC 경로입니다. 그 설정에 대해서는 ARC 경로 이해하기 글을 참고하기 바랍니다. 확실한 것은 그 ARC 경로가 가리키는 위치에서 윈도의 시동 파일을 불러와서 부팅을 해준다는 점입니다.
[boot loader] 구역의 값에서 timeout은 멀티 부팅을 구성했을 때 부트 메뉴를 보여주는 시간을 정합니다. 윈도를 설치하고 만지지 않았다면 30(곧 30초를 가리킵니다)이라고 되어 있습니다.
그 아래 default 항목은 [operating systems] 구역에서 기본으로 불러올 부트 메뉴를 지정합니다.
[operating systems] 구역은 실제로 부팅에 이용할 부트 메뉴를 구성합니다. 현재는 하나뿐이기 때문에 30초라고 부트 메뉴를 보여주는 시간을 지정했음에도 아무것도 보여주지 않고 그냥 부팅합니다. 여기에 부트 메뉴를 추가하면 멀티 부트가 이루어집니다.
또한 [operating systems] 구역의 항목은 한 줄에 하나의 메뉴를 구성합니다. 엔터를 치면 다른 줄로 인식하므로 주의해야 합니다.
GRUB 설치#
GRUB 프로그램 파일 구하기#
윈도XP에서 GRUB을 설치하려면 우선 프로그램 파일이 필요합니다. GRUB for DOS의 다운로드 페이지(http://download.gna.org/grub4dos/)에서 grub4dos-0.4.4-2009-06-20.zip 파일을 받아서 적당한 폴더에 압축을 풉니다.
그림 3. grub4dos-0.4.4-2009-06-20.zip의 압축을 푼 폴더의 내용
위 그림에서 이번에 사용할 파일은 grldr 파일과 menu.lst 파일입니다. 빨간 네모 표시를 하였습니다. 그 두 파일은 C 드라이브 루트 디렉터리(c:\)로 복사합니다.
menu.lst 파일에 대하여#
이제 menu.lst 파일을 편집합니다. 그런데 복사한 menu.lst를 메모장에서 열어 보면 조금 엉뚱한 형태로 되어 있습니다.
그림 4. 유닉스 텍스트 파일로 저장된 menu.lst 파일
이것은 유닉스 텍스트 형식으로 저장되어 있어서 윈도에서 조금 이상하게 보이게 됩니다. 이것을 도스/윈도용 텍스트 형식으로 바꾼 파일을 다운로드하여 이용하기 바랍니다.
앞서 나온 플로피 이미지 파일을 적용한 파일 다운로드
원본 -> 도스/윈도 텍스트 형식으로 바꾼 파일 다운로드
menu.lst 파일 편집#
위의 2번 항목의 파일을 분석해 보겠습니다.
[code shell]# =======================Maid by lds718 color black/cyan yellow/cyan timeout 50 default 0[/code]1행은 주석입니다. 맨 앞에 #(샤프) 기호가 있으면 그 행은 주석으로 해석하지 않습니다.
2행의 color 옵션은 색상을 지정하고 있습니다. 이 옵션에 대해서는 Color Matrix 문서를 참조하십시오.
3행의 timeout 옵션은 GRUB 메뉴를 보여줄 시간을 지정합니다. 여기에는 정수(십진수)만 넣을 수 있고, 현재 50초로 지정되어 있습니다. 지정하지 않을 경우 5초로 지정됩니다.
4행의 default 명령은 앞의 timeout 옵션에서 지정한 시간이 지나도 사용자가 선택하지 않았을 때 불러올 부트 설정의 항목입니다. 여기에서 첫 번째 부트 항목의 번호는 0 번입니다. default 명령 다음에 부트 파일을 직접 지정할 수도 있습니다.
첫 번째 부트 항목#
[code shell; first-line:6]# 부트 0 : 윈도의 NTLDR 파일을 찾아 읽어옵니다. title Find and load NTLDR of Windows NT/2K/XP fallback 1 find --set-root /ntldr chainloader /ntldr[/code]6행은 주석입니다.
7행의 title 명령은 부팅 항목의 이름을 지정합니다. 이것은 부트 메뉴를 만들 때 보여주는 이름이기도 합니다.
8행의 fallback 명령은 부팅에 실패했을 때 이용할 부트 항목의 번호입니다. 현재는 첫 번째 부트 항목으로 번호는 0번입니다. 그러므로 1번은 두 번째 부트 항목을 가리킵니다.
9행의 find 명령은 장치를 찾습니다. 이때 장치는 디스크에 있는 파일도 가리킵니다. 한편 뒤에 --set-root 옵션이 왔는데, 이때는 부트 장치(부트 파일 포함)를 찾는 역할을 하고, 끝에 /ntldr이라는 파일명이 왔습니다. 이것은 윈도xp에서 c:\ntldr 파일을 가리킵니다.
10행의 chainloader 명령에서는 파일을 체인 로더로서 읽어옵니다. 체인 로더는 컴퓨터 프로그램 실행법 가운데 하나로서, 현재 실행하는 프로그램을 새로운 프로그램으로 교체하는 방법입니다. 컴퓨터 부팅에서 체인 로더는, 앞서 프로그램이 교체되듯, 부트 영역(또는 부트 로더)이 다른 부트 정보(또는 부트 파일, 또는 부트 로더)로 교체되는 방식을 가리킵니다. 일단 여기에서는 뒤에 /ntldr 파일이 왔으므로, 현재 사용하는 부트 로더를 /ntldr 파일로 교체하게 된다. 쉽게 말해 c:\ntldr 파일을 불러서 부팅한다고 생각하면 됩니다.
윈도 계열의 boot.ini 파일을 이용할 때는 반드시 9행과 10행의 내용을 포함시키기 바랍니다.
두 번째 이하 부트 항목#
[code shell; first-line:12; tab-size:8; smart-tabs: true]# 부트 1 : 첫 번째 하드의 첫 번째 파티션을 # 첫 번째 하드의 두 번째 파티션의 루트 디렉터리에 GHOST.GHO라는 이름으로 저장합니다. title Ghost Backup - 1:2 map --mem /WINDOWS/back1H2P.ima (fd0) map --hook chainloader (fd0)+1 rootnoverify (fd0)[/code]12행과 13행은 주석이며, 13행은 메뉴 타이틀입니다. 실행과는 별로 관련이 없지만 코드를 읽기 편하게 만드는 역할을 합니다.
14행의 map 명령은 매핑 기능을 합니다. 매핑은 컴퓨터 메모리(또는 장치)를 다른 메모리(또는 장치)로 연결해 주거나 연결 순서를 바꾸는 작업을 가리킵니다. 이 map 명령의 사용법은 다음과 같습니다.
[code shell]map 대상 원본[/code]대부분 대상을 원본으로 덮어쓰기를 한다고 보면 됩니다.
이때 map --mem 옵션은 윈도 운영체제에서 좀 더 안전하게 작업할 수 있게 해주는 옵션입니다. --mem=-2880 처럼 사용할 메모리 용량을 지정할 수도 있습니다. 대부분 이 크기는 읽어올 플로피 이미지의 크기에 맞춥니다. 결국 map --mem /WINDOWS/back1H2P.ima (fd0) 구문은 /WINDOWS/back1H2P.ima 파일을 0번 플로피(fd0, 흔히 A 드라이브)로 만들어 줍니다. 이 경우 map 명령은 가상 플로피 드라이브를 만드는 명령이 되지요.
15행의 map --hook 옵션은 처음 map 명령이 실행되었을 때 지정한 효과를 즉시 반영합니다. 다시 말해 14행에서 가상 플로피 드라이브를 만들도록 설정했는데, 아직 적용이 되지 않았습니다. 이것을 실제로 적용시키는 명령입니다.
16행에서는 chainloader 명령이 나왔는데, 옵션이 바뀌어 있습니다. 10행에서는 파일이 왔는데, 이번에는 장치가 왔습니다. 어떻게 구분하느냐고요? 괄호(())로 묶인 것은 장치이고, 그냥 나타난 것은 파일입니다. chainloader (fd0)+1 구문은 현재 부트 로더를 플로피의 첫 번째 섹터로 교체하라는 뜻입니다. 쉽게 말해 플로피로 부팅하라는 말이죠. 장치명 뒤에 오는 '+1'은 장치의 첫 번째 섹터를 가리키며, 디스크 장치는 첫 번째 섹터를 0번 섹터라 부르는데, 대부분 부트 섹터로 불립니다. 이름 그대로 부팅할 때 그 부분을 읽어서 부팅합니다.
17행에서 rootnoverify 명령이 나왔습니다. rootnoverify 명령은 파티션을 마운트하지 않는다는 뜻입니다. 기본적으로 GRUB는 리눅스 및 유닉스 계열의 부트 로더입니다. 그 때문에 윈도/도스의 파티션을 완벽히 지원하지 않습니다. 그래서 읽어와서 부팅한 뒤에는 부팅한 운영체제에 제어권을 완전히 넘겨주어 작업하는 편이 더 안전합니다. rootnoverify 명령에는 장치명이 뒤따라 와야 합니다.
반대로 마운트하여 작업하는 명령어는 root 명령입니다.
세 번째 부트 항목부터는 두 번째 부트 항목과 같은 형식으로 이루어져 있으므로 설명을 생략합니다.
아래는 지금까지 설정한 menu.lst 파일이 부트과정에서 나타나는 모습입니다.
그림 5. GRUB4DOS로 구성한 시동 메뉴
참고로 위 그림에서 오른쪽 위의 숫자 0은 현재 선택된 메뉴(노란색 글자)의 메뉴 번호입니다.
boot.ini 파일 편집#
boot.ini 설명#에 나타난 내용을 편집하겠습니다. 편집은 매우 간단하여 마지막 줄에 한 줄을 추가하기만 하면 됩니다.
[code shell;highlight: (6)
][boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
C:\GRLDR="PC Repair System"[/code]
C:\GRLDR 부분은 부트로더를 지정하는 부분이고, 등호(=) 뒤에 나오는 내용은 윈도 시동 메뉴에서 보여줄 메시지입니다.
하지만 위와 같이 30초 동안 시동 메뉴가 보이게 되면 자칫 시스템 해킹의 위험 요소가 남게 됩니다. 그러므로 PC방 등 공개 장소에서는 매우 짧게 설정하여, 아는 사람만 사용할 수 있도록 해야 합니다. 보통은 3 이하의 작은 정수를 지정합니다.
[code shell;highlight: (6)
][boot loader]
timeout=1
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
C:\GRLDR="PC Repair System"[/code]
최종적으로 위와 같이 바뀝니다.
GRUB을 이용한 시동 메뉴 스크린 샷#
관련 문서#
내부 문서#
- [벌레와 팁/버그] - DOS에서 숨김 파일 보기
- 본문에서 사용한 6개의 플로피디스크 이미지 파일은 다음과 같습니다.
외부 문서#
- GRUB 홈페이지 : http://www.gnu.org/software/grub/
- GNU GRUB Manual 0.97 : http://www.gnu.org/software/grub/manual/html_node/
- GRUB for DOS : https://gna.org/projects/grub4dos/
- GRUB for DOS의 다운로드 페이지 : http://download.gna.org/grub4dos/
- Grub4dos tutorial : http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos_tutorial
- 위키백과 홈페이지 (한국어) : http://ko.wikipedia.org/
- NTLDR#boot.ini (영어)
- GRUB (영어)
- QAOS 홈페이지 : http://qaos.com/
- Microsoft 고객지원 웹페이지 : http://support.microsoft.com/
- BootDisk.info | The web resource for bootable Media : http://www.bootdisk.info/
- How to rebuild the Windows boot.ini.
이 글은 스프링노트에서 작성되었습니다.