· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Grub4 Dos

grub4dos, USB Memory stick multiboot

이 문서에서 설명하는 내용은 아래와 같다.

  1. OS 설치를 USB 메모리 스틱으로 하고 싶다. CD나 DVD보다 빠르니까.
  2. USB 메모리 스틱 용량이 대용량화 되며 OS 설치 이미지를 여러개 넣을만하다.
  3. 설치할 때마다 이미지 파일 복사해 넣느니 USB 메모리 스틱으로 부팅해서 설치하고 싶은 OS를 선택할 수 있게 할 수 있지 않을까?

위 조건을 충족하는 방법이 있다!! GRUB 등의 부트 로더를 쓰면 된다. 특히 GRUB에선 ISO 파일 그대로 로딩 가능하기도 하다! 여기선 grub4dos를 사용하나, 다른 부트 로더(syslinux 등)를 USB 메모리에 설치하고 부팅할 수 있다면 충분히 가능하리라 본다.

  • 윈도에서 작업했다. grub 설치를 메모리 스틱에 할 수 있다면 리눅스에서도 같은 작업이 가능할 것이다.
  • 리눅스에서 같은 작업을 하려면, grub 복구 명령어를 하드 디스크가 아닌 메모리스틱으로 변경해 실행하면 될 것으로 생각되나 확인하지 못 했다.

불완전한 이 문서를 보고 따라가는 것보단, http://www.pendrivelinux.com/yumi-multiboot-usb-creator/ 를 참조하는 것도 좋겠다.

되는 것과 안 되는 것

iso 이미지로 부팅은 되지만, 제대로 사용 할 수 없는 경우가 많았다. 메모리에 로딩 후에 사용해도 마찬가지. 예를 들면
  1. gpart live cd : 부팅 도중에 /tmp/관련 마운트를 실패
  2. hiren's boot cd 15 : 부팅하여 파티션 관련 프로그램 실행시 문제 발생
  3. IBM BOMC로 만든 펌웨어 업데이트 이미지 : 부팅 도중에 장치 못 찾음.
  4. Windows7 : 포멧 과정에 들어갈 때, 하드 디스크를 찾지 못함(없는 걸로 나온다)

JellyPo의 환경에서만 그랬을 수도 있으니 확인 바랍니다.

준비물

  1. USB 메모리 스틱 : 적당한 용량의 메모리 스틱.
  2. grub4dos : 원 개발자가 누군지 모르겠다. 여러 곳에서 개발 중이라 다소 혼란스럽다. 기능상 큰 차이가 없으니 취향에 맞는 것을 선택한다.
    1. http://sourceforge.net/projects/grub4dos/ grub4dos, 이 글을 작성하는 2011년 11월 현재, 2009/03/31에 업데이트
    2. http://sourceforge.net/projects/grub24dos/ grub24dos, grub2 기반인듯 하다. 2011/10/18에 업데이트
    3. http://code.google.com/hosting/search?q=grub4dos&btn=Search projects 구글 코드에도 여러 갈래가 있다. 소스 포지 쪽보다 활발히 개발 중이고, 중국 개발자들이 개발 중인 것은 멀티바이트 문자 표현 된다(폰트를 따로 넣어줘야 하는듯).
  3. grubinst
  4. 부팅 이미지

여기선 구글 코드의 grub4dos-ireneuszp 으로 설명한다. 가장 평가가 좋은 grub4dos-chenall은 중국어로 된 설명을 읽을 수 없어 이를 선택했다. grub4dos-chenall은 한 화면을 넘어가는 명령어를 편집할 때 오류가 발생함. 이 문서의 grub은 소스 포지의 0.4.4로 테스트 하였음을 밝힙니다.

알아야 할 사항

  1. 당연히! grub에 대한 지식.
  2. 파티션, 포멧, 부트 영역 활성화 등의 지식
  3. grub에서 각 OS나 OS설치 이미지에서 불러와야 할 체인로더나 커널 등이 무엇인지 알아야 함.
    Windows XP/ntldr
    Windows7/bootmgr
    CentOS6 Net install image/isolinux/vmlinuz /isolinux/initrd.img

