移行作業中です...

はてなブログの該当ページへリダイレクトします。お手数をおかけします。ご容赦ください。

GRUB for DOS めも

2007.8.1 作成
2007.12.16 USBメモリでの起動について訂正追記。
2007.2.10 (PXE)ネットワークブートについて追記。
2009.1.22 USBメモリのPBRへインストール を追記。
CDイメージの起動 を追記。
2009.1.30 HDイメージの起動を追記。
2010.3.14 HDに保存した Linux LiveCD 起動, CDイメージの起動 を追記改訂。
最終更新日 2012.3.4

はてなブックマーク

【ご注意】テスト版(開発版)もダウンロードできますが、固まったり、全く起動しないことがあったりで、結構不具合多いように思います。新機能やbug fixあったりしますが使用の際はご注意。(※0.4.4正式版リリース前に開発版使ってたんですが不具合多かったです。正式版ではキッチリ直ってる模様ですけど。)

NTFS関連(grub.exe だけ?)のバグ?

0.4.4 では問題なさそうです(今んとこ)。

※下記の組み合わせでWindows XPを起動させると非常にスローモーになるというバグ(?)がありました。(※環境次第かもしれませんが...)

  • (USBメモリ)SYSLINUX grub.exe バージョン 0.4.2 と 0.4.3
  • (CD)ISOLINUX grub.exe バージョン 0.4.2 と 0.4.3
  • (ネットワーク)PXELINUX grub.exe バージョン 0.4.2 と 0.4.3

よって、SYSLINUX,PXELINUX からチェインロードする場合は、memdisk + FDイメージ(または grub.exe 0.4.1)を使うのが安全かも。CDなら、BCDW + grldr で。

概要

ドキュメント

htm及びchmファイルがダウンロード可能

grubinst.exe

Windows上でFDやUSBメモリ、イメージファイルへGRUBブート・コード書き込み。(※ menu.lst , grldr は手動コピー)

  • ダウンロード:
GUIツール

取り扱い注意」ですけど。

オリジナルの GRUB と違う点はこんなとこかな。

かなり「使える」と思いました。

menu.lst

  1. ファイルの先頭部分
  2. エントリ(選択項目)を書く
  3. JPキーボードに対応
  4. 設定ファイルの切替
  5. 文字色指定
  6. HDに保存した Linux LiveCD 起動
【超私的】menu.lst

ごちゃまぜですが。

ファイル名は menu.lst にリネームしてくだされ。

【基本ですが】改行コードのこと

配布ファイルに付属の menu.lst は改行コードがLinux標準の【LF】(※ Windows 標準は【CR+LF】)となってるので Windows のメモ帳では正しく表示できません。ワードパッドではおkですが他のLF対応テキストエディタの使用をマジでおすすめします。ワードパッドに比べめちゃ便利なので。

私は EdTex 3.11(フリー)と秀丸エディタ(シェアウェア)ですが、他にフリーならサクラエディタとかTeraPadとかがオススメかなぁ?

EdTex 3.11 は個人的にはサイコーに便利なのですが、ユニコード非対応とか秀丸に比べるとチト欠点があったり。

尚、改行コードは【CR+LF】でも問題なく使えてます。

【追記】menu.lst の優先順位は?

間違ってたので修正しました。

GRUBがブートしたデバイス上にない場合は、CD,FD以外から(HD, USBメモリなど)

  1. /menu.lst
  2. /boot/grub/menu.lst
  3. /grub/menu.lst
title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
errorcheck off
configfile /menu.lst
configfile /boot/grub/menu.lst
configfile /grub/menu.lst
find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
errorcheck on
commandline
Grub4dos Guide - Embedded Menu

ファイルの先頭部分

color white/blue yellow/cyan
default 0
timeout 60
splashimage=(hd0,0)/robin.gz
----以下略----
color white/blue yellow/cyan
timeout 30
splashimage=(hd0,0)/robin.gz
default /default
----以下略----

エントリ(選択項目)を書く

root コマンドで選択パーティションを指定してファイル名を記述するか、(hd0,0)/boot のように直接パーティションを含めたパスで記述する。

Linuxなど - kernelとinitrdを指定
title Linux
      root (hd1,1)
      kernel /vmlinuz ro root=/dev/hdb3 vga=0x318
      initrd /initrd.img
ブートセクタへ処理を渡す - Windows or ブートセクタにブートローダがある場合
title chainload (hd0,0)
      chainloader (hd0,0)+1
      rootnoverify (hd0,0)
ファイルを検索して設定
  • ntldr (Windows XP/2000) を検索してチェインロード
title find and load NTLDR of Windows NT/2K/XP
      find --set-root /ntldr
      chainloader /ntldr
  • bootmgr (Windows Vista/7) を検索してチェインロード
title find and load BOOTMGR of Windows Vista/7
      find --set-root /bootmgr
      chainloader /bootmgr
第2HDから Windows の起動

※ USBメモリブートの場合も。

Windows は第2HDの NTLDR, BOOTMGR から起動できないので入替指定。

  • ntldr (Windows XP/2000) を検索してチェインロード
title find and load NTLDR of Windows NT/2K/XP
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr
  • bootmgr (Windows Vista/7) を検索してチェインロード
title find and load BOOTMGR of Windows Vista/7
find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /bootmgr
  • menu.lst を検索して切替
title find /menu.lst
      find --set-root --ignore-floppies /menu.lst
      configfile /menu.lst
title find /boot/grub/menu.lst
      find --set-root /boot/grub/menu.lst
      configfile /boot/grub/menu.lst
title find /grub/menu.lst
      find --set-root /grub/menu.lst
      configfile /grub/menu.lst
  • GRUB2 をチェインロード
