이 글은 초보분들에게 적합하지 않습니다. 일단 사용할 일도 잘 없고 내용도 재미없으니까요. 또한 EasyBCD 같은 편리한 툴이 있기 때문에 구태여 수동으로 작업할 필요는 없다고 봅니다. 따라서 중급자 분들만 읽어보세요.


- BCDEDIT의 기본
bcdedit의 기본은 역시 관리자 권한입니다. 관리자 권한으로 명령 프롬프트를 실행해야 bcdedit을 사용할 수 있습니다. 그리고 뒤에 /? 붙이시면 도움말이 나오니 궁금한 점이 있으시면 도움말을 잘 활용해보세요.


- 비스타, 세븐 부팅메뉴 추가하기
기존 항목을 복사한 다음 일부만 수정해주는 방법이 있고, 완전 새로 만드는 방법이 있습니다. 또한 윈도우 7에서는 Bcdboot 명령어를 이용해 간단히 처리할 수도 있습니다. 하지만 여기서는 수동으로 만드는 방법에 대해 설명드리겠습니다. bcdedit 사용법에 대해 설명드리는 글이니까요. 추가할 윈도우 7은 E 드라이브에 존재한다고 가정하겠습니다.

bcdedit /create /application OSLOADER /d "Windows 7 Ultimate K x64"

위 예처럼 /create /application OSLOADER 를 이용하면 윈도우 부팅 로더를 하나 만들 수 있습니다. /d 뒤에는 메뉴 이름을 적어주시면 됩니다. 이렇게 명령어를 넣으면 {132b80fe-790a-11df-b168-a80a0ebf9332} 처럼 생긴 {GUID}가 반환되는데 (이름은 랜덤으로 생성) 아래 명렁어부터는 이 부분을 {GUID} 라고 적겠습니다. 실제로 작업하실 때는 {GUID} 부분에 {132b80fe-790a-11df-b168-a80a0ebf9332} 처럼 직접 입력하셔야 합니다.

bcdedit /set {GUID} device partition=E:
bcdedit /set {GUID} osdevice partition=E:
bcdedit /set {GUID} path \Windows\system32\winload.exe
bcdedit /set {GUID} locale ko-KR
bcdedit /set {GUID} inherit {bootloadersettings}
bcdedit /set {GUID} recoverysequence {메롱}
bcdedit /set {GUID} recoveryenabled Yes

bcdedit /set {GUID} systemroot \Windows
bcdedit /set {GUID} nx OptIn
bcdedit /displayorder {GUID} /addlast

이렇게 하시면 E 드라이브에 있는 윈도우 7이 부팅 메뉴에 등록됩니다. 파란색 부분은 F8 복구모드에 관한 내용인데 일단 생략하세요. 뒤쪽에 가서 다루겠습니다.


- 윈도우 XP 부팅메뉴 추가하기
XP는 메뉴만 추가한다고 되는게 아니고 NTLDR, NTDETECT.COM, BOOT.INI 파일도 시스템 파티션에 복사를 해와야 합니다. 이건 여기서 다루지 않고 예전에 포스팅했던 글로 대체하겠습니다.

2009/11/08 - [Windows 7] - 윈도우 7에서 윈도우 XP를 수동으로 멀티부팅에 추가하기


- VHD 파일 부팅메뉴 추가하기
VHD 파일도 처음에 설명드렸던 방법과 비슷합니다. E 드라이브 VHD 폴더 안에 win7.vhd 파일이 존재한다고 가정하고 진행하겠습니다.

bcdedit /create /application OSLOADER /d "Windows 7 VHD Boot"

bcdedit /set {GUID} device vhd=[E:]\vhd\win7.vhd
bcdedit /set {GUID} osdevice vhd=[E:]\vhd\win7.vhd
bcdedit /set {GUID} path \Windows\system32\winload.exe
bcdedit /set {GUID} locale ko-KR
bcdedit /set {GUID} inherit {bootloadersettings}
bcdedit /set {GUID} systemroot \Windows
bcdedit /set {GUID} nx OptIn
bcdedit /set {GUID} detecthal Yes
bcdedit /displayorder {GUID} /addlast

여기서는 F8 복구모드 항목을 빼버렸습니다. 그 이유는 나중에 설명드리겠습니다. detecthal Yes 정도만 추가되었다고 보시면 되겠네요.