메모리 스틱 포멧

  1. 검색해보면 특수 툴로 포멧을 한다는 글이 많은데 그렇게 안 해도 잘 됐다.
    1. 다시 확인해보니 윈도에서 그냥 포멧했을 때는 메모리 스틱 부트 영역을 활성화 하지 못한다.
    2. 메모리 스틱을 FAT32로 포멧했으니 bootsect 명령으로 부트섹터 복구를 한다. 메모리 스틱 드라이브명을 미리 확인 할 것.
    3. 윈도 커맨드 라인에서 다음과 같이 입력(Vista 이상에선 관리자 권한으로 cmd 실행)
      bootsect /nt60 f:
      
    4. 아니면 HP USB 포멧 부팅 도구를 다운 받아서 DOS, Windows 부팅 USB 메모리 스틱으로 만든 뒤 GRUB을 설치.
  2. FAT32, 빠른 포멧 사용.
  3. 파티션 나누지 않고 통째로 사용.

grubinst

  1. grubinst_gui.exe 실행(비스타 이상은 관리자 권한으로 실행)
  2. Disk에서 메모리 스틱 선택
  3. Part List 항목 Refresh를 누른 뒤 왼편 선택창에서 'Whole disk (MBR)' 선택(Refresh 누르기 전엔 아무 항목도 없다)
  4. 아래 옵션에서 Don't Search floppy 선택. 플로피를 쓴다면 체크하지 않는다.
  5. Install 버튼 클릭
오류 발생
글 작성자인 JellyPo는 우분투에서 usb-creator를 사용해 메모리 스틱을 포멧 및 우분투 설치 매체로 잠깐 사용했더니 grubinst_gui 에서 오류가 발생했다. 윈도 계열과 리눅스 계열이 MBR 관련된 파티션 작성이 다른 점이 있어 그런듯 하다.
  1. Part List 선택시 Invalid partition table, if you still to install, use the --skip-mbr-test. 오류창.
  2. 무시하고 Whole disk(MBR) 선택하고 istall 누르면 커맨드 창이 뜨고 파티션 테이블 뜨면서
    Partition table
      bt  h0  s0  c0  fs  h1  s1  c1      base      leng
      80  01  01  00  0C  3F  E0  FF        20   1D73FE0
      00  00  00  00  00  00  00  00         0         0
      00  00  00  00  00  00  00  00         0         0
      00  00  00  00  00  00  00  00         0         0
    Partition list
     #  id      base      leng
     0  0C        20   1D73FE0 (15080M)
    grubinst: Bad partition table, if you're sure that the partition list is ok, ple
    ase run this program again with --skip-mbr-test option.
    
  3. 이런 오류가 발생했다.
  4. Option Extra 창에 --skip-mbr-test 를 넣으니 그냥 잘 됨.

grub 복사

이제 메모리 스틱을 보면 아무 파일도 안 보인다. 제대로 된 것 맞다. grubinst는 메모리 스틱 MBR 영역에 쓴 것이므로. 다운 받은 grub4dos 압축을 풀고 grldr과 menu.lst를 복사한다. 다른 버전으로 해볼 때 GRLDR로 대문자로 써야 하는 경우도 있었다.

이제 이 메모리 스틱으로 부팅하면 grub으로 부팅 된다.

OS 설치 파일을 복사하고 해당 설치 파일의 부트로더를 읽어들일 수 있게 하면 grub에서 여러 OS 설치 미디어(원래는 CD나 DVD였을)로 부팅 가능하다. 차후 작성 예정.

멀티 부팅 설정

설치 이미지를 메모리 스틱에 복사하는 방법은 두 가지 방법이 있다.

  1. ISO 파일을 메모리 스틱에 통째로 넣을 때
    • 장점 : 복사하기 편하다.
    • 단점 : 파일시스템에 따라 FAT32의 경우 4기가 초과하는 ISO 이미지 파일을 복사할 수 없다. 파일 단편화 발생시 에러 발생할 가능성이 있다고 함.
  2. ISO 파일을 마운트 후 개별 파일을 메모리 스틱에 복사할 경우
    • 장점 : 4기가 이상 ISO 이미지 파일의 내용물을 복사해 사용 할 수 있다.
    • 단점 : 개별 파일을 복사하는데 시간이 상당히 걸린다.

