PCの起動とかブートローダーとかBIOSとかデュアルブートとか
はじめに
このブログについて
良ければ目を通してください
きっかけとか
用語の確認
- デュアルブート…2つのOS
- マルチブート…複数のOS
なのでマルチブート ⊃ デュアルブート
したかった事
起動の仕組み(概要)
大まかに書くと
- 電源を入れる
- ファームウェアが立ち上がり
- ハードウェアの初期化などを行う
- POST(Power On Self Test)…初期診断 とか
- HDDの先頭から「OS起動用のソフトウェア」をロードする
- ハードウェアの初期化などを行う
- 「OS起動用のソフトウェア」がHDDからOSを見つけて読み込む
という流れになっている
いきなりOSが立ち上がるんじゃなくて間に橋渡し役である「OS起動用のソフトウェア」がいて、デュアルブートするにはそのあたりが重要
辺りが気を付けたいポイント
「OS起動用のソフトウェア」について
文献によって呼び方違ったり、用語が使い分けられていたりいなかったり、色々ややこしいけど
- IPL(Initial Program Loader)
- ブートストラップローダー
- (上を略して)ブートローダー
とかとかと呼ばれるもの(大体色々合わせてブートローダーと呼ばれてる?)
種類とか
どう使われているかとか詳細はのちほどとして、名称とか用語とか
仕向け
あるOS専用だったり汎用だったり色々あるけどこの辺りが良く聞く奴ら
機能
具体的な起動方法
基本的に
となっている
それぞれの場合について見ていく
BIOSブートの場合
BIOS(Basic Input Output System)…ファームウェアの一つ
- MBRディスクであるHDDには、ブートセクタと呼ばれるブートローダーの置き場がある
- BIOSはHDDの先頭セクタにあるブートセクタの内容=ブートローダーをメモリにロードし、制御を渡す
- 1セクタ=512バイトであり、HDDのファイルシステム内に存在するカーネル起動プログラムを直接呼ぶには小さすぎるので、段階踏んで橋渡しで起動する
- 2TBまでのHDDからしかブートできないなど、昔からあるシステムであるが故の制限も割とある
MBRディスクのブートセクタについて
もっと詳しい話し出すと細かい事あるけどとりあえず
- MRB(Master Boot Record)
- PBR(Partition Boot Record)、またはVBR(Volume Boot Record)
という感じになっていて
(パーティションとかファイルシステムとかも知っておきたいが今は割愛)
片方を使わなかったり、ブートローダーを入れるときにどちらを入れるか選べたり、入ってる場所によって呼び方色々だったりするが
(MBRに入ってるのがブートストラップローダーで、PBRのがIPL、という記述を散見するが、そうなの?)
(MBRをMBR、PBRをブートセクタと呼んでいるのも良く見る)
一番の基本としてはBIOS→MBR→ブートフラグが立ってるPBR→カーネル、と呼んでいく
Windowsだと
なんか色々荒くしかわかってない
- BIOSが、MBRの誰かをロードする
- MBRの誰かが、パーティションテーブルからブートフラグの立っているPBR探してそこの誰かをロードする
- PBRの誰かが、HDD内のNTLDR/BOOTMGRロードする
- NTLDR/BOOTMGが、カーネルをロードする
Linuxだと
GRUBはPBRにも入れられるけど、基本的にはMBRに入って、PBRは見ずに起動する
- BIOSが、MBRのboot.imgをロードする
- boot.imgが、その直後の領域に書き込まれたcore.imgをロードする
- core.imgはファイルシステムを読めるので、HDD内の/boot/grubとかにある本体をロードする
- 本体は、カーネルをロードする
GURB1だと
調べてるとstage云々とか出てくるけどそれはLegasyっぽい?けど2は1を大体継承して改良した感じやし似てる?
- BIOSが、MBRのGRUB stage1を呼ぶ
- stage1が、その直後の領域に書き込まれたstage1.5を呼ぶ(1.5は無い場合もある?)
- stage1.5はファイルシステムを読めるので、HDD内の/boot/grubとかにあるstage2を呼ぶ
- stage2は、カーネルをロードする
デュアルブートするとき
色々あるけど、MBRにチェーンロードが出来るブートローダーを入れて、PBRにそれぞれのOS用のブートローダーをいれて呼び呼び(二段階ブートと呼ばれたり)
UEFIブートの場合
UEFI(Unified Extensible Firmware Interface)…ファームウェアーOS間のインターフェース仕様
BIOSとどう変わったか
なんかUEFI自体がブートローダー機能を持っていて、HDDの先頭にFAT32でシステムパーティションを用意して、そこを読みに行くとか???
デュアルブートのやり方
ベストな方法かはわからないし、詳細は他を探してくださいという感じですが方針としては
BIOSブートで1つのHDDをパーティション切ってWindowsとLinux
BIOSブートでHDD2つそれぞれにWindowsとLinux入れる
UFEIブート
- やってないのでわからーん セキュアブートとか色々ややこしそう