title chainload GRUB2
      find --set-root /boot/grub/core.img
      kernel /boot/grub/core.img
  • --ignore-floppies - FDを除外
  • --ignore-cd - CDを除外
2台めのHDドライブからの起動

chainloader コマンドだけではだめな場合は、HDの順番を入れ替えてみるとか。

title chainload hdb(sdb) MBR
      map (hd0) (hd1)
      map (hd1) (hd0)
      map --hook
      chainloader (hd0)+1
      rootnoverify (hd0)

または、chainloader (hd0,0)+1 とか。

halt / reboot
  • 再起動
title reboot
      reboot
  • シャットダウン
title halt
      halt
ネットワークブート用イメージでブート
  • ROM-o-matic.netで対応ROM (LILO/GRUB/SYSLINUX loadable kernel format) をダウンロードしてパーティションのルートにコピー
title Network Boot from ROM
      find --set-root /netboot.zli
      kernel /netboot.zli
Linux インストーラの起動
  1. ネットワークインストール用 kernelinitird をダウンロード
  2. パーティションのルートにコピー
  • Debian stable, Ubuntu lucid の例 (x86)
title Linux Installer
find --set-root /linux
kernel /linux vga=normal locale=ja_JP
initrd /initrd.gz

JPキーボードに対応

※ 完全じゃないけど...

color white/blue yellow/cyan
timeout 30
splashimage=(hd0,0)/robin.gz

# jp106 keypad
setkey at bracketleft
setkey doublequote at
setkey ampersand caret
setkey quote ampersand
setkey parenleft asterisk
setkey parenright parenleft
setkey underscore parenright
setkey equal underscore
setkey plus colon
setkey colon quote
setkey asterisk doublequote
setkey bracketleft bracketright
setkey braceleft braceright
setkey bracketright backslash
setkey braceright bar
setkey backslash backquote
setkey tilde plus
setkey caret equal
setkey backquote braceleft
setkey bar tilde
----以下略----

設定ファイルの切替

エントリ(起動項目)が多い場合や、HDの menu.lst に切り替えたい場合など。

title configfile (fd0)/menu.lst
      configfile (fd0)/menu.lst
title configfile /boot/grub/menu.lst
      find --set-root /boot/grub/menu.lst
      configfile /boot/grub/menu.lst
title configfile /grub/knoppix.conf
      find --set-root /grub/knoppix.conf
      configfile /grub/knoppix.conf

文字色指定

color white/blue yellow/cyan

menu.lst画面

HDに保存した Linux LiveCD 起動

KNOPPIX (※産総研版 5.3.1CD)
  1. KNOPPIX ディレクトリをドライブのルートにコピー
  2. /boot/isolinux ディレクトリの内容を KNOPPIX ディレクトリへコピー

※ メモリが 1GB 以上でない場合は toram を外す。

title KNOPPIX531CD 
find --set-root /KNOPPIX/linux
kernel /KNOPPIX/linux ramdisk_size=100000 init=/etc/init lang=ja apm=power-off vga=791 nomce highres=off loglevel=0 libata.atapi_enabled=1 quiet SELINUX_INIT=NO nmi_watchdog=0 toram
initrd /KNOPPIX/minirt.gz
Berry Linux

※ 0.97 の例

  1. BERRYディレクトリをドライブのルートにコピー
  2. Setup ディレクトリの vmlinuzinitrd.gzBERRY ディレクトリへコピー
title Berry Linux
find --set-root /BERRY/BERRY
map --mem /BERRY/boot.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

または...

title Berry Linux
find --set-root /BERRY/vmlinuz
kernel /BERRY/vmlinuz cdrom lang=ja video=vesa:ywrap,mtrr vga=785 splash=silent overlay=/berry/berry.img memboot 
initrd /BERRY/initrd.gz

※ メモリが 1GB 以上でない場合は memboot を外す。

SLAX (※ slax-ja版 slax-ja-6.1.1-2.iso)
  1. ドライブのルートに slax6 ディレクトリを作成
  2. CD(isoイメージ)の内容丸ごと slax6 ディレクトリにコピー
  3. from オプションでディレクトリを指定

※ メモリが 512MB 以上でない場合は copy2ram を外す。

title slax-ja-6.1.1-2
find --set-root /slax6/boot/vmlinuz
kernel /slax6/boot/vmlinuz ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;telinit~4 changes=/slax/ iocharset=utf8 codepage=932 from=slax6/ copy2ram
initrd /slax6/boot/initrd.gz
Puppy Linux
  1. ドライブのルートに puppy ディレクトリを作成
  2. CD(isoイメージ)の内容をすべてそこへコピー
  3. psubdir オプションでディレクトリ指定
title Puppy Linux
find --set-root /puppy/vmlinuz
kernel /puppy/vmlinuz psubdir=puppy
initrd /puppy/initrd.gz
Clonezilla live

※ ヴァージョン 1.2.3-27 の例

  1. ドライブのルートに clonezilla ディレクトリを作成
  2. CD(isoイメージ)の内容をすべてそこへコピー
  3. live-media-path オプションでディレクトリ指定
title Clonezilla live
find --set-root /clonezilla/live/vmlinuz
kernel /clonezilla/live/vmlinuz boot=live union=aufs noswap nolocales noprompt ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="ja_JP.UTF-8" vga=791 ip=frommedia toram=filesystem.squashfs live-media-path=/clonezilla/live
initrd /clonezilla/live/initrd.img
CDlinux
  1. ドライブのルートに CDlinux ディレクトリをコピー
title CDlinux-0.9.5 Community
find --set-root /CDlinux/bzImage
kernel /CDlinux/bzImage CDL_LANG=ja_JP.UTF-8
initrd /CDlinux/initrd
SystemRescueCd