메모리 스틱 상태
  • /ISO 디렉터리를 만들고 그 안에 .iso 이미지들을 넣었다.
  • / 에 위치한 파일은 grldr과 menu.lst 뿐.

map --mem 옵션은 iso 이미지를 메모리에 다 올리는 옵션으로, iso 이미지를 메모리로 로딩하는 만큼 느려진다. 메모리도 충분해야 하고.

CentOS6 Net install ISO로 부팅

title CentOS 6 Net Install
map /ISO/CentOS-6.0-i386-netinstall.iso (0xff) || map --mem /ISO/CentOS-6.0-i386-netinstall.iso (0xff)
map --hook
chainloader (0xff)

CentOS6 Net install 파일 복사 후 부팅

  • CentOS-6.0-i386-netinstall.iso 마운트 후 /isolinux를 메모리 스틱에 복사한다.
  • pxe 부트 이미지가 같이 들어있는데... 이 경우엔 필요 없는듯 하다.
  • (hd0,0) 같은걸 쓰지 않은 이유는, grub이 있는 디스크를 (hd0,0)으로 인식하기 때문. 지금과 같이 메모리 스틱으로 제대로 부팅 됐다면 굳이 적지 않아도 될 것이다.
  • CentOS6의 경우 kernel 항목 boot 옵션이 없어도 부팅 잘 되었다. 다른 배포판도 잘 될지는 확인하지 못했다.
title CentOS6 Install from memory stick
kernel /isolinux/vmlinuz boot=isolinux
initrd /isolinux/initrd.img

Windows7 ISO로 설치

  • ISO로는 설치할 수 없었다. 설치 과정에 진입은 하지만 하드 디스크가 사라져 버렸다. 시도한 옵션은 아래와 같다.
map /ISO/CentOS-6.0-i386-netinstall.iso (0xff) 
map --hook 
chainloader (0xff)


Windows7 개별 파일로 설치

  • sources, boot, bootmgr만 루트에 복사하고 나면 잘 된다. 다만 디렉터리 위치를 변경할 때는 잘 안 되었다. 명령어를 줘서 경로를 고정하면 될 것도 같은데..
# 이렇게 했을 때는 실패했다. 설치 파일 및 디렉터리가 /win7/에 위치.
title Win7
chainloader /win7/bootmgr


# 설치 파일 및 디렉터리를 /로 이동 후엔 잘 됨.
title Win7
chainloader /bootmgr


예제

  1. hiren boot cd는 메모리 스틱 /HBCD 에 위치
  2. CentOS 5.7 64bit iso 파일이 /iso 에 위치
  3. grldr와 menu.lst는 / 에 위치
# This is a sample menu.lst file. You should make some changes to it.
# The old install method of booting via the stage-files has been removed.
# Please install GRLDR boot strap code to MBR with the bootlace.com
# utility under DOS/Win9x or Linux.

color blue/green yellow/red white/magenta white/magenta
timeout 30
default /default

title CentOS 5.7 64bit Install
find --set-root /iso/centos1.iso
map /iso/centos1.iso (0xff)
map (hd0) (hd1) # 디스크 스왑
map (hd1) (hd0) # 디스크 스왑
map --hook
chainloader (0xff)
rootnoverify (0xff)


title hiren bootcd
find --set-root /HBCD/menu.lst
configfile /HBCD/menu.lst

CentOS iso 이미지 사용시 디스크 스왑을 하는 이유 : 스왑 없이 설치할 경우 메모리 스틱(/dev/sdb)이 (hd0)으로, CentOS 설치 된 디스크 /dev/sda를 (hd1)로 설정되기 때문.

하드 디스크가 하나 일 때만 테스트 했기 때문에 여러개일 경우 어떻게 동작할지 보장 못함.


참고항목 GRUB

ID
Password
Join
Nobody expects the Spanish Inquisition!


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-12-03 19:16:42
Processing time 0.0074 sec