後方見聞録

基本的には自分のための備忘録です

PCの起動とかブートローダーとかBIOSとかデュアルブートとか

はじめに

このブログについて
良ければ目を通してください

きっかけとか

  • WindowsLinux(Ubuntu)でデュアルブートだかマルチブートだかをしたいけど、色々なことがわかっていないので知りたい
  • なんかBIOSとかは聞いたことあるけどそんなにわかってない

用語の確認

なのでマルチブート ⊃ デュアルブート

したかった事

起動の仕組み(概要)

大まかに書くと

  1. 電源を入れる
  2. ファームウェアが立ち上がり
    1. ハードウェアの初期化などを行う
      • POST(Power On Self Test)…初期診断 とか
    2. HDDの先頭から「OS起動用のソフトウェア」をロードする
  3. 「OS起動用のソフトウェア」がHDDからOSを見つけて読み込む

という流れになっている
いきなりOSが立ち上がるんじゃなくて間に橋渡し役である「OS起動用のソフトウェア」がいて、デュアルブートするにはそのあたりが重要

  • 「OS起動用のソフトウェア」がOSなどによって異なる
  • ファームウェアBIOSからUEFIに置き換えられていっている

辺りが気を付けたいポイント

「OS起動用のソフトウェア」について

文献によって呼び方違ったり、用語が使い分けられていたりいなかったり、色々ややこしいけど

  • IPL(Initial Program Loader)
  • ブートストラップローダー
  • (上を略して)ブートローダ

とかとかと呼ばれるもの(大体色々合わせてブートローダーと呼ばれてる?)

種類とか

どう使われているかとか詳細はのちほどとして、名称とか用語とか

仕向け
  • Windows向け
    • NTLDR(NT Loader)…NT系
    • BOOTMGR(Windows Boot Maneger)…vista以降
  • Linux向け
    • LILOLInux LOader)…古い
    • GRUB(GRand Unified Boot loader)…旧版(Legacy)と新版(2)があり、最近使われるのは2
  • 汎用
    • MBM(Multiple Boot Manager)…MBRに入れてチェーンロードする向けのフリーなブートローダ

あるOS専用だったり汎用だったり色々あるけどこの辺りが良く聞く奴ら

機能

f:id:ovobolo:20180202022911j:plain

具体的な起動方法

基本的に

となっている
それぞれの場合について見ていく

BIOSブートの場合

BIOSBasic Input Output System)…ファームウェアの一つ

  • MBRディスクであるHDDには、ブートセクタと呼ばれるブートローダーの置き場がある
  • BIOSはHDDの先頭セクタにあるブートセクタの内容=ブートローダーをメモリにロードし、制御を渡す
  • 1セクタ=512バイトであり、HDDのファイルシステム内に存在するカーネル起動プログラムを直接呼ぶには小さすぎるので、段階踏んで橋渡しで起動する
  • 2TBまでのHDDからしかブートできないなど、昔からあるシステムであるが故の制限も割とある
MBRディスクのブートセクタについて

もっと詳しい話し出すと細かい事あるけどとりあえず

という感じになっていて
パーティションとかファイルシステムとかも知っておきたいが今は割愛)
片方を使わなかったり、ブートローダーを入れるときにどちらを入れるか選べたり、入ってる場所によって呼び方色々だったりするが
MBRに入ってるのがブートストラップローダーで、PBRのがIPL、という記述を散見するが、そうなの?)
MBRMBR、PBRをブートセクタと呼んでいるのも良く見る)
一番の基本としてはBIOSMBR→ブートフラグが立ってるPBR→カーネル、と呼んでいく

f:id:ovobolo:20180202022915j:plain

Windowsだと

なんか色々荒くしかわかってない

  1. BIOSが、MBRの誰かをロードする
  2. MBRの誰かが、パーティションテーブルからブートフラグの立っているPBR探してそこの誰かをロードする
  3. PBRの誰かが、HDD内のNTLDR/BOOTMGRロードする
  4. NTLDR/BOOTMGが、カーネルをロードする
Linuxだと

GRUBはPBRにも入れられるけど、基本的にはMBRに入って、PBRは見ずに起動する

  1. BIOSが、MBRのboot.imgをロードする
  2. boot.imgが、その直後の領域に書き込まれたcore.imgをロードする
  3. core.imgはファイルシステムを読めるので、HDD内の/boot/grubとかにある本体をロードする
  4. 本体は、カーネルをロードする
GURB1だと

調べてるとstage云々とか出てくるけどそれはLegasyっぽい?けど2は1を大体継承して改良した感じやし似てる?

  1. BIOSが、MBRGRUB stage1を呼ぶ
  2. stage1が、その直後の領域に書き込まれたstage1.5を呼ぶ(1.5は無い場合もある?)
  3. stage1.5はファイルシステムを読めるので、HDD内の/boot/grubとかにあるstage2を呼ぶ
  4. stage2は、カーネルをロードする
デュアルブートするとき

色々あるけど、MBRにチェーンロードが出来るブートローダーを入れて、PBRにそれぞれのOS用のブートローダーをいれて呼び呼び(二段階ブートと呼ばれたり)

UEFIブートの場合

UEFIUnified Extensible Firmware Interface)…ファームウェアーOS間のインターフェース仕様

BIOSとどう変わったか

なんかUEFI自体がブートローダー機能を持っていて、HDDの先頭にFAT32でシステムパーティションを用意して、そこを読みに行くとか???

デュアルブートのやり方

ベストな方法かはわからないし、詳細は他を探してくださいという感じですが方針としては

BIOSブートで1つのHDDをパーティション切ってWindowsLinux

  • MBRにMBMだかGRUBを入れて、そこからパーティションを選ぶ
    • Windwsを後から入れるとMBRを上書きするので、先に入れて後からLinuxをいい感じに入れる

BIOSブートでHDD2つそれぞれにWindowsLinux入れる

  1. Windowsを普通に入れる
  2. MBRGRUBいれてLinuxをインストール
  3. Linuxの方の優先度を上げてGRUBから選ぶ

UFEIブート

  • やってないのでわからーん セキュアブートとか色々ややこしそう