※ ヴァージョン 1.4.0 の例

  1. ドライブのルートに sysres14 ディレクトリを作成
  2. CD(isoイメージ)の内容をすべてそこへコピー
  3. subdir オプションでディレクトリ指定
title SystemRescueCd 1.4.0
find --set-root /sysres14/isolinux/rescuecd
kernel /sysres14/isolinux/rescuecd scandelay=5 setkmap=jp dodhcp docache subdir=sysres14
initrd /sysres14/isolinux/initram.igz

コマンド

GRUB for DOS - commandline

Tab キーでの補完機能あり。何も入力せずに Tab を押すと使用可能コマンド表示。cha と打った後に Tab を押せば chainloader と表示。

※注:ls など一部は 0.4.4 以降のみ。

find (hd0,0)/などと打った後にTabキーを押すとディレクトリ内容一覧表示。

grub> geometry (hd0)
drive 0x80(LBA): C/H/S=244/255/63, Sector Count/Size=3919860/512
   Partition num: 0, active,  Filesystem type is fat, partition type 0x0E

grub> geometry (hd1)
drive 0x81(LBA): C/H/S=1024/15/63, Sector Count/Size=967680/512
   Partition num: 0, active,  Filesystem type is ntfs, partition type 0x07
   Partition num: 1,  Filesystem type is fat, partition type 0x0B
grub> makeactive (hd1,0)
Partiton (hd1,0) successfully set active
cdrom --init
map --hook
chainloader (cd)
rootnoverify (cd)
boot

※0.4.3以降ではコマンド不要かも。(cd0),(cd1)の場合もあるかも。

他のブートローダからチェインロード

それぞれ、USBメモリでの起動CDでの起動(PXE)ネットワークブート の項目にも書いとりますが。Windows については次の Windows ブートメニューに追加 にて。

grub.exe or grldr をルート (/) に置いた場合です。

title GRUB for DOS
root (hdx,x)
kernel /grub.exe --config-file="find --set-root /menu.lst;configfile /menu.lst"
menuentry "GRUB for DOS" {
insmod ext2
search --file --set=root /grub.exe
linux /grub.exe
}

※ GRUB2 ではパーティションは1から数えるので注意!

LABEL grub4dos
KERNEL /grub.exe
APPEND --config-file="find --set-root /menu.lst;configfile /menu.lst"
LABEL grub4dos
BOOT /grldr
LABEL grub4dos
KERNEL /chain.c32
APPEND file=/grldr
LABEL grub4dos.pxe
KERNEL /grub.exe
APPEND keeppxe --config-file="pxe basedir /;configfile (pd)/menu.lst"
\grldr   ; grub4dos

Windows ブートメニューに追加

Windows XP / 2000

Windows XP/2000/2003 では NTLDR からチェインロードできます。

  1. Cドライブのルートなど、ntldr が置かれている場所に grldr, menu.lst0.4.2以降では default)を保存する
  2. boot.ini にエントリを追記
  3. OSブート時にメニューから選択起動
[boot loader]
timeout=10
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" /fastdetect /NoExecute=OptIn
C:\grldr="GRUB for DOS"

boot.ini は「マイ コンピュータ」右クリックでプロパティ、「詳細設定」タブ「起動と回復」の設定ボタン、「編集」ボタンで編集可能です。

コマンド プロンプトだとこんなかんじで。

set bootini=C:\boot.ini
attrib -h -s -r %bootini%
if not exist %bootini%_default.txt copy %bootini% %bootini%_default.txt
if exist %bootini%_default.txt copy %bootini% %bootini%_%random%.txt
echo:>>%bootini%
echo C:\grldr="GRUB for DOS">>%bootini%
attrib +h +s +r %bootini%
notepad %bootini%

Windows 7 / Vista

Vista/7/2008 など bootmgr からチェインロードするには

  1. コマンド プロンプトを「管理者として実行」
  2. bcdedit コマンド実行 - 既存設定をエクスポート、起動エントリを追加
  3. grldr , grldr.mbr , menu.lstC:\ にコピー
【注意】“device”の指定

device”では grldr を置いた場所(パーティション)を指定してます。

  • device partition=C: - C:\Boot なしの場合、現在のOS上のドライブ文字を指定
  • device boot - C: がアクティブで C:\Boot あり
C:Boot ディレクトリがない場合

DELL の Studio 540 で確認しました。隠しパーティションがブート(アクティブ)パーティションとなっているため、C: には Boot ディレクトリや bootmgr がありませんでした。「システムで予約済み領域」領域がある場合も同様になります。

set back_dir=C:\BCD_backup
mkdir %back_dir%
bcdedit /export "%back_dir%\bcd"
for /f "tokens=2 delims={}" %x in ('bcdedit /create /d "GRUB for DOS" /application bootsector') do set "guid={%x}"
bcdedit /set %guid% device partition=C:
bcdedit /set %guid% path \grldr.mbr
bcdedit /displayorder %guid% /addlast
bcdedit /v
C:Boot ディレクトリがある場合

追加で 7 をインストールしてマルチブートしている場合などはアクティブ・パーティション(※ C: とは限らない)に Boot ディレクトリがあるはずです。

set back_dir=C:\Boot\BCD_backup
mkdir %back_dir%
bcdedit /export "%back_dir%\bcd"
for /f "tokens=2 delims={}" %x in ('bcdedit /create /d "GRUB for DOS" /application bootsector') do set "guid={%x}"
bcdedit /set %guid% device boot
bcdedit /set %guid% path \grldr.mbr
bcdedit /displayorder %guid% /addlast
bcdedit /v

または、起動領域(boot ディレクトリや BOOTMGR のあるパーティション)に boot.ini を置く方法でもいけました。

「システムで予約済み領域」などに boot.ini を置く

