現在位置: ホーム / みらくるブログ / GPT HDD に grub2 をインストールする際の tips

GPT HDD に grub2 をインストールする際の tips

GPT フォーマットの HDD を BIOS モードで使う際、grub2 をインストールするには、ちょっとしたコツが必要です。

若葉が萌えている松江からこんにちは。
エンジニアの押田です。

松江ラボの共用 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 が読み込まれます。

めでたしめでたし。

タグ: