bootmgr은 efi가 아닌이상은 무조건 /boot/bcd파일을 불러와서
실행을 해줍니다.
다른 설정을 할수가 없어요.
그래서 많은 사람들이 울며겨자먹기로 이 /boot/bcd파일을 편집에서
여러메뉴를 추가하죠.
(여러종류의 PE나 설치용으로)
그런데 grldr을 이용해야 하는 경우에는
grldr로 뜨고 난 다음에 다시 bootmgr로 가서 또 메뉴를 선택해야 하는
불편이 있었죠.
그래서 아예 grldr에서 바로 원하는 wim(bcd)으로 부팅할수 있는 방법입니다.
bcd파일을 여러개를 가지고 있고 bootmgr이 이 여러개의 bcd중에 선택할수 있도록 해주면 되겠죠.
1. bootmgr이 디폴트인 bcd가 아닌 다른 파일을 불러오도록 패치를 단행해야 하는데
bootmgr은 자체 hash를 가지고 있어서 변형이 되면 에러가 나도록 되어 있습니다.
일단 이부분을 무력화시켜야 합니다.
저 같은 경우 Windows7 SP1 의 bootmgr로 적용시켰습니다.
checkrange 0x5db2a read 0x82d8 > nul && write --offset=0x105E (rd)+1 \xEB
menu.lst에 이렇게 넣어도 되고 아예 HxD같은 편집기로 열어서 수정하고 저장해 놓으셔도 됩니다.
(위에 구문은 rd에 로딩한 파일 사이즈가 383,786Byte짜리 bootmgr이라면 0x105E에 0xEB를 기록해라 합니다.)
요즘 WIndows 10 의 bootmgr은 못찾았습니다. 7버젼용이라고 전 별 불편함이 없네요.
2. bcd자체에도 체크하는 부분이 있습니다.
bootice에서는 무결성 검사하지 않음 을 체크하시면 됩니다.
(또는 bcdedit -store bcd -set {bootmgr} nointegritychecks 1)
3. 그리고 이제 menu.lst에 적용시켜 볼까요.
iftitle [if exist /BOOT/WIM/Win7PE.wim] Win7PE\n * Win7PE.wim을 로딩해 부팅합니다.\n\n * 512M일때도 사용할 수 있습니다.\n
map --mem /boot/bootmgr7 (rd)
write --offset=0x54735 (rd)+1 7
chainloader (rd)+1
이렇게 하면 해당위치에 Wim파일이 없다면 아예 이 메뉴 항목이 안 보입니다.
Wim이 있다면 /boot/bc7 이라는 파일을 bootmgr이 불러와서 부팅해 줄겁니다.
또 Win10 을 해봅시다.
iftitle [if exist /BOOT/WIM/Win10PE.wim && if exist /BOOT/b10] Win10PE\n * Win10PE.wim을 로딩해 부팅합니다.\n\n
map --mem /boot/bootmgr7 (rd)
write --offset=0x54733 (rd)+1 1
write --offset=0x54735 (rd)+1 0
chainloader (rd)+1
이거역시 wim파일이 없다면 아예 메뉴항목이 보이지 않고
wim이 있다면 /boot/b10 이라는 파일을 bootmgr이 불러와서 부팅해줍니다.
(물론 사전에 b10파일은 Win10PE.wim을 불러오도록 편집은 해 놓아야겠죠. 무결성도 함께)
이런씩으로 해당 wim에 그 wim만 설정된 bcd파일을 따로따로 관리한다면 훨씬 편해지겠죠.
추가1. grldr을 이용한다면 iso로 바로 부팅할수도 있습니다.
난 폴더 신경쓰지 싫고 그냥 iso로 부팅하고 싶다면
iftitle [if exist %ISOS%/WIN7PE.ISO] WIN7PE ISO\n * WIN7PE - ISO를 메모리에 로딩해 부팅합니다.\n\n * 512M 이하일때는 사용할 수 없습니다.\n
set ISO=%ISOS%/WIN7PE.ISO
ls %ISO% || find --set-root %ISO%
map %ISO% (0xff) || map --mem %ISO% (0xff)
map --hook
chainloader (0xff)/BOOTMGR || chainloader (0xff)
리눅스는 부팅시에 다시 체크하기 때문 partnew방법으로 해야 합니다.
iftitle [set ISOS=/BOOT/ISOS && if exist ISOS] \t iso boot ----------
root
iftitle [if exist %ISOS%/CentOS-7-x86_64-LiveGNOME-1708.iso] CentOS-7-x86_64-LiveGNOME-1708(1.2G)\n * RHEL을 완벽에 가깝게 반영하는 것을 목적으로 만들어진 배포판. \n Yum을 통해 소프트웨어를 업데이트할 수 있으며 사용하는 꾸러미 형식은 RPM이다.\n * GNOME은 편하고 빠릿빠릿하며 직관적인 반면\n GUI 상에서 세팅 가능한 부분이 거의 없다.
set ISO=%ISOS%/CentOS-7-x86_64-LiveGNOME-1708.iso
ls (hd0,3)/ && echo WARNING: PTN TABLE 4 IS ALREADY IN USE! && pause && configfile /boot/grub/menu.lst
ls (hd0,3)/ || partnew (hd0,3) 0 0 0
ls (hd0,0)%ISO% && partnew (hd0,3) 0x00 %ISO%
map %ISO% (0xff)
echo -e \r\n
map --hook
root (0xff)
chainloader (0xff)
리눅스도 partnew를 이용하지 않고 바로 커널로 부팅할수도 있습니다.
iftitle [if exist %ISOS%/tails-amd64-3.6.2.iso] tails 64 3.6.2\n * 테일스(The Amnesic Incognito Live System, TAILS)\n\n * 익명성과 프라이버시를 위한 데비안 기반의 운영 체제
set ISO=%ISOS%/tails-amd64-3.6.2.iso
ls %ISO% > nul || find --set-root --devices=hf %ISO%
map %ISO% (0xff) || map --mem %ISO% (0xff) || map --mem --heads=0 --sectors-per-track=0 %ISO% (0xff)
map --hook
root (0xff)
kernel /live/vmlinuz findiso=%ISO% boot=live config live-media=removable noprompt timezone=ROK block.events_dfl_poll_msecs=1000 splash nox11autologin module=Tails quiet splash
initrd /live/initrd.img
root (bd)
추가2. grldr이 강력하기 때문에 실사용 컴퓨터에서는 별로 사용할일이 없지만 USB에서는 거의 사용하게 되는데요.
USB로 부팅을 했는데 다시 PC의 하드로 부팅하고 싶다면 이렇게 할 수도 있죠.
title Boot from HardDisk\n * 컴퓨터에 장착된 하드디스크로 부팅합니다.
map (hd0) ()
map (hd1) (hd0)
map --rehook
chainloader (hd0)+1
rootnoverify (hd0)
디스크 이미지에 도스용 고스트를 넣어놓고 도스로 부팅해도 되죠.
title Ghost 11\n * Ghost 11.5 - DOS Mode 에서 Ghost를 실행합니다.\n * Mouse를 지원합니다.\n * 도스 부팅시에 USB를 인식하지 못할 수도 있습니다.\n * DATA.IMG파일에 파일을 넣어두면 B:로 인식합니다.
map --mem /BOOT/IMAGES/GHOST11.IMG (fd0)
ls /BOOT/IMAGES/DATA.IMG && map --mem /BOOT/IMAGES/DATA.IMG (fd1)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)