通常のインストールの Windows 7 では「システムで予約済み領域」から起動しますが、Windows 上ではドライブレターが割り当てされていないのでエクスプローラーで表示されません。また、メーカー製PCでは同様に Windows 上で表示されない「RECOVERY」などリカバリー用領域から起動する場合もあります。

※ 起動領域は「ディスクの管理」画面で「正常 (システム, アクティブ)」と表示されます。

  • boot.ini 作成
[boot loader]
timeout=100
[operating systems]
C:\grldr.mbr="GRUB for DOS"
  1. ディスクの管理 (diskmgmt.msc) 起動
  2. 「システムで予約済み領域」などを右クリックして「ドライブ文字とパスの変更」から「追加」で X: などにドライブ文字割り当て
  3. X: ドライブのルートへ下記をコピー
    • boot.ini
    • grldr
    • grldr.mbr
  4. X: ドライブを右クリック「ドライブ文字とパスの変更」から削除
  5. menu.lst は C: のルートへコピー

ブートFD

  1. 【基本的】起動FD作成
  2. fat12grldr.img
  3. grub.exe
  4. grubinst.exeで作成

オリジナルのGRUB起動ディスクと違う点は、NTFSを認識可能なこと。menu.lstntldr を検索してrootとして設定できることやCDドライブの認識(※0.4.2以降)できることとかかな?

DOSイメージではEMM386を使うとだめらしい。

【基本的】起動FD作成

基本的な起動ディスク作成は...

  1. ダウンロード
  2. 展開して 0.4.2 の fat12grldr.imgRawWrite for Windows などでFDへ書き込み
  3. 0.4.4 の grldrmenu.lst をFDへ上書きコピー

他に小さなツール類とか追加するなら(一例ですが...)

fat12grldr.img

※0.4.3, 0.4.4 には入ってません。

ダウンロードしたファイルに同梱のFDイメージ(FAT版)

0.4.2の default ファイルってなんなのかな?(汗) 設定を保存するためのファイルの模様fallback 1とかのやつは、失敗したら2番目(※0から数える)のエントリへ移動って意味らしい。別になくてもいいかも。

menu.lst - Windows XP 緊急起動ディスク - FDの ntldr(boot.ini) から起動
  • ntldr, ntdetect.com, boot.ini, bootfont.bin をコピー(※大文字・小文字に注意)
title NTLDR from FD (fw)
      chainloader (fd0)/ntldr
menu.lst - ネットワークブート用イメージでブート
  • ROM-o-matic.net で対応ROM (LILO/GRUB/SYSLINUX loadable kernel format) をダウンロードしてコピー
title Network Boot from ROM
      find --set-root /gpxe.krn
      kernel /gpxe.krn

grub.exe

DOS起動ディスクや syslinux 起動ディスク上で実行可能。

menu.lst の書式は grldr 版と同じ。

DOS起動ディスク

0.4.1 + DOS起動ディスクでは、MS-DOS(98/XP)、FreeDOSDR-DOSとも起動できず。0.4.2ではXP版MS-DOS以外OK。EMM386を組み込むとだめ。

  • grub.exe , menu.lst , default(※0.4.2以降)をDOSディスクにコピー
  • DOS起動後に入力するか、AUTOEXEC.BATに書く。
SYSLINUX起動ディスク

syslinux で使う場合は、0.4.2 だと勝手に検索が始まって、HD上の menu.lst が読み込まれたりしたので 0.4.1 の方を使う方がいいかもしれない(※ configfile (fd0)/menu.lst などと打てば menu.lst の切替可能ですけど)。

  • grub.exe , menu.lst , default(※0.4.2以降)syslinux 起動ディスクにコピー
  • syslinux.cfg にエントリを書く
  • syslinux 起動ディスク作成
syslinux.exe A:

※間違って C: とかやっちゃうとWindowsが起動しなくなるので注意!

  • syslinux.cfg
default grub.exe
append --config-file="configfile (fd0)/menu.lst"
prompt 0

grubinst.exeで作成

0.4.3以降にはFDイメージが同梱されてないので(※あったりしますが)、Windows上なら grubinst.exe で作成可能。DOS,SYSLINUX起動ディスクでもいいような気もしますが...

grubinst.exe --pause --verbose --floppy (fd0)

menu.lst , grldr は手動コピー

ブートCD

  1. GRUB for DOS 入り Linux LiveCD
  2. 【私的】isoイメージ作成方法

BCDW (Bootable CD Wizard) を使うのが簡単かな。

\grldr   ; Grub4Dos

mkisofs で直接isoイメージ作成する場合は下記の方法でいいようです。

mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root

または

mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root
ファイル名の大文字・小文字

CDブートでは区別されるようです。Windows上のCDではすべて大文字で見えてることもあるのでご注意。

BCDW や ISOLINUX では問題なくても、この GRUB ではファイルが見つからないなんてことがあります。

GRUB for DOS 入り Linux LiveCD

ブートローダが GRUB for DOS 0.4.4 になってました。

1枚持っときませう。日本語版です。

メニューから日本語選択、日本語名ファイルなど表示可、Firefoxで日本語ページ表示可。結構使えるかも。

Windows の再インストールで GRUB 消えちゃったな場合に Linux 起動ディスクとして使えますYO!。

メニュー画面で C キー押してコマンドラインから下記を打ちませう。

find --set-root --ignore-cd /boot/grub/menu.lst
configfile /boot/grub/menu.lst
find --set-root /boot/grub/core.img
kernel /boot/grub/core.img

【私的】isoイメージ作成方法

作業ディレクトリ
|   grldr
|   menu.lst
|
\---makeiso
        cygwin1.dll
        make_iso_grub4dos.bat
        mkisofs.exe

make_iso_grub4dos.batの 実行で一つ上のディレクトリに grub4dos.iso が作成される。

