なーたのおぼえがき

なーたのおぼえがき

つくったものとか

ブートセクタとパーティション

昨日文学フリマに行って、数冊買ってきました。楽しかった。
それはそうといつも通りの希死念慮と戦いつつ。そう言えば「How to disappear: erase your digital footprint, leave false trails, and vanish without a trace」届いたんですけど、訳しながらだとゆっくりしか読み進められませんね。細かいところに未知の単語がたくさんあって難しいです。邦訳無いかなー?

というわけでレジストリ②WindowsNTの起動について書いていた時にそういえば気が向いたらまとめるって書いたなと思い出したのでそれです。

ブートセクタとは

まずセクタっていうのは記憶領域の最小単位で基本的に容量は512バイトです。
ブートセクタはその中でも基本的に領域の先頭にあり、OSを起動させるプログラム(IPL:Initial Program Loader)やファイルシステムの情報を持った領域のこと。ブートローダー(ブートストラップローダ)を呼び出すのもここの役目です。これが壊れるとOSは起動できません。壊れなくてもなかったら起動できないけどね。
なかったら〜っていうのはブータブルメディア(適当に言えばOSを起動させる記憶装置のこと)のファイル全部(隠しファイル含めて)を別のメモリスティックにコピーしてもブータブルメディアは出来ないってこと。フォーマットで(ファイルとしてではなく)ディスクに直接書き込まれるから、ファイルを全部コピーしてもディスクにあるブートセクタはコピーされない。だからOSを起動するプログラムを呼び出すことができなくて起動できないよ。

パーティションとは

ハードディスクの記憶領域を論理的に区切った領域単位のこと。
www.atmarkit.co.jp
これの最初の方見たらわかるかな。そうね、記憶領域(ディスク)を家としたら、パーティションは部屋って感じ?

ブートセクタの見方

これは前に書いた通りディスクに書き込まれているものなのでファイラー(Windowsの標準だとExplorerみたいな感じのファイル管理のためのソフトウェア)ではなくてsector Editer(DiskProdeとかその辺)で見るよ。
ちょっと古いけどこの辺のサイトとか。色々書いてあって楽しいよ。
uiuicy.cs.land.to

ブートセクタの種類?

大きく分けて2種類あります。正確には広義の意味でのブートセクタには2種類、通常使う意味では1種類。

MBR 記憶装置の最初のセクタ。パーティション方式とも
PBR パーティションの最初のセクタ

まずMBR(Master Boot Record)だけど、これは記憶装置(ハードディスクなどのストレージ)の最も先頭のセクタにあるもの。パーティションの外側にあるよ。
パーティション方式っていうのは…まあディスクの利用法とでも言おうかな。
で、PBR (Partition Boot Recode)。パーティションごとに存在するものです。

MBR:Master Boot Record

昔から使用されてきたパーティションの形式で、マルチブートに対応してます。マザーボードを問わない(BIOSUEFIを問わない)んだけど、記憶装置とかに制約があるよ。
その制約はこちら

  1. 容量が2TBまで
  2. パーティション分割は4つまで
  3. 32bit環境

中身としてはブートローダー(446バイト)とパーティションテーブル(64バイト)、ブートシグネチャ(2バイト)の計512バイト。つまり1セクタ。
f:id:Clairdeluna_eve:20190504024717p:plain
MBRブートローダーはOS呼び出すために、OSを起動する起動パーティション(アクティブパーティション)を探すもの。
で、パーティションテーブルっていうのはパーティションの構成情報のこと。さっきのパーティションの例えでいけば、見取り図?みたいな。この記憶装置にはいくつパーティションが入ってますとか。
「プライマリパーティション」「拡張パーティション」「論理ドライブ」の3種類。

パーティション

プライマリパーティション

よくある原始的?な感じのやつ。意識しないで使用してるのは多分これ。
そしてこれだけが起動パーティションとして指定することができます。指定されたパーティションのことをアクティブパーティションって呼んで区別するよ。これの先頭にPBR(パーティションブートレコード)があります。

拡張パーティション

単体であっても意味のない、ちょっと特殊なパーティション。次の論理ドライブを格納するためだけにあるもの。1つの記憶装置に1つだけ作ることができます。

ここまでの2つは前に書いた「パーティション分割は4つまで」の制約を受けるよ。拡張パーティションは1つしか作れないからあるなしとプライマリの数って感じだけど。

論理ドライブ

拡張パーティションの中に存在する無制限に(そこまでいるかはともかく)作成することができる。ドライブレターが枯渇するまで。(ドライブレターっていうのはWindowsMSDOSでドライブを認識するために使用する文字または文字列のこと。Cドライブっていうよね)

ここで「拡張パーティションと論理ドライブの関係と物理ドライブとプライマリパーティションの関係って何が違うの」て思うだろうけど。

それぞれの関係

物理ドライブとプライマリパーティション

