Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

grub

Fedora 16 のLive CD (iso) を USBメモリから起動する @ grub2

まずはじめに、結論から言うと、Ubuntu の iso はUSBメモリから直接起動できますが、Fedora 16 の Live CD  は、そのままでUSBメモリから起動できません。起動するには、iso 内のあるファイルにパッチを当てる必要があります。このページではその話も含めて記述しています。

 

まずは、USB メモリに grub2 をインストールします。インストールはここを参考にしましたが、簡単に書くと、私の場合は ubuntu-11.10-desktop-i386.iso の Live CDを使ってPCをCD起動し、USBメモリを挿して、以下のコマンドをrootで実行しました。/media/usb が USB のマウント先、/dev/sda がUSBメモリのデバイスです。環境によってデバイス名は異なるので、環境に合わせて読み替えてください。(読み替えないと最悪起動しなるので注意)

# grub-install --no-floppy --root-directory=/media/usb /dev/sdb

すると、USBメモリに、/boot/grub ディレクトリや各種必要なファイルが作られます。

次に、Fedora 16 Live Desktop の isoイメージ (Fedora-16-i686-Live-Desktop.iso) を USB メモリにコピーします。今回は、/boot/grub/iso にコピーしました。

さらに、/boot/grub/grub.cfg を以下のように記述することで、ある程度までUSB起動できるようになりますが、起動中に rootファイルシステムが見つからないとdracut がエラーを出して止まります。

menuentry "fedora-16-i686-live-desktop.iso" {
loopback loop /boot/iso/fedora-16-i686-live-desktop.iso
linux (loop)/EFI/boot/vmlinuz0 root=live:/boot/iso/fedora-16-i686-live-desktop.iso rootfstype=auto ro liveimg rhgb rd.luks=0 rd.md=0 rd.dm=0
initrd (loop)/EFI/boot/initrd0.img
}

そこでパッチの登場です。isoイメージ内の /EFI/boot/initrd0.img にこのパッチを当てます。(initrd0.img ファイル抜き出して、イメージ展開、再度イメージ化して・・・と結構面倒です) ※ initrd に自分でパッチを当てる場合は、当てた後に/sbin/liveiso-find というファイルが作れるのですが、デフォルトだとパーミッションがおかしいので、-rwxr-xr-x に変更してあげる必要があります。initrdの編集の仕方はこちらを参考にしてください。

そして、grub.cfg の設定を以下のように変更します。

menuentry "fedora-16-i686-live-desktop.iso" {
loopback loop /boot/iso/fedora-16-i686-live-desktop.iso
linux (loop)/EFI/boot/vmlinuz0 root=live:/boot/iso/fedora-16-i686-live-desktop.iso rootfstype=auto ro liveimg rhgb rd.luks=0 rd.md=0 rd.dm=0
initrd /boot/iso/fedora16_new_initrd0.img
}

これで、起動できるようになります。お疲れ様でした。

ちなみに、Ubuntuの場合は、iso を同じ場所に置いて、grub.cfg に以下を追記してあげるだけで iso から起動可能です。

menuentry "ubuntu-11.10-desktop-i386.iso" {
set root=(hd0,1)
loopback loop /boot/iso/ubuntu-11.10-desktop-i386.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-11.10-desktop-i386.iso noeject noprompt --
initrd (loop)/casper/initrd.lz
}

 

最後に、VMware で起動確認する場合は、USBブートできないので、PLoP を使うと便利です。PLoPは、USBブートに対応していないPCを、CDから起動し、USBに処理を渡すことができます。

 

grubの起動画面で日本語キーボート配列を使う

grub 起動時に起動オプションを変更する場合、日本語キーボード配列ではなくストレスたまるので、grub.conf にこれを書いてあげましょう。

 setkey at bracketleft
 setkey doublequote at
 setkey ampersand caret
 setkey quote ampersand
 setkey parenleft asterisk
 setkey parenright parenleft
 setkey tilde 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 equal
 setkey underscore plus
 setkey backslash bracketleft
 setkey bar braceleft
 setkey F9 equal
 setkey F10 bracketleft
 setkey equal k73
 setkey bracketleft k7d

GRUBのコマンドラインで、手動でLinuxを起動する@CentOS 5.4

前回の記事で、USBのハードディスクにLinuxを入れたまではいいが、Windowsのブートローダを設定してもGRUBという文字が表示されフリーズしてしまい、Linuxを起動できません。

そこで他のメディアにGRUBをインストールし、そこから手動で起動することにしました。

最近のPCにはフロッピーが搭載されていないことが多いため、CDからの起動です。GRUB入りのCDを作ろうと思いましたが、誰か作ってるのを公開しているだろうと思い調べて見たら、アクセンス・テクノロジーさんがISOイメージ公開してくれていたので使わせて頂きました。

このCDを使用してPCを起動すると、grub> というGRUBのプロンプトが出てきます。

ここから起動方法です。まず前提ですが、今回使用するUSBハードディスクは、内蔵で2台のSATAのハードディスクがあるため、PCからは3台目として扱われます。

GRUBでは、 1台目のハードディスクがhd0, 2台目がhd1として扱われ、今回は3台目なのでhd2として扱われます。

さらに、重要なのが/bootと/の場所です。今回の環境では、3台目のハードディスクで

パーティション0 : /boot パーティション1 : /

となっています。まずは、rootの指定です。ここでいうrootは/bootのパーティションです。

grub> root (hd2,0)

次はカーネルの指定です。

カーネルは/bootに入っているため、

grub> kernel (hd2,0)/vmlinuz-2.6.xxx ro root=LABEL=/

と入力します。vmlinuz- の箇所は、実際にインストールされているlinuxによりますが、GRUBはext3のパーティションを読めるので、vmlinuzまで入力した後にTABを押すことで補完できます。

なお、今回は/bootが/のパーティションと別パーティションになっているため上記のようなvmlinuzの指定になっていますが、/boot と / のパーティションが一緒の場合は(hd2,1)/boot/vmlinuz-2.6.xxx と記述する必要があります。

LABEL=/は、初めてLinuxをインストールしたシステムならば、パーティションにこういったラベルが自動で付けられるので問題ないですが、ラベルがないときは、(hd2,2) といったふうに、/パーティションを指定します。

最後はinitrdの指定です。initrdの詳しい説明はしませんが、システムによってはinitrdがなくても起動できます。通常は/bootに入っています。

grub> initrd (hd2,0)/initrd-2.6.xxx   ←これもTABで補完可能

最後に起動です。

grub> boot

以上で起動します。

ちなみに起動中にmountエラーでカーネルパニックになった出た場合はkenel行のrootの指定が間違っています。

Linuxのinitrd - イニシャルラムディスク(initial ram disk)の展開方法

Linuxカーネルはモジュール型であるため、Linux起動時に必要なモジュールはinitrdの中に入れておかなければなりません。initrdとは/boot/initrd-2.6.18.img のようなファイルで、mkinitrdコマンドで作成できます。

このファイル、実はcpioでまとめられ、gzipで圧縮されているだけです。なので以下のようにすることで展開できます。

# cd /tmp/
# zcat /boot/initrd-2.6.18.img | cpio -di

中のファイルが見たいだけの場合は以下の通りです。

# zcat /boot/initrd-2.6.18.img | cpio -tv

中身を見てもらえるとわかりますが、モジュール(.koファイル)やinsmodコマンドなど、最低限必要なものが入っています。

このブログについて
プライバシーポリシー・お問い合わせ等
購読する(RSS)
記事検索
アーカイブ
カテゴリー
  • ライブドアブログ