mkisofs のオプションは下記の通りにしてます。ファイル名について警告が出ることがあるので環境によっては問題が出るかも。

mkisofs -R -J -b grldr -V GRUB4DOS -no-emul-boot -boot-load-size 4 -o "%iso%" .

USBメモリでブート

  1. SYSLINUX からチェインロード
  2. USBメモリのPBRへインストール

3通りの方法で確認してみましたが、BIOSの対応(USBメモリがHD扱いとなるのか、FD扱いなのかとか)及びUSBメモリの仕様(パーティションの構成が色々あるようです)によってなのか、一部の機能が使えなかったりしたので、基本的には対応していないということなのかもしれません

勉強が足りません...(汗)。

USBメモリは第1HDとしてブートする?

USBメモリからブートした際は、USBメモリが hd0 となる場合が殆どだと思われます。HDを操作するには map コマンドで入替が必要になるかも。入替しないとHDが見えないかも...

map (hd0) (hd1)
map (hd1) (hd0)
map --hook
root (hd1,0)
configfile /menu.lst

HDが2台ある場合は、hd2

map (hd0) (hd2)
map (hd1) (hd0)
map (hd2) (hd1)
map --hook
root (hd2,0)
configfile /menu.lst
grubinst.exe でMBRへインストール

※ 私自身もよく理解できてませんが、間違うと大変なので実行する際はhelpなどをよく確認した上にて...

これがごく普通の(?)方法かな。grldr, menu.lst は手動コピーします。

USBメモリの仕様によるものなのか、機種によってはgrldrが見つからないエラーが出てGRUBが起動しないことがありました。

USBメモリ内のFDイメージをブート

※ SYSLINUX + memdisk の方が簡単な気もしますが。

title boot on USB-Key fdimage
      find --set-root /fdimage.img
      map --mem /fdimage.img (fd0)
      map --hook
      chainloader (fd0)+1

Windows XP(2000)緊急起動ディスクやXP版MS-DOS起動ディスクなど、memdisk の raw オプションを指定する必要があるかも?

title boot on USB-Key fdimage (memdisk raw)
      find --set-root /memdisk
      kernel /memdisk raw
      initrd /winboot.img
  • 0.4.2以降では Indirect mapping で --memdisk-raw=1 なオプションも指定可能
title boot on USB-Key fdimage (Indirect map raw)
      find --set-root /floppy.img
      map --memdisk-raw=1
      map --mem /floppy.img (fd0)
      map --hook
      chainloader (fd0)+1

SYSLINUX からチェインロード

SYSLINUX から grub.exe をチェインロードできます。

この方法だと Windows上 で簡単に実行できます。SYSLINUXでマルチブートしてる場合とか楽かも。

※ BIOSの認識はHD扱い、FD扱い、どちらでもブート可能です。

0.4.2, 0.4.3 の grub.exe はちょと危険?

0.4.4 では問題なさそうです(今んとこ)。

バージョン 0.4.2 と 0.4.3 の grub.exe では ntldr などをチェインロードした際、Windows の起動が非常にスローになってしまうというトラブルが発生しました(※ チェインロードで起動した時のみ)。0.4.1 の grub.exe では、私の環境では問題は出ていませんが少し危険かもしれません。

  1. USBメモリのルートに grub.exemenu.lst をコピー
  2. USBメモリへ SYSLINUX をインストール
  3. syslinux.cfg 作成
DEFAULT grub
PROMPT 0

LABEL grub
LINUX /grub.exe
APPEND --config-file="configfile /menu.lst"
SYSLINUX + memdisk + FDイメージ

これは安全な方法かもしれない(?)。但し、機種により 0.4.1 ではGRUBは起動しても全くブートできなかったり、Windowsの起動のみだめだったりしました。

  • SYSLINUXのsyslinux.cfg(※ルートにコピーした場合)
LABEL grub
LINUX /memdisk
APPEND initrd=/grub4dos.img

または(※ルートにコピーした場合)

LABEL grub
LINUX /memdisk raw
APPEND initrd=/grub4dos.img

FDイメージが仮想FDドライブとしてブートするのでWindowsではAドライブが一時的に使えないことがあります。

USBメモリのPBRへインストール

USBメモリがUSB HDとしてBIOSで認識されるなら普通にMBRへインストールでいいわけですが、FD扱いの場合はMBRがロードされない(?)ので起動できません。どちらの環境でも使えるようにPBR(ブートセクタ)にインストールしてみました。

※ GRUBをインストールするパーティションはアクティブ(bootフラグ付)に設定しておきます。Windows XP などと同様のシンプルな標準的(?)ブートストラップをMBRへ書き込みします。

  1. 64 MB SDメモリにて実行
  2. パーティション作成は、C/H/S無指定でfdisk実行 (2 heads, 60 sectors/track, 1009 cylinders)
  3. GRUBをインストールするパーティションはアクティブ(bootフラグ付)に設定
  4. MBRへは、SYSLINUX MBR(ブートストラップ)を書き込み

パーティション作成後は Windows XP 上で実行してます。間違うと怖いのでイメージファイルを操作します。

DDforWindows でバックアップ

直接やると失敗が怖いので・・・まず、現状をファイルとしてバックアップしておき、そのコピーでイメージファイルを作成します。

同じディレクトリにファイルを準備(またはPATHを通す)
  • test.ddi - バックアップファイルのコピー
  • SYSLINUXの mbr.bin
  • grubinst.exe
  • dd.exe
  • MBRのブートストラップ(NTシグネチャも)をクリア
dd if=/dev/zero of=test.ddi bs=446 count=1

※bs=446 に注意

  • SYSLINUX MBRブートストラップ書き込み
dd if=mbr.bin of=test.ddi bs=440 count=1
  • GRUB for DOS ブートコードをPBRに書き込み