- 항목 복사하기
제가 위에서 기존 항목을 복사한 다음 일부만 수정해주는 방법이 있다고 했는데 윈도우 7이 설치된 상태에서 윈도우 비스타를 추가하려는 경우 앞에서 설명드린 방법처럼 수동으로 일일이 만들어도 되겠지만 그냥 윈도우 7의 항목을 그대로 복사한 다음 경로만 수정해주셔도 별 문제는 없습니다.

bcdedit /copy {복사해올 항목의 GUID} /d "Windows Vista Ultimate K x64"

bcdedit /set {GUID} device partition=E:
bcdedit /set {GUID} osdevice partition=E:

이런 식으로 현재 C 드라이브에서 구동중인 윈도우 7 부팅항목을 그대로 하나 복사한 다음 E 드라이브에 존재하는 비스타를 위해 위치만 변경해주는 식으로 해도 됩니다.


- 이름 바꾸기
description 항목을 변경하시면 됩니다. 예를 들어 Windows 7 이라는 기본 영문 이름이 마음에 들지 않는다면

bcdedit /set {GUID} description "윈도우 7"


- 기본으로 부팅될 항목 설정
뭐 이런건 msconfig에서 하셔도 되겠지만...

bcdedit /default {GUID}


- 멀티부팅 시간 정하기

bcdedit /timeout 3


- 메뉴 순서 변경하기

bcdedit /displayorder {GUID1} {GUID2} {GUID3} {GUID4}

특정 항목만 지정해서 처음으로, 끝으로 보내려면 /addfirst, /addlast 등을 붙이면 됩니다.


- 메뉴 삭제하기

bcdedit /delete {GUID} /cleanup /f


- /enum all
중급자 분들은 이거 하나만 해보셔도 그동안 궁금해했던 부분들이 다 풀릴 것입니다. 여기에 모든 비밀이 다 숨겨져 있습니다.


- inherit
정확히는 잘 모르겠습니다. 상속이라고 하니 지정한 항목에서 속성을 물려받는다는 말 같은데... 별 필요는 없다고 봅니다.


- resumeobject
최대절전모드를 지정합니다. 여기에 나와있는 {GUID}의 내용을 직접 확인해보시려면

bcdedit /enum {GUID}

아래는 VMware에 설치된 윈도우 7의 resumeobject 항목의 예입니다.

최대 절전 모드에서 다시 시작
---------------------
identifier              {132b80fa-790a-11df-b168-a80a0ebf9332}
device                  partition=C:
path                    \Windows\system32\winresume.exe
description             Windows Resume Application
locale                  ko-KR
inherit                 {resumeloadersettings}
filedevice              partition=C:
filepath                \hiberfil.sys
pae                     Yes
debugoptionenabled      No

만약 최대절전모드를 사용하지 않는다면 resumeobject 항목은 필요가 없는 것이고 만약 필요한데 항목이 없다면 직접 위 예처럼 하나 만들어 주시면 되겠지요.

bcdedit /create /application RESUME /d "Windows Resume Application"

bcdedit /set {GUID} device partition=C:
bcdedit /set {GUID} path \Windows\system32\winresume.exe
bcdedit /set {GUID} locale ko-KR
bcdedit /set {GUID} inherit {resumeloadersettings}
bcdedit /set {GUID} filedevice partition=C:
bcdedit /set {GUID} filepath \hiberfil.sys
bcdedit /set {GUID} pae Yes
bcdedit /set {GUID} debugoptionenabled No

만약에 다른 RESUME 항목이 있다면 /copy 로 복사하거나 그놈을 직접 resumeobject 의 {GUID}로 지정해버려도 되겠습니다. 저는 최대절전모드를 사용하지 않으니 대충 이정도만 설명드리겠습니다.


- nx OptIn
DEP 설정입니다. OptIn이 기본값입니다. AlwaysOff 하시면 DEP를 끕니다.


- F8 복구모드 이야기
일반적으로 F8 복구모드는 있어야 정상인데 없는 경우 수동으로 등록시켜주시면 됩니다. 사실 이것도 알고 보니 별거 없었습니다. 아래 예는 VMware에 설치한 순수 윈도우 7 기준입니다.

Windows 부팅 로더
-------------------
identifier              {132b80fc-790a-11df-b168-a80a0ebf9332}
device                  ramdisk=[C:]\Recovery\132b80fc-790a-11df-b168-a80a0ebf93
32\Winre.wim,{132b80fd-790a-11df-b168-a80a0ebf9332}
path                    \windows\system32\winload.exe
description             Windows Recovery Environment
inherit                 {bootloadersettings}
osdevice                ramdisk=[C:]\Recovery\132b80fc-790a-11df-b168-a80a0ebf93
32\Winre.wim,{132b80fd-790a-11df-b168-a80a0ebf9332}
systemroot              \windows
nx                      OptIn
winpe                   Yes

