GRUB2への移行
このガイドは、GRUB Legacy から GRUB へのスムーズな移行のための手順を提供します。
背景
GRUBとは?
GRUBは、組み込みシステムでないLinux機において、最も一般的に普及しているブートローダです。GRUBの役割は、ディスクからメモリへLinux Kernelをロードさせ、Linux Kernelを起動することです。
なぜ移行するのか?
まず、GRUB レガシーは既にメンテナンスされておらず、今後更新が受け付けられることもありません。GRUB レガシーが作られた当時は、開発者たちは、いくらかの想定をし、疑いもしませんでした。しかしその想定はいまや成り立ちません。例えば、GRUB レガシーでは、容量が2TB以上あるディスクからブートすることが不可能ですし、 /boot に新たなファイルシステムが用いられることも想定していませんでした。
GRUB2 は、より堅牢に、より移植可能に、より強力になることを目指し、よりクリーンなコードベースでメンテナンスされています。GRUB2 は、旧バージョンよりも多くの、ハードウェア設定やファイルシステム、ドライブレイアウトをサポートします。
GRUB2 への移行
GRUB2 への移行はとても単純です: パッケージマネージャによって、通常のアップグレードプロセスの一部としてインストールされます。自動的にアップデートされなかった場合であっても、いつでも sys-boot/grub:2
パッケージアトムでインストール可能です。
root #
emerge --ask sys-boot/grub:2
ブートドライブ
最初に重要なことは、どのドライブから起動可能かを把握することです。Gentoo ハンドブックに基づいた場合は、/dev/sda でしょう。判らない場合でも、既存の GRUB レガシーの設定を見れば容易に見つけられます。/boot/grub/grub.conf が主に見るべきところです。
これらのファイルが見えるように、/boot パーティションをマウントしておく必要があります。 マウントするためには、ただ次を実行すればよいはずです
root #
mount /boot
grub.conf は例えば次のようになっています:
default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Gentoo Linux 3.2.12
root (hd0,0)
kernel /boot/kernel-3.2.12-gentoo root=/dev/sda3 quiet dolvm
initrd /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
上記のファイルから (hd0)
がブートドライブだとわかりますが、これを実際のデバイスに紐付けなければなりません。これを知るには、/boot/grub/device.map ファイルを見る必要があります。ファイルの例を下記に提示します。
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
/boot/grub/device.mapが正しくないと気づいたときは、次のコマンドを実行してファイルを再生成しましょう。
root #
grub-install --recheck /dev/sda
上記のファイルから、/dev/sda がブートドライブだとわかります。
GRUB2 のインストールと設定
次のステップでは、GRUB レガシーをドライブのマスターブートレコード (MBR) から削除することなく、/boot パーティションへ GRUB2 のインストールと設定を行います。下記の例では /dev/sda を使っています — 実際のブートドライブのパスに読み替えてください。
まず、必要な GRUB2 のファイルを /boot/grub にインストールします。
root #
grub-install --grub-setup=/bin/true /dev/sda
Installation finished. No error reported.
--grub-setup=/bin/true
オプションによって、grub-install に対して GRUB2 を MBR にインストールするなと指示します。もしもこのオプションがなければ、GRUB レガシーが上書きされてしまい、GRUB レガシーから GRUB2 をチェインロードすることが不可能になってしまいます。これで、利用可能なカーネルを検知して適切な設定を /boot/grub/grub.cfg に生成することが可能になりました。もしもマニュアル設定を行うのであれば、次のステップはとばしてください。
root #
grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ... Found linux image: /boot/kernel-3.2.12-gentoo Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo done
GRUB2 は設定ファイルとして/boot/grub/grub.cfg を使っていますが、GRUB Legacyは /boot/grub/grub.conf を使っていますので、間違えて古いファイルを使っていないか確認してください。古いファイルがまだ残っている場合、タブ補完等で使われます。
grub-mkconfig は、kernelとinitramfsイメージに厳格な名付けが必要となります。カーネルは
kernel-${version}
か vmlinuz-${version}
のファイル名である必要があり、initramfsもまた、initramfs-${version}.img
、initramfs-genkernel-${version}
、initramfs-genkernel-${arch}-${version}
、initrd-${version}.img
、initrd.img-${version}
、initrd-${version}.gz
、initrd-${version}
のファイル名である必要があります。これらファイルは、/bootの中に置かねばなりません。/etc/default/grub ファイルは、grub-mkconfig の動作をコントロールします。もしもカーネルにパラメータを渡す必要があるなら(例えば、genkernel を使っていて LVM やソフトウェア RAID からブートするなど)、/boot/grub/grub.cfg ファイルを生成する前に先ほどのファイルを編集する必要があります:
root #
nano /etc/default/grub
GRUB_CMDLINE_LINUX
パラメータを設定してカーネルコマンドラインを渡す必要があるでしょう。GRUB レガシーから GRUB2 へのチェインローディングによる設定テスト
GRUB の設定を間違えると起動不能なシステムになるので、GRUB2 の設定を確定させる前にテストしたいところです。そこで、GRUB レガシーから GRUB2 をチェインロードして実験します。これは /boot/grub/grub.conf に新しいセクションを追加することで実現します。例を以下に示します。
ルートパーティションは、例で使用している
(hd0,0)
と異なるかもしれません。必ず、/boot/grub/grub.conf 設定ファイルの中にあるルートパーティションの値と同じものを設定していることを確かめてください。default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title GRUB2 Chainload
root (hd0,0)
kernel /boot/grub/i386-pc/core.img
boot
title Gentoo Linux 3.2.12
root (hd0,0)
kernel /boot/kernel-3.2.12-gentoo root=/dev/sda3 quiet dolvm
initrd /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
この時点でマシンを再起動し、マシンが起動してきたら GRUB のメニューから GRUB2 Chainload
を選択してください。GRUB 2.0.0 以上のバージョンが上部に表示され、ブート可能なカーネルが表示された新たな GRUB メニューが表示されるはずです。うまく動かない場合は、システムを再起動して、GRUB2 Chainload
をやめて通常のブート選択肢を実行してください。
GRUB レガシーの置換えと削除
もしすべてうまく動いているならば、GRUB レガシーを置き換え、システムから削除することができます。
システムを再起動してから、再度 /boot をマウントする必要があるかもしれません。/dev/sda はあくまでも一例です、必ず正しいブートドライブパスを使ってください。もしも /boot が grub-install の実行前にマウントされていなければ、システムは起動不能になってしまいます。
前に触れたように、GRUB2 が
multislot
USE フラグを有功にして emerge されている場合には grub-install の代わりに grub2-install を使用しなければなりません。この場合、次のステップで GRUB レガシーをシステムから削除した後に GRUB2 を multislot
USE フラグなしで再度 emerge して、grub-install や grub-mkconfig が GRUB2 のコマンドになるようにすべきです。root #
grub-install /dev/sda
Installation finished. No error reported.
この時点で、パッケージマネージャを使って sys-boot/grub:0
を削除することが可能です。
root #
emerge --ask -vc sys-boot/grub:0
移行が完了しました。
GRUB2 のメンテナンス
新しいカーネルがインストールされたら毎回、GRUB2 の設定に新しいカーネルを認識させる為、次のステップを実行する必要があります (マニュアル設定を使っていない場合)。
このステップでは /boot がマウントされている必要があります。
root #
grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ... Found linux image: /boot/kernel-3.3.8-gentoo Found initrd image: /boot/initramfs-genkernel-x86_64-3.3.8-gentoo Found linux image: /boot/kernel-3.2.12-gentoo Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo done
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Cardoe
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.