物理ドライブの先頭にはここで説明してるMBRがあります。それがパーティションテーブルになっていてプライマリパーティションと拡張パーティションを管理してる。こんな感じ。ペイントで作ってるから汚くてごめんね。
f:id:Clairdeluna_eve:20190504022210p:plain

拡張パーティションと論理ドライブ

いわゆる入れ子構造。
f:id:Clairdeluna_eve:20190504022411p:plain
EBRっていうのは拡張ブートレコード(Extension Boot Recodeもしくは拡張パーティションブートレコード:EPBR)で、MBRと同じような構造をしています。ただしブートローダ、つまり決められたプログラムの領域は「0」で埋められている、らしい。見たことないので気になるなら自分で見るといい。ここは論理ドライブの領域情報(パーティションテーブルみたいなの)が書かれているよ。ただ、図の通り論理ドライブは入れ子構造で、MBRパーティションテーブル4つのうち2つは未使用になる。
で、EBRと論理ドライブのブートセクタは必ず一対になっている。そして論理ドライブの直後には(論理ドライブがもう1つある場合)EBRがあります。
拡張パーティションはEBRをたどることで論理ドライブを特定する仕組みのこと。

パーティションテーブルで1つだけをアクティブパーティションとして設定できます。で、このアクティブパーティションがないと起動処理が行われることはない。つまり、記憶装置が起動ディスク(メディア)として使用されることはないってことになる。

GPT:GUID Partition Table

記憶装置の大容量化に対応して新しく出てきた形式。MBRにあった制約の全てがなくなった(気にしなくて良くなった)代わりに違う制約が加わった。それが

  1. UEFI対応のマザーボードでないとOSが起動できない
  2. 基本的にマルチブートには対応していない(方法はある)

で、MBRの制約を気にしなくて良くなったのはGPTがこんな仕様だから

UEFIBIOSについてとかIntelAMDとかそのうち書きたいなー。CPUチップセットの話とか。自分がちゃんと把握してないからだけど。

GPTは信頼性の向上のためにパーティションテーブルの複製、巡回冗長検査(CRC:データを値とみなしある定数で割った余りを付加することによって誤り検知を行う方式で状況によっては訂正することもできる)保護をしています。
どっち使ってるの?って思った時の確認方法。
pc-kaizen.com
GPTはMBRと違って物理ブロックアドレス指定(LBA:記憶装置の先頭セクタから何番目かというのを示す)で表されるよ。
それでMBRでいう先頭セクタはこんな感じ。色が同じとこは同じものって感じ。
f:id:Clairdeluna_eve:20190504063213p:plain
後方互換性(MBRディスクとの互換性)を保つため、MBRデータ用に予約されている最初(LBA 0)のブロックをProtective MBRって呼ぶ。

プライマリGPTヘッダー(最初のGPTヘッダ)は2つ目の論理ブロック(LBA 1)から始まる。ここにはディスクGUID、プライマリGPTテーブルの位置、セカンダリヘッダ(最後にあるやつ)の位置、CRC32のチェックサムとか色々なものが含まれてる。テーブルの中にあるパーティションのエントリ数もこのヘッダーで指定します。プライマリGPTヘッダとセカンダリGPTヘッダの内容は同一でプライマリの修復にセカンダリを使用したり、プライマリにアクセスすることが不可能な場合や破損している場合にセカンダリを使ったりっていう運用をしてるよ。

プライマリGPTテーブルには最初からサイズ128バイト、パーティションタイプGUID、固有パーティションがGIODのパーティションが128エントリー含まれてます。
f:id:Clairdeluna_eve:20190504065847p:plain
こんな感じの128byteが128個。これもセカンダリは復元用とかで使用されるよ。

基本的にBIOS+MBRUEFI+GPTって組み合わせ。

PBR:Partition Boot Recode

いわゆるよく聞く感じのやつ。ブートセクタよく聞くか問題はともかくして。
MBRブートローダによって呼び出される形で動くやつ。
パーティションブートレコードの別名としてボリュームブートレコード(VBR)っていうのもあります。

ボリュームっていうのはディスク上の領域のこと。パーティションが衝立(しきり)で、それによってCドライブとかDドライブなんかをディスク上で切り分ける。で、その中のことをボリュームっていう感じ。

中身としてはディスク管理に必要な「パラメータブロック」とOSを実行するための「ブートストラップローダ」とかを含む5つの領域。PBRはMBRと違ってOSに依存するので細かい内容はそれぞれ違う。

  1. ジャンプ命令:ブートストラップローダを呼び出す命令コードとアドレス
  2. OEM name
  3. パラメータブロック:ボリュームラベル(OSがディスクにつける名前。自由に変更できる)や1クラスタあたりのセクタ数などパーティションを認識させるための情報
  4. ブートストラップローダ:OSを呼び出すプログラム
  5. ブートシグネチャマジックナンバーと言われる2byteの情報が入っていて、これがないとPBRが無効になる。まあ署名みたいなもの?

ということで飽きたのでおしまい。