장치 옵션
--------------
identifier              {132b80fd-790a-11df-b168-a80a0ebf9332}
description             Ramdisk Options
ramdisksdidevice        partition=C:
ramdisksdipath          \Recovery\132b80fc-790a-11df-b168-a80a0ebf9332\boot.sdi

결국 Recovery 폴더에 들어있는 Winre.wim 파일을 램디스크 옵션을 사용해 PE 부팅 시키는거죠.
만약 F8 복구모드가 없는 경우라면 아래 두 글을 참조하시면 해결될겁니다.

2010/03/03 - [Windows 7] - 윈도우 7 F8 컴퓨터 복구 모드가 없는 경우
2010/03/05 - [Windows 7] - 윈도우 7 F8 컴퓨터 복구 모드가 없는 경우 2탄

제가 VHD 부팅에서는 F8 복구모드 부분을 빼버렸다고 했습니다. 왜냐하면 VHD 안에 boot.sdi 파일이 들어있기 때문에 사실상 VHD에선 F8 복구모드를 이용할 수 없는게 정상이기 때문입니다. 굳이 이용하려면 boot.sdi 파일을 VHD 외부에 두고 램디스크 옵션을 만든 다음 VHD 안에 있는 WinRE.wim 파일을 로딩해야 합니다. 아니면 아예 둘다 바깥에 빼버리든가, F8 복구모드 따위 필요없고 직접 boot.wim 파일을 멀티부팅 메뉴에 등록해두는게 더 편하겠지요.


- BCD 새로 생성하기
BCD가 존재하지 않는 비어있는 파티션에 BCD를 생성하는 명령어입니다. 일단 보기좋게 BOOT 폴더를 하나 만드는게 좋겠죠. 저는 E 드라이브에 BOOT 폴더를 만들어 거기에 생성해보겠습니다.

md e:\boot
bcdedit /createstore e:\boot\bcd
bcdedit /store e:\boot\bcd /create {bootmgr} /d "Windows Boot Manager"
bcdedit /store e:\boot\bcd /set {bootmgr} device partition=E:
bcdedit /store e:\boot\bcd /set {bootmgr} locale ko-KR

딱 이정도만 해주시면 되는데 파일이 2개 필요합니다. 일단 bootmgr 파일이 E 드라이브 루트에 있어야겠지요? 또한 로케일을 ko-KR로 지정했다면 (메뉴 한글로 나오라고) bootmgr.exe.mui 파일을 e:\boot\ko-KR 폴더를 만들어 그 안에 복사해야 합니다. bootmgr.exe.mui 파일은 C:\Windows\Boot\PCAT\ko-KR 폴더 안에 들어있습니다.

그런데 윈도우 7 설치시 자동으로 만들어주는 BCD와 이렇게 수동으로 만든 BCD는 차이가 매우 큽니다. 자동으로 만들때는 잡다한 {memdiag}, {emssettings}, {dbgsettings}, {badmemory}, {globalsettings}, {bootloadersettings}, {hypervisorsettings}, {resumeloadersettings} 등이 생성되는데 수동으로 이렇게 만들면 그게 없으니까요. 하지만 제 생각에 이것들은 없어도 그만으로 보입니다.


- BCD 위치 지정
바로 위에서 설명드린 BCD 생성하기를 보면 /store 옵션이 있습니다. 현재 부팅해서 사용중인 윈도우의 BCD가 아니라 새로 생성하거나 백업해두었거나 DVD 부팅용 메뉴를 편집하려 한다면 /store 옵션을 붙여서 직접 BCD의 위치를 지정해서 편집하시면 됩니다.


- BCD 백업과 복원
마지막으로 BCD 설정을 파일로 백업하거나, 파일로부터 설정을 복구하는 방법입니다.

bcdedit /export e:\bcdbackup\bcd

물론 위 경우라면 E 드라이브에 backupbcd 폴더는 먼저 만들어놔야 합니다. 이렇게 하시면 현재 BCD 설정이 저 파일에 백업됩니다. 이게 단순히 BCD 파일을 복사하는 것과 차이가 있는지는 잘 모르겠습니다.

bcdedit /import e:\bcdbackup\bcd

위 백업파일로부터 BCD를 가져옵니다. 이때 기존 설정은 다 날아가고 새로 가져온 설정만 남게 됩니다.