grubinst.exe --pause --verbose --install-partition=0 test.ddi

partition=0 は1番目のパーティション(Linuxでは bootlace.com を使う)

USBメモリへ書き込む
  • test.ddiDDforWindows などでUSBメモリへ書き込む
  • grldr , menu.lst をUSBメモリへコピー

FDイメージの起動

  1. Direct mapping
  2. Indirect mapping

HDやUSBメモリに保存したFDイメージのブートも可能でした。多少試行錯誤は必要かもですが。

Direct で可能でも Indirect でだめったりするかも。内蔵FDドライブがある場合もどうなるかな。

Direct mapping

直接マウントしてるのかな?イメージへの書き込み可能。変更も保存される。

title Boot from fdimage
      map (hd1,5)/pxeboot.img (fd0)
      map --hook
      chainloader (fd0)+1
      rootnoverify (fd0)
      map --floppies=1

※下から2行は付けない方がいい場合も。

Indirect mapping

オンメモリで動くのかな?仮想的に書き込みは可能だが変更は保存されない。mem オプションを指定。

title Boot from floppy image
      map --mem (hd0,0)/floppy.img (fd0)
      map --hook
      chainloader (fd0)+1
      rootnoverify (fd0)
      map --floppies=1

※下から2行は付けない方がいい場合も。

title Boot from fdimage 2.88MB
      map --mem=-2880 (hd0,0)/floppy.img (fd0)
      map --hook
      chainloader (fd0)+1
      rootnoverify (fd0)
      map --floppies=1

XP版 MS-DOS イメージなどは、map --memdisk-raw=1 を指定すればいいらしい。

title Boot from fdimage (Indirect map raw)
      map --memdisk-raw=1
      map --mem (hd0,0)/floppy.img (fd0)
      map --hook
      chainloader (fd0)+1
syslinux の memdisk

syslinux の memdisk を使う方が簡単かも。

title Boot from memdisk fdimage
      kernel /memdisk
      initrd /floppy.img

2.88MBイメージもOK。XP版MS-DOSイメージなどはkernel /memdisk raw と指定。

CDイメージの起動

テスト段階だと思われますが、0.4.4(開発版)では、一部のisoイメージからのブートが可能でした。

【注意】OS起動後には見えなくなります。あくまでGRUB上でマウントするだけです。

Indirect Mapping の場合は、一旦メモリ(RAM)にロードされる為、isoサイズ + 起動に必要なサイズのRAMが必要になるかと。読み込み時間はかなりかかりますがその後の起動はオンメモリだとかなり速いです...

isoを深い階層に保存しているとマウントできないことがありますね。また、ファイルが断片化しているとエラーが出ることもある模様です。

map --mem /bootcd.iso (hd32)
map --hook
chainloader (hd32)
boot
map /bootcd.iso (hd32)
map --hook
chainloader (hd32)
boot

(hd32)で駄目な場合、(0xFF),(0xA0)も試してみる

isoファイルが断片化していると Direct Mapping に失敗する

みたいです。

下記ソフトでファイルの断片化チェック、及びファイル単体のデフラグできますんで確認してみませう。

※ USBメモリで空き領域が少ない場合などはデフラグができなかったりします。その際は、一旦すべてHDへコピー&すべて削除後に、一括コピーすると断片化解消できますん。

【追記】こっちが推奨かな?

Direct でエラーになったらメモリに一旦全部読み込むわけですね。

title Windows PE (from /WinPEx86.iso)
find --set-root /WinPEx86.iso
map /WinPEx86.iso (0xff) || map --mem /WinPEx86.iso (0xff)
map --hook
chainloader (0xff)

※確かに、HD上のisoファイルなら Direct の方がかなり速いかも。

逆にCDやUSBメモリ上では Direct で成功しても激遅だったり、Indirect の方が早くて安定してること“も”あるので悩みどこかも。

一部の iso (Clonezilla Live や Parted Magic など)では、--heads=0 --sectors-per-track=0 の指定が必要なことがありますな。その場合はこんなかんじ。

title Linux Live == Parted Magic 5.9 (from /pmagic-5.9.iso)
find --set-root /pmagic-5.9.iso
map --heads=0 --sectors-per-track=0 /pmagic-5.9.iso (hd32)
map --hook
chainloader (hd32)
rootnoverify (hd32)

※ 下記サンプルはisoイメージをドライブ(パーティション)のルートに保存した場合です。

オプションなしでisoからブート

Windows PE やサイズの小さな Linux LiveCD など。

Windows PE / RE
title Windows PE (from /WinPEx86.iso)
find --set-root /WinPEx86.iso
map /WinPEx86.iso (0xff) || map --mem /WinPEx86.iso (0xff)
map --hook
chainloader (0xff)
  • PXEネットワークブートの場合
title Windows PE (from (Server)/WinPEx86.iso)
pxe keep
pxe basedir /
map --mem (pd)/WinPEx86.iso (0xff)
map --hook
chainloader (0xff)
Paragon Backup & Recovery

※ Normal Mode のみ

title Paragon Drive Backup (from /bootcd.iso)
find --set-root /bootcd.iso
map /bootcd.iso (0xff) || map --mem /bootcd.iso (0xff)
map --hook
# chainloader (0xff)
root (0xff)
kernel /VMLINUZP vga=0x314 language=en_US.UTF-8 medialable=
initrd /INITRD.GZ
  • PXEネットワークブートの場合
title Paragon Drive Backup (from (Server)/bootcd.iso)
pxe keep
pxe basedir /
map --mem (pd)/bootcd.iso (0xff)
map --hook
chainloader (0xff)
True Image (WD Edition)
title AcronisMedia.iso (from /AcronisMedia.iso)
find --set-root /AcronisMedia.iso
map /AcronisMedia.iso (0xff) || map --mem /AcronisMedia.iso (0xff)
map --hook
chainloader (0xff)
  • PXEネットワークブートの場合
title AcronisMedia.iso (from (Server)/AcronisMedia.iso)
pxe keep
pxe basedir /
map --mem (pd)/AcronisMedia.iso (0xff)
map --hook
chainloader (0xff)
Partition Wizard Home Edition

※ 「Bootable CD」版の方です。

title Partition Wizard Home Edition (from pwhe7.iso)
find --set-root /pwhe7.iso
map /pwhe7.iso (0xff) || map --mem /pwhe7.iso (0xff)
map --hook
chainloader (0xff)
  • PXEネットワークブートの場合
title Partition Wizard Home Edition (from (Server)/pwhe6.iso)
pxe keep
pxe basedir /
map --mem (pd)/pwhe7.iso (0xff)
map --hook
chainloader (0xff)
AVG Rescue CD

ファイル名は avg.iso にリネーム(※ クライアント側のRAMは要512MB以上)

title AVG Rescue CD (from /avg.iso)
find --set-root /avg.iso
map /avg.iso (0xff) || map --mem /avg.iso (0xff)
map --hook
chainloader (0xff)
  • PXEネットワークブートの場合
title AVG Rescue CD (from (Server)/avg.iso)
pxe keep
pxe basedir /
map --mem (pd)/avg.iso (0xff)
map --hook
chainloader (0xff)

オプションでisoをマウント

サイズの大きな Linux LiveCD などではオプション指定でisoをマウントできるものが多いです。

KNOPPIX 6.7.1 CD 産総研版
title KNOPPIX 6.7.1CD Sansouken  == knoppix_v6.7.1CD_20110914-20111018.iso
find --set-root /knoppix_v6.7.1CD_20110914-20111018.iso
map /knoppix_v6.7.1CD_20110914-20111018.iso (0xff)
map --hook
root (0xff)
kernel /boot/isolinux/linux ramdisk_size=100000 lang=ja vt.default_utf8=0 apm=power-off nomce libata.force=noncq hpsa.hpsa_allow_any=1 loglevel=1 tz=Asia/Tokyo bootfrom=/knoppix_v6.7.1CD_20110914-20111018.iso
initrd /boot/isolinux/minirt.gz
Ubuntu 11.10
title Linux Live == ubuntu-ja-11.10-desktop-i386.iso (from iso)
find --set-root /ubuntu-ja-11.10-desktop-i386.iso
map --heads=0 --sectors-per-track=0 /ubuntu-ja-11.10-desktop-i386.iso
map --hook
root (0xff)
kernel /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash -- debian-installer/language=ja keyboard-configuration/layoutcode?=jp keyboard-configuration/modelcode?=jp106 iso-scan/filename=/ubuntu-ja-11.10-desktop-i386.iso
initrd /casper/initrd.lz

isoのあるパーティションは /isodevice にマウントされる。

Ubuntu 10.04
title Linux Live == ubuntu-ja-10.04-desktop-i386.iso (from iso)
find --set-root /ubuntu-ja-10.04-desktop-i386.iso
map /ubuntu-ja-10.04-desktop-i386.iso (0xff)
map --hook
root (0xff)
kernel /casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-ja-10.04-desktop-i386.iso file=/cdrom/preseed/ubuntu.seed quiet splash locale=ja_JP console-setup/layoutcode=jp console-setup/modelcode=jp106 maybe-ubiquity
initrd /casper/initrd.lz

isoのあるパーティションは /isodevice にマウントされる。

LinuxMint-8-jp.iso
title Linux Live == LinuxMint-8-jp.iso (from iso)
find --set-root /LinuxMint-8-jp.iso
map /LinuxMint-8-jp.iso (0xff)
map --hook
root (0xff)
kernel /casper/vmlinuz boot=casper file=/cdrom/preseed/mint.seed quiet splash locale=ja_JP console-setup/layoutcode=jp console-setup/modelcode=jp106 iso-scan/filename=/LinuxMint-8-jp.iso
initrd /casper/initrd.lz

isoのあるパーティションは /isodevice にマウントされる。

Clonezilla Live (1.2.3-27)

※ バージョンによって微妙にパラメータが違うので注意。

title Linux Live == clonezilla-live-1.2.3-27.iso (from iso)
find --set-root /clonezilla-live-1.2.3-27.iso
map --heads=0 --sectors-per-track=0 /clonezilla-live-1.2.3-27.iso (0xff)
map --hook
root (0xff)
kernel /live/vmlinuz boot=live union=aufs noswap nolocales noprompt ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="ja_JP.UTF-8" vga=791 ip=frommedia toram=filesystem.squashfs findiso=/clonezilla-live-1.2.3-27.iso
initrd /live/initrd.img

※ map コマンドでエラーが出るとこれで指定している --heads=0 --sectors-per-track=0 を指定せよ!なんてメッセージが出ることありますね。

SystemRescueCd
title Linux Live == systemrescuecd-x86-1.5.0.iso (from iso)
find --set-root /systemrescuecd-x86-1.5.0.iso
map /systemrescuecd-x86-1.5.0.iso (0xff) || map --mem /systemrescuecd-x86-1.5.0.iso (0xff)
map --hook
root (0xff)
kernel /ISOLINUX/RESCUECD scandelay=5 setkmap=jp dodhcp isoloop=systemrescuecd-x86-1.5.0.iso docache
initrd /ISOLINUX/INITRAM.IGZ

isoイメージはRAM上の /livemnt/boot にマウント

※ RAM 400MB 未満の場合はdocacheを外す。isoのあるパーティションは、/livemnt/isostore にマウント、アンマウント不可、日本語ファイル名は見えない。docache オプションは効かない?

