우선 위에서 하나 문제가 될 수 있는 것이 파일명에서의 공백문자입니다.
따옴표로 둘러싸 보시지요.
여러 ISO로 부팅하시길 원하신다면, GRUB2와 Grub4DOS를 함께 사용하는 것을 추천하고 싶습니다.
왜냐면 GRUB2에서는 본쉘과 유사한 문법의 스크립팅을 지원하기 때문입니다.
Grub4DOS는 기본적으로 스크립팅을 지원하지 않지만, google의 chenall 유저가 업데이트하고 있는 버전의 경우
DOS 배치스크립트 유형의 스크립팅을 지원하긴 합니다.
-
사전 준비 작업
USB의 최상위 디렉토리에, grub4dos, ubuntu-cd, boot-images 디렉토리를 만드세요
grub4dos 압축파일을 풀어 grub4dos 디렉토리에 넣으세요 (grub4dos 디렉토리에 GRUB.EXE가 있어야 합니다)
grub4dos 디렉토리로 부터, grldr, grldr.mbr 파일을 USB의 최상위 디렉토리에 복사하세요
우분투 시디 이미지들은 ubuntu-cd 디렉토리에,
나머지 ISO파일들은 boot-images 디렉토리에 넣으세요
윈도우즈에서 USB를 조각모음 하세요. wincontig등의 파일 조각모음 프로그램을 사용하셔서 boot-images 폴더만 조각모음 하셔도 됩니다.
이제, USB를 뽑고, 우분투 라이브시디나 우분투로 부팅하세요
-
USB 마운트
USB를 꽂으신 후, 터미널을 여신 후, 터미널에서 다음과 같이 입력하세요.
[code:3pot0w1z]
mkdir t
sudo mount /dev/sdb1 t
[/code:3pot0w1z]
- GRUB2설치
[code:3pot0w1z]
sudo mkdir t/boot
sudo grub-install --force --boot-directory=t/boot /dev/sdb
[/code:3pot0w1z]
- "Chainload Grub4DOS" 메뉴에 대한 부트메뉴 편집
[code:3pot0w1z]
sudo gedit t/MENU.LST
[/code:3pot0w1z]
개인적으로 GRUB4DOS로 체인로드 했을 경우에 사용할 메뉴를 편집하세요.
- 부트메뉴 편집
[code:3pot0w1z]
sudo gedit t/boot/grub/custom.cfg
[/code:3pot0w1z]
t/boot/grub/grub.cfg를 편집하셔도 됩니다.
[code:3pot0w1z]
iso64="/ubuntu-cd/ubuntu-13.04-desktop-amd64.iso"
iso32="/ubuntu-cd/ubuntu-13.04-desktop-i386.iso"
bootopts="boot=casper locale=ko_KR.utf8 file=/cdrom/preseed/ubuntu.seed quiet splash noprompt noeject –"
instopts="locale=ko_KR only-ubiquity"
ramdopts="toram root=/dev/shm"
iso_dir=/boot-images
insmod part_msdos
insmod fat
insmod ext2
insmod ntfs
search -s grub4dos_dev -f /grub4dos/grub.exe
iso_dir=/boot-images
function boot_legacy_iso {
set iso_file="$1"
set iso_dir2="$2"
if [ -z "$2" ]; then
set iso_dir2=/boot-images
fi
set boot_legacy_cmd=""find --set-root ${iso_dir2}/${iso_file}; map ${iso_dir2}/${iso_file} (0xff); map --hook; chainloader (0xff)""
linux16 ($grub4dos_dev)/grub4dos/grub.exe --config-file=""find --set-root ${iso_dir2}/${iso_file}; map ${iso_dir2}/${iso_file} (0xff); map --hook; chainloader (0xff)""
}
menuentry ‘Ubuntu Live’ {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod loopback
search -s -f $iso64
linux /casper/vmlinuz persistent iso-scan/filename="${iso64}" $bootopts
initrd /casper/initrd.gz
}
menuentry ‘Boot Ubuntu 13.04 from ISO (AMD64)’ {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod loopback
search -s -f $iso64
loopback lo $iso64
linux (lo)/casper/vmlinuz iso-scan/filename="${iso64}" $bootopts
initrd (lo)/casper/initrd.lz
}
menuentry ‘Boot Ubuntu 13.04 with RAMDISK from ISO (AMD64)’ {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod loopback
search -s -f $iso64
loopback lo $iso64
linux (lo)/casper/vmlinuz iso-scan/filename="${iso64}" $ramdopts $bootopts
initrd (lo)/casper/initrd.lz
}
menuentry ‘Install Ubuntu 13.04 from ISO (AMD64)’ {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod loopback
search -s -f $iso64
loopback lo $iso64
linux (lo)/casper/vmlinuz iso-scan/filename="${iso64}" $instopts $bootopts
initrd (lo)/casper/initrd.lz
}
menuentry ‘Install Ubuntu 13.04 with RAMDISK from ISO (AMD64)’ {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod loopback
search -s -f $iso64
loopback lo $iso64
linux (lo)/casper/vmlinuz iso-scan/filename="${iso64}" $instopts $ramdopts $bootopts
initrd (lo)/casper/initrd.lz
}
menuentry ‘System rescue CD’ {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod loopback
search -s -f /boot-images/SystemRescueCD.iso
loopback lo /boot-images/SystemRescueCD.iso
linux (lo)/isolinux/rescuecd isoloop="/boot-images/SystemRescueCD.iso"
initrd (lo)/isolinux/initram.igz
}
menuentry ‘Chainload GRUB4DOS’ {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
search -s -f /grub4dos/grub.exe
linux16 /grub4dos/grub.exe
}
menuentry ‘Acronis Tools’ {
boot_legacy_iso acronis.iso
}
menuentry ‘Hirens Boot CD’ {
boot_legacy_iso Hirens.BootCD.iso
}
menuentry ‘snoopy Ghost’ {
boot_legacy_iso snoopy.Ghost.iso
}
menuentry ‘Mini Windows 7’ {
boot_legacy_iso Win7pe.iso
}
menuentry ‘MiniTool_PatitionWizard_HomeEdition’ {
boot_legacy_iso MiniTool.PartitionWizard.HomeEdition.iso
}
menuentry "ArchiLinux Live(AMD64)" {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod loopback
isofile=/ubuntu-cd/archlinux-2011.08.19-core-dual.iso
search -s -f $isofile
loopback lo $isofile
linux (lo)/arch/boot/x86_64/vmlinuz earlymodules=loop img_dev=/dev/sda1 img_loop="${isofile}" archisolabel=ARCH_201108 ramdisk_size=75%
initrd (lo)/arch/boot/x86_64/archiso.img
}
submenu "Boot from ISO" {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod regexp
insmod functional_test
insmod normal
search -s grub4dos_dev -f /grub4dos/grub.exe
iso_dir=/boot-images
export grub4dos_dev
export iso_dir
for img in (hd0,1)$iso_dir/*.iso;
do
regexp -s img_name "^.*/([^/]*)\$" $img
menuentry "$img_name" --source="boot_legacy_iso $img_name"
done
}
menuentry "Linux (Auto-detect)" {
insmod part_msdos
insmod ext2
insmod extcmd
insmod search
set grub_bootdev=""
set grub_rootdev=""
search -s grub_rootdev -f /sbin/init
if ! search -s grub_bootdev -f /boot/grub/grub.cfg; then
search -s grub_bootdev -f /grub/grub.cfg
fi
for f in ($grub_bootdev)/vmlinuz* ($grub_bootdev)/boot/vmlinuz*; do set kernel=$f; break; done
for f in ($grub_bootdev)/initrd* ($grub_bootdev)/boot/initrd*; do set initrd=$f; break; done
set root=$grub_bootdev
probe -s rootuuid $grub_rootdev -u
linux $kernel root=UUID=$rootuuid quiet splash
initrd $initrd
}
menuentry "Windows XP/2k NTLDR (Auto-detect)" {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod ntldr
#search -s grub4dos_dev -f /grub4dos/grub.exe
#linux16 ($grub4dos_dev)/grub4dos/grub.exe --config-file=""map () (hd0)\; map (hd0) ()\; map --hook\; find --ignore-floppies --ignore-cd --set-root /ntldr\; chainloader /ntldr""
search -s -f /ntldr
ntldr /ntldr
}
menuentry "Windows 7/8/Vista BootMgr (Auto-detect)" {
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod ntldr
#search -s grub4dos_dev -f /grub4dos/grub.exe
#linux16 ($grub4dos_dev)/grub4dos/grub.exe --config-file=""map () (hd0)\; map (hd0) ()\; map --hook\; find --ignore-floppies --ignore-cd --set-root /bootmgr\; chainloader /bootmgr""
search -s -f /bootmgr
ntldr /bootmgr
}
[/code:3pot0w1z]
- 리부팅
[code:3pot0w1z]
sudo umount t
sudo umount -a
sudo shutdown -r now
[/code:3pot0w1z]
- 커스터마이징
menuentry … "메뉴" {
…
}
이 부분이 메뉴 아이템이며, 원하시는 대로 메뉴명을 편집하시거나, 필요 없으시면, 이 블럭을 삭제하시거나, 새로운 블럭을 추가하셔도 됩니다.
"Chainload Grub4DOS" 메뉴는 부트로더를 GRUB2에서 Grub4DOS로 전환하며, 이때 MENU.LST가 사용됩니다.
iso64와 iso32 변수는 사용할 우분투시디이미지의 위치로 설정해 주시고, 32비트를 사용하시는 경우라면,
$iso64대신 $iso32로 변경해 주시면 됩니다.
"Boot from ISO"를 선택하시면, /boot-images 디렉토리의 목록이 서브메뉴로 보여지고,
선택하시면, grub.exe를 이용하여 ISO로 부팅합니다.
/boot-images에 파일을 추가하실 경우, 조각모음을 해주세요.
이것은 GRUB4DOS가 ISO파일로 직접 부팅하기 위해 필요합니다.
디스크가 여러 개 이고, USB내에 파티션이 여럿일 경우, USB디스크 장치가 sdb가 아닐 수 있습니다.
USB 디스크의 장치명을 잘 모르실 경우, 다음과 같이 알 수 있습니다.
[code:3pot0w1z]
is_usb_disk() {
udevadm info -q property -n $1|grep ID_BUS|grep usb > /dev/null
}
for f in /dev/sd?; do $f && continue || echo $f && break; done
[/code:3pot0w1z]
sda는 첫번째, sdb는 두번째 디스크를 의미하며, sdb1은 두번째 디스크의 첫번째 파티션, sdb2는 두번째 디스크의 두번째 파티션을 의미합니다.
만일 디스크 라벨을 설정하신 경우라면,
sudo blkid 명령으로 알아내실 수 도 있습니다.