ハードディスクのブートローダが機能しない場合の対処法


ハードディスクなどに単体でOSを入れている場合はあまり意識することがありませんが、一つのディスクに複数のOSを入れている場合やハードディスク2つを使って複数のOSを管理している場合には、ハードディスクを取り外したり、付け替えたときにブートローダが機能しない場合があります。

特に古いPCで使っていたハードディスクにパーティションを追加して、別のOSをインストールした場合には要注意です。

古いPCのハードディスクを新しいPCへ移行する場合には、マザーボードのファームウェアが「BIOS(Basic Input Output System)」から「UEFI(Unified Extensible Firmware Interface)」になっている可能性があり、あまり意識せずにブートローダが入っているつもりでOSをインストールしてしまうと、後でOSが起動しない場合があります。

今回は実際にそのような状況に陥った場合の対処法について、実体験をもとに取り上げてみました。

ブートローダについて

コンピュータの起動時に最初に実行されるのは、マザーボードの読み出し専用メモリ(ROM)に記録された小さなプログラム(BIOSやEFI/UEFI)で1次ブートローダとも呼ばれます。

1次ブートローダは起動デバイスの優先順位に従ってOSが格納されたストレージ(HDD,CD-R,USBメモリなど)へアクセスし、2次ブートローダとしてMBRやGPT形式で作られたOS起動用のディスクからプログラム(ブートストラップローダ)を主記憶装置(RAM)に読み込んで実行します。

これから取り上げるブートローダは2次ブートローダのことで、ストレージ(HDD)からOSプログラム(Linuxカーネルなど)を読み出し起動する段階のものをいいます。

ちなみに「ブートストラップ(bootstrap)」は、「自力で成し遂げる」という英語の意味ですが、ブーツを履く時に引っ張り上げる「つまみ革」のことでもあります。

GRUB2について

Linuxは現状のブートローダとしてLILO(LInux LOader)とGRUB(GRand Unified Bootloader)が採用されています。LILO、GRUBなどのブートローダの役目はOSの本体であるカーネルをロードすることにあります。

ここ最近ではほとんどのLinux OSでGRUBが採用されていますので今回はこちらを中心に話を進めたいと思います。

GRUB 2(GRand Unified Bootloader version 2)は、一般的には GRUB とも呼ばれ、多くのシステムアーキテクチャ上で、様々なファイルシステムからカーネルをロードすることができるマルチブートの 2次ブートローダです。

1次ブートローダは、ハードディスクなどにアクセスし、2次ブートローダとしてGRUB2へアクセスし、OSを起動することになります。

GRUB2のインストール

今回の場合はBIOS起動のハードディスクMBRへインストールしていたGRUB2であったため、UEFI起動ではGRUB2ブートローダが機能しなかったことが原因でした。

そこでハードディスクにGPTフォーマットのパーティションを作成して、GRUB2のインストールを試してみました。

参考:GPT HDD に grub2 をインストールする際の tips(https://www.miraclelinux.com/tech-blog/qwi8ni)

現在のディスク状況の確認

はじめにlsblk コマンドで使用中のディスクを確認します。

$ lsblk

次にgdisk コマンドで起動したいディスクの パーティーション一覧を見てみます。

$ gdisk -l /dev/sda

本来ならこのあとコマンドでGPTパーティションを作成してGRUB2をインストールするのですが、より視覚的に簡単にパーティションを作成できるGPartedを使いたいと思います。

GPartedでefi_grub用のパーティションを作成

GPartedは次のコマンドでインストールできます。

$ sudo apt install gparted

インストールが完了したらランチャーに追加されていますので起動します。

こちらが起動しないディスクの状態ですが、やはり先頭のブートセクタ(sda1)にはbios_grubが入っているだけでした。

まずはsda2パーティションを分割してefi_grub用の空領域を確保します。

とりあえず1GB確保してみました。一般的には500MBほどで充分なようです。

今度は「未割り当て」の領域をフォーマットします。こちらは通常でFAT系のフォーマットにします。ここではFAT32を選択しました。

フラグを選択してboot領域であることを認識させます。

最終的にsda5パーティションがfat32ファイルシステムのboot,espフラグで作成されました。

このあとここにgrub2をインストールします。

GRUB2のインストール

GRUB2のインストールについては、こちらを参考にしました。

参考:GRUB2 ブートローダーのインストール(https://wiki.gentoo.org/wiki/GRUB2/ja)

まずは先程作ったディスクのパーティションがどうなっているか確認します。

$ sudo gdisk -l /dev/sda

先程作ったディスクパーティション /dev/sda5 を /boot/efi にマウントします。

$ sudo mount /dev/sda5 /boot/efi

/dev/sda5 が /boot/efi にマウントされていることを確認します。

$ lsblk

grub-install コマンドを実行することで必要なファイルが/boot/grubにコピーされます。これによりGRUBが/boot/grubにインストールされ、そのコアイメージを/boot/efi/EFI/gentoo/grubx64.efiにコピーしたのちefibootmgrを呼び出してブートエントリを追加します。

$ sudo grub-install --efi-directory=/boot/efi

Installation finished. No error reported. となればインストール成功です。

まとめ

今回の件は簡単に書きまとめましたが、実際にはかなり苦労しました。

しかしながら、今回の件でGRUBブートローダについての知識が深まりましたし、今後は楽に作業ができるようになったことから良かったと思っています。

この方法では実際にGRUB2のインストールまでは行っていませんが、多分これで行けると思いますので、次回機会があればチャレンジしたいと思っています。

,

“ハードディスクのブートローダが機能しない場合の対処法” への1件のコメント

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)