Parted Magic 5.9

※ バージョンによって微妙にパラメータが違うので注意。

/ に置けばオプション不要

title Linux Live == Parted Magic 5.9 (from /pmagic-5.9.iso)
find --set-root /pmagic-5.9.iso
map --heads=0 --sectors-per-track=0 /pmagic-5.9.iso (hd32)
map --hook
chainloader (hd32)
rootnoverify (hd32)

※ サブディレクトリに置く場合は /pmagic, /images に置けばオプション不要。それ以外は iso_filename=/iso/pmagic-5.9.iso などとパラメータ追加が必要。

  • オプション :
    • iso_filename=/hoge/filename.iso
title Linux Live == Parted Magic 5.9 (from /syslinux_multi/pmagic-5.9.iso)
find --set-root /syslinux_multi/pmagic-5.9.iso
map --heads=0 --sectors-per-track=0 /syslinux_multi/pmagic-5.9.iso (hd32)
map --hook
root (hd32)
kernel /pmagic/bzImage edd=off noapic load_ramdisk=1 prompt_ramdisk=0 rw vga=788 loglevel=0 max_loop=256 vmalloc=256MiB keymap=us ja_JP iso_filename=/syslinux_multi/pmagic-5.9.iso
initrd /pmagic/initramfs

※ バージョン 5.5 以降では --heads=0 --sectors-per-track=0 の指定が必須となったみたいです。

  • PXEネットワークブートの場合 (※ 5.8 以降)

Syslinuxmemdisk を使います。

title Linux Live == Parted Magic 5.9 (from (Server)/pmagic-5.9.iso)
pxe keep
pxe basedir /
kernel (pd)/syslinux/memdisk iso vmalloc=256M
initrd (pd)/pmagic-5.9.iso
CDlinux

※ バージョン 0.9.3 Standard の例。syslinux_multi ディレクトリに保存した場合。

title Linux Live == CDlinux-0.9.3 Standard (from /syslinux_multi/*.iso)
find --set-root /syslinux_multi/CDlinux-0.9.3.iso
map --mem /syslinux_multi/CDlinux-0.9.3.iso (hd32)
map --hook
map --status
kernel (hd32)/CDlinux/bzImage quiet CDL_LANG=ja_JP.UTF-8 CDL_DIR=syslinux_multi CDL_IMG=CDlinux-0.9.3.iso
initrd (hd32)/CDlinux/initrd
map --unhook
boot

※ boot/CDlinux, CDlinux ディレクトリなら CDL_DIR オプションは不要。Community版のオンメモリブートは要RAM 1GB以上?

slax 6.1.2-2 日本語版
title SLAX 6 == /slax-ja-6.1.2-2.iso
find --set-root /slax-ja-6.1.2-2.iso
map /slax-ja-6.1.2-2.iso (0xff) || map --mem /slax-ja-6.1.2-2.iso (0xff)
map --hook
root (0xff)
kernel /boot/vmlinuz ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;telinit~4 changes=/slax/ locale=ja_JP.UTF-8 iocharset=utf8 codepage=932 from=slax-ja-6.1.2-2.iso
initrd /boot/initrd.gz

HDイメージの起動

※HDではなく、パーティションを切ってあるフラッシュメモリのイメージで試してみました。Windowsでは、DDforWindowsdd for windows で(USB)フラッシュメモリのイメージ作成が可能です。

FreeDOSイメージでブート確認しました。kernel,initrd とは別にルートイメージがあるLinuxイメージなどは、GRUB上ではマウントできますが、kernelロード後にリセットされてしまう様なのでだめです。

find --set-root /hdimage.ddi
map --mem /hdimage.ddi (hd0)
map (hd0) (hd1)
map --hook
chainloader (hd0)+1
rootnoverify (hd0)

HDイメージが1台目の‘仮想’HDとしてブートします。 --mem(オンメモリ)オプションは容量に応じて付けませう。

(PXE)ネットワークブート

  1. PXELINUX からチェインロード

0.4.3以降では、tftpサーバからgrldrを直接指定してネットワークブートが可能になっているようです。但し、私のやり方が拙いのか、PXELINUX に比べるといまいちな感じありです。

私の環境では、以下のコマンド実行でサーバ上のファイルのロードが可能になりました。(※0.4.4 では実行不要でした。)

pxe keep
pxe blksize 512
configfile (pd)/menu.lst/default

サーバ上のファイルを指定するには、デバイス名 (pd) を指定する。

pxelinux.0 と比較しての利点は、サーバ上の2つのFDイメージをマウント、HDイメージ(USBメモリ等でも)のロード(マウント)が可能なところかな。但し、indirect map(オンメモリ)のみ、またHDイメージについてはDOSイメージはOKでしたが、isolinux イメージなどは kernel, initrd はロードされるがルートイメージはマウントできませんでした。

PXELINUX からチェインロード

TFTPルート
|   grub.exe
|   menu.lst
|   pxelinux.0
|
\---pxelinux.cfg ディレクトリ
        default
設定ファイル : pxelinux.cfg/default
DEFAULT grub4dos
PROMPT 0

LABEL grub4dos
KERNEL /grub.exe
APPEND keeppxe --config-file="pxe basedir /;configfile (pd)/menu.lst"
Windows用 DHCP/TFTPサーバ (TFTPD32)
  • tftpd32 standard edition (zip) をダウンロード
    • TFTP server
    • 必要ファイル : tftpd32.chm, tftpd32.exe, tftpd32.ini
  • ファイル構成
TFTPルート
|   grub.exe
|   menu.lst
|   pxelinux.0
|   tftpd32.chm
|   tftpd32.exe
|   tftpd32.ini
|   
\---pxelinux.cfg ディレクトリ
        default

設定は下記を参考に。

参考リンク

Written by yassy