GPT HDD に grub2 をインストールする際の tips
若葉が萌えている松江からこんにちは。
エンジニアの押田です。
松江ラボの共用 PC をセットアップしていて「これはメモしておくか」という事があったので、ブログに残します。
GPT フォーマットされた HDD を BIOS モードで利用し、ブートローダである grub2 をインストールする際の tips です。
果たして現実にそんなケースがあるか、というと、あります。Windows と Linux を共存させる場合です。
昨今 Windows がプリインストールされた PC は基本的に EFI モードで出荷されています。当社の共用 PC も同様です。この Windows を残したまま Linux を利用したいのですが、操作ミスで Windows を起動させてしまうことは防ぎたく、そのため BIOS モード(Legacy モード)に切り替えてしまうのです。
都合、EFI モードでは Windows のみが、BIOS モードでは Linux のみが起動する環境が構築されます。
また、Windows がプリインストールされた PC の HDD は基本的に GPT フォーマットになっています。BIOS モードで Linux を起動するため、BIOS モードから起動できる形で grub2 をインストールしたいのですが、従来の MBR フォーマットでは必要無かった一手間が必要になります。
MBR フォーマットの発想で言えば、単純にディスク先頭(/dev/sda など)に grub2 をインストールしてしまえば済みますが、GPT フォーマットではこれが出来ません。MBR フォーマットの時に存在していたディスク先頭の「未使用領域(非管理領域)」が GPT フォーマットでは存在しないからです。
そこで用意されたのが "BIOS Boot Partition" です。要は、GPT 管理下に必要な領域を置いてしまえば良いということです。
ここで、直感的に危惧されるのが、「空き領域が在るか」だと思います。大丈夫、在ります。
昨今のフォーマッターは比較的余裕をもってパーティーションを作成しています。各パーティーションの間や先頭から第1パーティションまでに、最大1メガバイトほどの余白が生じるようになっています。そして実際、多くの場合、Windows がプリインストールされた HDD の第1パーティーションの前にも、約1メガバイトほどの余白があります。これは grub2 を書き込むのに十分なサイズです。
前置きが長くなりました、そろそろ実践に移りたいと思います。
BIOS モードで grub2 をインストール出来るようにするための GPT フォーマットの HDD の準備、開始しましょう。
まず、対象の PC で、何らかの方法で Linux を起動してください (^^;
ここで gdisk コマンドで HDD のパーティーション一覧を見てみます。
#> gdisk -l /dev/sda
(省略)
Number Start (sector) End (sector) Size Code Name
1 2048 1230847 600.0 MiB 2700 Basic data partition
2 1230848 1845247 300.0 MiB EF00 EFI system partition
3 1845248 2107391 128.0 MiB 0C01 Microsoft reserved ...
4 2107392 244066303 115.4 GiB 0700 Basic data partition
5 949506048 976773119 13.0 GiB 2700 Basic data partition
参考までに、第4パーティーションが Windows の C Drive です。購入直後はディスクいっぱいまでのサイズ(終了アドレスが第5パーティーションの開始アドレス直前)でしたが、Linux をセットアップするために小さくリサイズしています。最近の Windows は、稼働中の C Drive を自分自身でリサイズすることが出来て、非常に便利です (^^)
第1パーティーションの開始アドレス(セクタ)を見ると 2048 になっていますが、HDD はもっと手前のアドレスから利用可能です。試しに gdisk でパーティーション追加の n コマンドを使ってみると、「先頭アドレス(セクタ)は幾つにしますか?」のプロンプトに、利用可能な値の範囲として、2048 よりずっと小さい値が表示されると思います。n コマンドを進めて実際にパーティーションを作ってみた状態が下記です。
Number Start (sector) End (sector) Size Code Name
1 2048 1230847 600.0 MiB 2700 Basic data partition
2 1230848 1845247 300.0 MiB EF00 EFI system partition
3 1845248 2107391 128.0 MiB 0C01 Microsoft reserved ...
4 2107392 244066303 115.4 GiB 0700 Basic data partition
5 949506048 976773119 13.0 GiB 2700 Basic data partition
6 34 2047 1007.0 KiB EF02 BIOS boot partition
第6パーティーションとして BIOS Boot Partition を作成してみました。BIOS Boot Partition のパーティーション・タイプ(コード)は EF02 です。終了アドレスは gdisk の提示するデフォルトを利用しましたが、第1パーティーションの開始アドレス直前の 2047 になっています。
これで、普通に grub2 がインストール出来るようになりました。具体的には、下記コマンドを実行した際、自動的に BIOS Boot Partition を発見し、必要なデータをそこに書き込んでくれます。
#> grub-install /dev/sda
念のため、引数である書き込み先は、/dev/sda6 ではなく /dev/sda です。BIOS Boot Partition は /dev/sda に grub2 をインストールするための、コンパニオン・パーティーションです。
実際には grub-install を手打ちする必要は無いでしょう。Linux のインストーラに grub2 のインストール先を聞かれたら、/dev/sda と答えるだけです。
無事、BIOS が grub2 を発見・起動し、Linux が読み込まれます。
めでたしめでたし。