はじめに
GRUB Legacyとその後継のGRUB2の設定を混同したので整理します。
GRUBとは?
GRUBはブートローダの代表例で、
システム起動において、BIOSやUEFIの次に動いてカーネルを起動する役割があります。
BIOS→ブートローダ(GRUB)→カーネル→init
そのため、GRUBの設定ファイルには、Linuxをどのように起動するかに関する情報が記述されています。具体的には、
- 起動に使用するカーネルイメージの場所
- ルートファイルシステムのあるパーティション
- 初期RAMディスク(initrdまたはinitramfs)の指定
- 読み取り専用やシングルユーザモードなどの起動オプション
などがあります。
次から本題です。
GRUBとGRUB2の設定が違って混同するので、整理していきます。
GRUB LegacyとGRUB2の設定比較
①設定ファイルの場所
| 項目 | GRUB Legacy | GRUB2 |
|---|---|---|
| BIOS | /boot/grub/menu.lst | /boot/grub/grub.cfg |
| 代替 | /etc/grub.conf | /boot/grub2/grub.cfg |
| UEFI | 非対応 | /boot/efi/EFI/〜/grub.cfg |
② 基本構文の違い
GRUB Legacy
title Linux # 起動メニューに表示される名前(OSの選択項目)
root (hd0,0) # カーネルが存在するパーティション(/bootの場所)
kernel /vmlinuz-xxx ro # 使用するカーネルイメージと起動オプション
initrd /initrd-xxx.img # 初期RAMディスク(ドライバやLVMなどを提供)
GRUB2
menuentry "Linux" { # 起動メニューのエントリ名(OS選択画面に表示)
set root=(hd0,1) # カーネルがあるパーティション(/bootの場所)
linux /vmlinuz-xxx ro # カーネルイメージと起動オプションを指定
initrd /initramfs-xxx.img # 初期RAMディスクを指定(起動に必要なドライバを提供)
}
③ 設定項目の比較
| 役割 | GRUB Legacy | GRUB2 |
|---|---|---|
| メニュー | title | menuentry |
| ルート(カーネルがあるパーティション)の指定 | root | set root |
| カーネル | kernel | linux |
| 初期RAM | initrd | initrd |
| 構文 | シンプル | スクリプト形式 |
④ 設定の編集方法
GRUB Legacyは「手作業」、GRUB2は「自動生成」となり、
GRUB Legacy(直接編集)
GRUB Legacyでは、設定ファイルを直接手で編集します。
しかし、パスを間違えたりタイプミスなどがあると起動できないという問題があります。
/boot/grub/menu.lst
GRUB2(直接編集しない)
GRUB2では、最終設定ファイルは/boot/grub/grub.cfgですが、基本的に手動編集しません。
/etc/default/grub → 人間が設定を書く
/etc/grub.d/ → スクリプト群(基本的にはOSが情報を収集)
人間は/etc/default/grubを編集し、残りの設定は、grub-mkconfigを実行すると、OSが自分で/etc/grub.d/からOSが情報を収集してきて最終設定ファイルの/boot/grub/grub.cfgを生成します。
これによって、ミスによる起動エラーが減り、問題の切り分けも簡単になりました。
まとめ
- GRUBはLinuxを起動する代表的なブートローダで、BIOSやUEFIの後にカーネルを読み込む役割を持つ。
- GRUB Legacy は全部手動、GRUB2は一部手動からの自動生成。
- GRUB Legacyは「kernel」、GRUB2は「linux」でカーネルを指定