5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS6からの変更 ブートローダGrubについて

Posted at

はじめに

最近CentOS7でDockerを使うようになり、今更ですがCentOS7の特徴をまとめてみました。

試した環境

Biosから起動するCentOS


# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

CentOS6からの変更点まとめ参考

↓に変更の要点がまとめられています。
CentOS6とCentOS7の比較表

その中でも、ブートローダsystemdfirewalldネットワーク関連のコマンド変更に着目して、今回はブートローダについてまとめてみました。

ブートローダ

Cent6

バージョン

grub Lagacy


# grub-install --version
grub-install (GNU GRUB 0.97)

設定ファイル

  • /boot/grub/menu.lstと**/boot/grub/grub.conf** 普通にこのファイルを直接編集
  • /boot/grub/menu.lstは/boot/grub/grub.confへのシンボリックリンクになっている。

# ll /boot/grub/menu.lst 
lrwxrwxrwx. 1 root root 11  9月 14 23:54 2016 /boot/grub/menu.lst -> ./grub.conf

ブートシーケンス

bios

mbr(stage1) #biosがmbrにあるstage1(ブートローダ)を読み込む

セクタ2~64(stage1.5) #stage1がセクタ2以降にあるstage1.5を読み込む

/boot/grub/stage2(stage2) #(stage1.5はファイルシステムを解釈できるのでstage2を呼び出せる)

/boot/grub/menu.lstを読み込む

grub起動画面

カーネルとinitramfsのロード

シーケンス詳細

ステージ制

Stage 1ローダは直接Stage 2ローダを読み込めるが、通常はその間に入るStage 1.5ローダを読み込むためセットアップを行う

stage1.5はどこ

MBRの直後から最初のパーティション手前までにある先頭30KB以内に位置するローダ。何らかの理由でこの領域が利用できない場合Stage 1.5ローダのインストールに失敗する(例えば、異常なパーティションテーブルが原因でセクタアドレスが読み取れなかったり、特殊なディスクドライバを必要とするケース、またはGPTもしくはLVMなどを利用するシステムの場合など)

stage1.5の特徴

Stage 1.5ローダのイメージはファイルシステム固有のドライバを含んでいる。よってファイルシステム上にあるstage2を呼び出すことができる

grubコマンド

grub-installしかつかったことない。grub(stageを)インストール。ただ自分が実行したときうまくいかずにgrubシェル(bashライクなインタフェースでgrubに関する設定ができる)を実行してインストールした記憶がある。


# grub-
grub-crypt      grub-install    grub-md5-crypt  grub-terminfo  

# grub
Probing devices to guess BIOS drives. This may take a long time.


    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> 

Cent7

バージョン

Grub2


# grub2-install --version
grub2-install (GRUB) 2.02~beta2

ブートシーケンス

bios

MBR(boot.img) # biosがboot.imgを起動

セクタ2~64 # boot.imgがcore.imgを起動。ファイルシステムにある各モジ 
ールを動的にリンク

/boot/grub2/grub.cfgを参照

grub起動画面

カーネルとinitramfsのロード

Cent6との違い

  • セクタ1(MBR)にboot.img、セクタ2ー64にcore.imgが配置
  • モジュールを動的にロード
    • stage1,stage1.5,stage2なくなる → boot.imgとcore.img、coreimgが動的に複数のモジュールをロードする。

設定ファイル

詳しい説明
Linux 上の GRUB 2 がブートできなくなったときの対処方法

  • /boot/grub2以下に関連ファイルある
  • boot/grub2/grub.cfg
    • ここは直接編集しない。コマンドで生成する
  • 編集方法
    • /etc/default/grubを編集
    • /etc/grub.dにあるスクリプトも適宜編集
  • grub-mkconfigコマンド > /boot/grub/grub.cfg
    • /boot/grub2/grub.cfgを生成

grubコマンド

たくさんある!
grubシェル起動はない???


# grub
grub2-bios-setup           grub2-glue-efi             grub2-mkconfig             grub2-mkpasswd-pbkdf2      grub2-probe                grub2-set-default
grub2-editenv              grub2-install              grub2-mkfont               grub2-mkrelpath            grub2-reboot               grub2-setpassword
grub2-file                 grub2-kbdcomp              grub2-mkimage              grub2-mkrescue             grub2-render-label         grub2-sparc64-setup
grub2-fstest               grub2-macbless             grub2-mklayout             grub2-mkstandalone         grub2-rpm-sort             grub2-syslinux2cfg
grub2-get-kernel-settings  grub2-menulst2cfg          grub2-mknetdir             grub2-ofpathname           grub2-script-check         grubby

補足

set root

設定ファイルに記載されているrootはルートパーティションの指定ではなくカーネルとinitrdが置かれているディスクとパーティションのこと。

device.map

grubの設定ファイルに書かれているGrub形式のデバイス名(hd0) を Linuxデバイス名(/dev/sda)にマッピングする


# cat /boot/grub/device.map 
# this device map was generated by anaconda
(hd0)     /dev/sda

カーネル起動せずにgrub>になってしまったら

Linux 上の GRUB 2 がブートできなくなったときの対処方法

なるほど👀

GRUB 2 が正常に起動し、 モジュール (および / boot/grub/[arch]/ に格納されている他モジュール) をロードしたが、grub.cfg ファイルが見つからなかったことを意味

なるほど👀

このようなことがなぜ起こるのでしょうか。カーネルが何らかの理由でドライブ名を変更した、ハード ディスクを移動した、パーティションを変更した、または新しいオペレーティング システムを追加して関連する何かを移動したなどです。これらの場合は、GRUB がファイルを検出できないだけで、ファイル自体はもとの場所に存在します。そこで、GRUB がプロンプトを出したら、ファイルの場所を指定し、システムをブートして、GRUB の設定を修正すればよいのです。

まとめ

ブートローダを調べることでカーネルがどうやって起動するかを確認することができました。biosから起動される前提でしたが、UEFIなどにも興味があるのでUEFIについてもまとめてみようと思います。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?