試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

GRUB 2(1.96)からハードディスク上のライブCDを起動するテスト

GRUB 2はISO9660ファイルシステムを扱うことができ、その中に入っているLinuxカーネルを起動することができる。しかし、この機能があるからといって、CDブートの感覚でハードディスク上のISO9660ファイルから起動できるというわけではない。*1使用するのは、ISO9660ファイルからの起動をサポート*2するライブCDである必要がある。ここで扱うsiduxというDebian sid(不安定版)ベースのライブCDは、ISO9660ファイルからの起動をサポートしている。

siduxの起動

今回は2008-01版の
ftp.tw.debian.org/pub/Sidux/release/sidux-2008-01-nyx-kde-lite-i386-200804112335.iso
を使用した。
[任意]ファイル名: /etc/grub.d/25_sidux

#! /bin/sh -e
# -*- encoding: utf-8 -*-

prefix=/
exec_prefix=${prefix}
libdir=/lib
#libdir=/usr/lib
. ${libdir}/grub/update-grub_lib

dev="(hd0,1)"  # ISOファイルを含むパーティションを指定
isopath="/sidux-2008-01-nyx-kde-lite-i386-200804112335.iso"  # ISOイメージのパス
name="ライブCD (sidux)"
vga="0x317"
kernel_version="2.6.24-2.6.24.4.slh.5-sidux-686"
echo "Add sidux \"${name}\"" >&2

cat << EOF
menuentry "${name}" {
	loopback	loop ${dev}${isopath}
	linux	(loop)/boot/vmlinuz-${kernel_version} lang=ja boot=fll quiet vga=${vga} fromiso=${isopath}
	initrd	(loop)/boot/initrd.img-${kernel_version}
	boot
}
EOF

下は起動デモ。音声はなし。

Xvid形式の動画ファイルは
http://cid-3f9be5b1cd4a806c.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/%e3%83%87%e3%83%a2/GRUB2%e3%81%a7sidux%e3%82%92%e8%b5%b7%e5%8b%95/sidux-200801-grub2-fromiso_xvid.avi
にアップロードした。
参考URL:

失敗例

うまくいくことのほうが少なく、失敗する(対応していない)場合が多数となる。

systemrescuecd

下の設定で試したが
[任意]ファイル名: /etc/grub.d/25_systemrescuecd

#! /bin/sh -e
# -*- encoding: utf-8 -*-

prefix=/
exec_prefix=${prefix}
libdir=/lib
#libdir=/usr/lib
. ${libdir}/grub/update-grub_lib

dev="(hd0,1)"
isopath="/systemrescuecd-x86-1.0.2.iso"
name="復旧ディスクイメージ(systemrescuecd)"
echo "Add systemrescuecd \"${name}\"" >&2

cat << EOF
menuentry "${name}" {
	loopback	loop ${dev}/${isopath}
	linux	(loop)/isolinux/rescuecd boot=fll fromiso=${isopath}
	initrd	(loop)/isolinux/initram.igz
	boot
}
EOF

「CDドライブが見つからない」状態となり処理が進まなくなった。

boot=fllfromiso=も効果がない(initrd側が対応していない)と思われる。

knoppix

ISOイメージからの起動がサポートされているようで

  • boot=fll fromiso=/[ファイル名].iso
  • boot=fll bootfrom=/dev/hda1/[ファイル名].iso
  • boot=fll fromhd=/dev/hda1 fromiso=/[ファイル名].iso

あたりを試したのだが、

このように、ISOファイルの検出に失敗(?)してしまった。
使用したのは下のファイル(オプションはbootfrom=で記述した状態)。
[任意]ファイル名: /etc/grub.d/25_knoppix

#! /bin/sh -e
# -*- encoding: utf-8 -*-

prefix=/
exec_prefix=${prefix}
libdir=/lib
#libdir=/usr/lib
. ${libdir}/grub/update-grub_lib

dev_grub="(hd0,1)"  # ISOファイルを含むパーティションを指定
dev_linux="/dev/hda1"
isopath="/knoppix_v5.1.1CD_20070104-20070122+IPAFont_AC20070123.iso"  # ISOイメージのパス
name="ライブCD (knoppix)"
ramdisk_size=100000
vga="0x317"
echo "Add Knoppix \"${name}\"" >&2

cat << EOF
menuentry "${name}" {
	loopback	loop ${dev_grub}${isopath}
	linux	(loop)/boot/isolinux/linux boot=fll ramdisk_size=${ramdisk_size} init=/etc/init lang=ja apm=power-off vga=${vga} initrd=minirt.gz nomce loglevel=0 quiet bootfrom=${dev_linux}${isopath}
	initrd	(loop)/boot/isolinux/minirt.gz
	boot
}
EOF

ファイルにも書かれているが、使用したISOファイルはknoppix_v5.1.1CD_20070104-20070122+IPAFont_AC20070123.iso

関連記事:

関連URL:

使用したバージョン:

*1:起動後に光学ドライブのデバイスにアクセスする必要のあるものはダメ

*2:ハードディスク上のISO9660ファイルの場所を指定して起動し、これを自動的にマウントして処理しなくてはならない