kexec-loaderは、MBRやPBRにインストールしなくても、起動時に読み込めるパーティションにvmlinuzとinitrd.imgのみをコピーして、それらをカーネルローダで読み込めば起動できます。
公式サイトはこちら
kexec-loader起動用CDの作成方法
以下の方法はkexec-loaderのバージョン2.2.1についての方法です。違うバージョンでは異なるかもしれません。
- kexec-loader-?-cdrom.tar.gz
- modules-?.tar.gz
- modules-?.tar.gzを展開して生成したディレクトリの中の必要そうなモデュールファイル(拡張子がmodのファイル)を、 kexec-loader-?-cdrom.tar.gzを展開して生成したディレクトリの中のiso-modulesディレクトリにコピーします。
展開して生成したディレクトリの中のiso-filesディレクトリの中のkexec-loader.confを適当に編集します。その内容については、WEB上の説明(英語)あるいは、以下の「kexec-loader.confの書式」を参考ください。
端末で展開したディレクトリに移動し、
./mkiso.sh 作成したいISOファイルの名前.iso
を実行します。すると、上記で設定した「作成したいISOファイルの名前.iso」という名前のファイルが生成されます。これをCD-Rなどに書き込んでください。
- Debian7 では、kexec-loader-?-cdrom.tar.gz を展開したディレクトリにある、mkiso.sh、addmod.sh はエラー終了します。暫定的に対応したシェルファイルを添付しておきます。
内蔵HDDにコピーしたkexec-loaderを利用する方法
CD-Rに書き込まなくても、内蔵HDDからkexec-loaderを起動できます。 以下の方法はkexec-loaderのバージョン2.2.1についての方法です。違うバージョンでは異なるかもしれません。
- kexec-loader-?-cdrom.tar.gz
- modules-?.tar.gz
をダウンロードします。
modules-?.tar.gzを展開して生成したディレクトリの中の必要そうなモデュールファイル(拡張子がmodのファイル)を、 kexec-loader-?-cdrom.tar.gzを展開して生成したディレクトリの中のiso-modulesディレクトリにコピーします。 kexec-loader-?-cdrom.tar.gzを展開して生成したディレクトリの中のmkiso.shをテキストエディタで編集し、その最後の行の
rm -rf iso-root
の先頭に
#
を付けて保存します。(行ごと削除しても良いです。) テキストエディタを閉じます。 端末で展開したディレクトリに移動し、
./mkiso.sh 作成したいISOファイルの名前.iso
を実行します。すると、iso-rootというディレクトリの中にモデュールを組み込んだinitrd.imgが生成されます。起動時に読み込めるパーティションにkexecldrという名前のディレクトリを作成してください。作成したkexecldrディレクトリの中に、iso-rootディレクトリの中のinitrd.imgとvmlinuzをコピーします。
/ディレクトリにコピーしても使えるのですが、Ubuntuがインストールされているパーティション(/にマウントされるパーティション)の/ディレクトリには同名のシンボリックリンクがあるので、問題が生じる可能性があります。そこで、新たにディレクトリを作成した方が安全です。 |
実際の起動時にkexec-loaderを利用できるようにするためには、別のカーネルローダでkexec-loaderのvmlinuzとinitrd.imgを読み込む必要があります。
grub4dosなら、menu.lstの末尾に
title kexec-loader find --set-root /kexecldr/vmlinuz kernel /kexecldr/vmlinuz initrd /kexecldr/initrd.img
と追加すれば良いでしょう。
GRUB2なら、/etc/grub.d/40_linuxの末尾に
menuentry "kexec-loader" { search -f --set /kexecldr/vmlinuz linux /kexecldr/vmlinuz initrd /kexecldr/initrd.img }
と追加して、端末で
update-grub
を実行すれば/boot/grub/grub.cfgの末尾に追加されるでしょう。
また、起動時にメニューを利用したい場合には、kexec-loader.confを、起動時に読み込めるパーティション(vmlinuzとinitrd.imgをコピーしたパーティションとは異なっても良いです)にコピーし、そのパーティションのラベルをGparted(パーティションエディタ)などで、
kexecloader
に変更します。 kexec-loader.confの書き方(使えるコマンド)は こちらに書いてあります。
kexec-loaderのコマンドラインでの利用
コマンドラインで使えるコマンドは こちらに書いてあります。
disks
で認識されているデバイスとパーティションの一覧を表示させ、Ubuntuのインストールされたパーティションを、例えば、/dev/hda5と認識されていたら、
root hda5
のように指定。
kernel カーネルの名前(フルパスで)
でカーネルを指定し、
initrd initramfsの名前(フルパスで)
でinitramfsを指定し、カーネルに渡すべきオプションがあるのなら、
cmdline カーネルに渡したいオプション
してから
boot
で起動が試みられます。 なお、
cat 閲覧したいテキストファイル名(フルパスで)
でテキストファイルの内容を表示させることができるので、例えば、grub legacyの起動メニューの書かれたファイル、/boot/grub/menu.lstの内容を見たければ、rootでパーティションを設定した後で、
cat /boot/grub/menu.lst
で表示されるのですが、長いと、表示が上に流れてしまい、最後の方しか閲覧できません。moreのように表示させる方法がありましたら、このページに書き込んでくださると有難いです。
kexec-loader.confの書式
kexec-loader.confの書き方(使えるコマンド)は こちらに書いてあります。
UbuntuでUUIDでパーティションが設定されている場合、UbuntuのUUIDを★として
title Ubuntu on UUID=★ root UUID=★ kernel /vmlinuz initrd /initrd.img cmdline root=UUID=★ ro カーネルに渡したい他のパラメータ
ぐらいで良いでしょう。「カーネルに渡したい他のパラメータ」と実際に書いてはいけません。 また、/のパーティションと/bootのパーティションが別の場合、/vmlinuzと/inirtd.imgというシンボリックリンクが利用できないので、上記の内容では起動できません。
他のパラメータが不要なら、上記の「ro」以降は不要です。
kexec-loader.confを置くパーティションのラベルをkexecloaderに変えたく無い場合
http://www.solemnwarning.net/kexec-loader/download.cgi からソースファイルをダウンロードしてください。
- 展開して、生成されたディレクトリの中のsrc/misc.cの中に
kexecloader
という文字列があるので、それをkexec-loader.confを置きたいパーティションのラベルに変更してください。 - 後は、適切にコンパイルすれば良いです。コンパイルの方法は、
build.html
に書かれているように、必要なパッケージが利用できさえすれば、展開したディレクトリでmakeでOKでしょう。 (ただし、Ubuntu9.10の2010/3/1の状態では、必要なパッケージが入手しにくく、makeしてもエラーが発生して失敗します。)
謝辞
このページの情報を作成するにあたり、 「 kexec-loader を内蔵 HDD にインストールする方法」については、
Daniel Collins (aka solemnwarning) さんからご教示を賜りました。
また、以上の方法は、 grub4dos や kexec-loader, kexec-tools, Ubuntu の開発者の方のご尽力があったからこそ実現できるものです。
この場をお借りして御礼申し上げます。