なーたのおぼえがき

なーたのおぼえがき

つくったものとか

なんでもないやつ

だいぶ期間が空いた…。

この間情報処理技術者試験受けてきました。午後1も2もまじわかめ。午前2は公式回答で自己採点して8割だったので安心。

あ、受けたのはネスペ(ネットワークスペシャリスト試験)です。

今回実は午後対策の内、メール関連とVoIP関連まるっと捨ててたんですよ。理解できなくて。

そしたら午後1にはメール、午後2には電話が出て問題の選択肢がまじでなかった…。2度目の受験でこれで午前1免除が切れるので次受けるとしたら午前1からなんですよね。と言っても午前は選択なので簡単ですが。

受かってるといいなぁと思いつつ、自身は皆無です。

今回なんかレイアウト違う?って思うのはスマホからpostしてるから。ということで散々グダグダしたらまとめてるやつの続きします。

 

ディスクタイプとボリューム

もう夏休みが終わってしまう...。といいつつ三分の二が過ぎたくらいですが。
最近推理小説読みなおしするのが楽しい。特にエラリー・クイーンの国名シリーズ読むの楽しすぎる。国名シリーズはすべての手がかりが提示された後、解決編があるから自分で推理が楽しめる。途中で突然解決編が来たりしないし、何より名探偵コナンとかである「これは...?!」とかそういうのはほぼないので。登場人物の描写でなんとなくうん?ってなるところはあるけど。
さて閑話休題。今日はボリュームとディスクタイプのお話。確か前回のやつ(ブートセクタとパーティション)の中で説明しようとしたらバカみたいに長くなったから切り離して追記したやつ。ではいってみよー

ディスクの種類

ディスクには

という2種がある。物理的に違うんじゃなくて形式なのでフォーマット的な問題ね。
ざっくりいうとダイナミックディスクWindows専用でベーシックディスクは他でも使えるディスクです。

ボリュームとは?

まずは全体にかかわるボリュームの説明から。
Q:そもそもボリュームって何ぞや?
A:外部記憶装置の単位。もしくはパーティションの中の領域のこと。
以上。というのは冗談です。あまりにも雑。
ボリュームというのは「コンピュータから見た外部記憶装置の単位」で「ファイルシステムを含む1つの領域」のこと。
コンピュータから見た外部記憶装置の単位だからパーティションがなくてもボリュームは存在し得る。例えばフロッピーディスク(略称:FD。なんじゃそらという人は調べてね)。あれはパーティションを切れないけど、その記憶領域はボリュームとして成立している。
MBRパーティションテーブルは存在しなくて、いきなりファイルシステムから始まる形式になってるよ。MO(光磁気ディスク。Magneto-Optical disk/disc)をFDとして使えるようにするみたいなこともできるらしい。

ちなみにですがdiskとdiscの使い分けが一応あって、

disk はフロッピーディスク、コンピュータのハードドライブ内のディスク、外部ハードドライブなどの磁気メディアを指します。
disc は、オーディオ CD、CD-ROM、DVD-ROM、DVD-RAM、DVD-Video ディスクなどの光学式メディアを指します。
「disc」と「disk」の違い - Apple サポート

この区切りで言うとSSDが消え去る(半導体だから)けど、大抵disk側に入ってるかな。
あといるかわかんないけど「ディスクとドライブって一緒では?」と思ってる人。
ディスクっていうのは物理的なもの(ハードディスクとかUSBフラッシュメモリとか)でそれ自体が一つの記憶装置であるものを指すけど、ドライブは「論理的なもの」正確にはファイルシステムの入った領域を指すよ。普通にPCを使う時にファイルやフォルダを操作するのに使うのはドライブ。データ復旧するときにツールで復元できるのは論理障害でこれはドライブが対象。それ以外だとデバイスドライバ不調とかそもそも物理ドライブが読み込めなかったとかそういう物理障害。論理的な障害だからソフトで修復できるってことですね。

閑話休題

パーティション切った領域、ドライブって呼ばない?」って思ったら大正解(正解ではないが)。思ってなくても知らんけど。
ドライブとボリューム、実はほとんど同じ意味で使われがちな言葉だったりする。
ドライブはボリュームやメディアにアクセスして読み書きする装置のこと。
ハードディスクドライブ(HDD)はハードディスクっていうメディア(記憶装置)にアクセスするための機械で、CDドライブはコンパクトディスク(CD)にアクセスするための機械。
ハードディスクってCDみたいに分かれてないのは基本的に読み書きする部分と本体が一緒になってる。だからこそハードディスクドライブって名称で定着してる。
例えばブートセクタとパーティションでもMBRの項目で論理ドライブって書いてるよね。あれは実態(ハードウェア)ではなくソフトウェア的なドライブのことでその中の領域がボリュームって感じ。実態がないからわかりにくいけど。
Cドライブは「ドライブレターC:が割り当てられたボリューム」を読み書きするためのもの。なんでボリュームなのにドライブレターなの?という疑問はあるけど答える知識持ってないので知ってたら教えてください。
ちなみに「Windows(C:)」とか「ローカルディスク(C:)」、ボリュームラベルが「Windows」「ローカルディスク」でドライブレターが「C:」です。ややこしいって?すごくよくわかる。

ということでボリュームについてはこの辺でおしまい。次はディスクタイプについて

ベーシックディスク

昔からあるやつ。最初は名前付いてなかったけどダイナミックディスクが出たからそれに伴ってベーシックディスクになった。LinuxWindowsをはじめとする多くのOSに対応してて、マルチブート(複数OSを同じディスクから起動させること)ができる。
ブートセクタとパーティションでかいたMBR(Master Boot Record)かGPT(Guide Partition Table)かによって管理できるパーティション及びボリュームの個数、容量が変化する。ほとんどこれのはず。いつでもダイナミックディスクに変換できる。

ボリューム

ベーシックディスクのボリュームレイアウト(ディスクのボリューム配置のこと)はシンプルボリュームが基本です。
シンプルボリュームとはディスクを跨がらないボリューム配置のこと。一つのディスクをパーティション分割して複数のボリュームを作成したり、パーティションを一つのまま分割しないで1ディスク1ボリュームで使用したりできるよ。ただし、パーティションを跨いでボリュームを作成することはできない。
f:id:Clairdeluna_eve:20190825001749p:plain
こんな感じでパーティションを三つに分割してC,D,Cって割り当てるのは(ボリュームを拡張することは)できない。
MBR形式でベーシックディスクをフォーマットした場合、パーティションは4つまで。だからすべてをプライマリパーティションにしたら最大4つ、4つ目を拡張パーティションにした場合は5つ以上ボリュームを作れる。
f:id:Clairdeluna_eve:20190825005614p:plain
こんな感じ。
GPTだと128までパーティション分割できるから128のボリューム?かな?

ダイナミックディスク

Windows2000から追加されたWindows独自のディスク形式で、ベーシックディスクとの互換性はない。ベーシックディスクよりも高性能。実はそんなに使われてないっぽい(観測範囲では)?
パーティションは一つであり、その中をボリュームで論理的に切り分けることによって管理する。

特徴は

  • ボリュームレイアウトが独特
  • ソフトウェアRAIDができる
  • マルチブート非対応
  • Windows専用
  • ベーシックディスクと互換性がない

ボリューム

ベーシックディスクと違ってダイナミックディスクにはボリュームの種類が5つ。

  • シンプルボリューム
  • スパンボリューム
  • ストライプボリューム
  • ミラーボリューム
  • RAID-5ボリューム
シンプルボリューム

これはベーシックディスクとほとんど変わらないけどこんな感じ。
f:id:Clairdeluna_eve:20190825170011p:plain
相違点はパーティションが存在しないこと、別ボリュームを跨いで構成することもできることくらいかな。

スパンボリューム

2台以上のディスク(物理装置)上の未割当領域(ボリュームにもパーティションにもなっていない空白の領域のこと)を一つのボリュームとして結合することによってすごい容量の大きいボリュームとして稼働させるもの。結合するディスク容量が違ってもOK。最大で確か32台まで扱える。別のボリュームを跨いでボリュームを構成することも可能。
こんな感じ。
f:id:Clairdeluna_eve:20190825191714p:plain
ただしデメリットが強くてあんまり使えない。なんとこの方式、障害耐性がない。どんなに広大な容量を扱っていてもボリュームの中でどこか一か所に障害が発生すると、障害が発生したボリューム全体が使えなくなります。びっくり。つまり32台結合して1台でも物理ディスクが故障した(読み込めなくなった)ら32台ぜーんぶ使えなくなるっていう恐怖の装置。こわい。

ストライプボリューム

これはRAID-0(ストライピング)と同じ。
RAIDっていうのは複数のHDDを一つのドライブのように認識させる技術。これによって大容量化や信頼性、冗長性の確保ができる。RAIDについてはそのうちまとめたい。
各ディスクのサイズは違ってもいいけど、割り当てる領域は同じにする必要がある。なんでかというとストライピングは一定のサイズに分割したデータを複数ディスクに分散して書き込む形式だから。
こんな感じ。
f:id:Clairdeluna_eve:20190825215407p:plain
データの転送速度が速くて利用効率がいい反面、可用性(システムが継続して稼働できる能力)が低く故障しやすい。最小構成がディスク2つなので、(ディスクが増えれば増えるほど一つ故障したときに壊れるから)故障する確率が上がる。

ミラーボリューム

RAID-1(ミラーリング)と同じ。
これも割り当て容量は同じにしなきゃいけない。
f:id:Clairdeluna_eve:20190825215407p:plain
ストライピングと違って同じデータを二つに書き込むことで冗長性と障害耐性を高めてる。その代わり2つ分の容量に1つ分のデータしか書き込めないから利用効率が悪い。でも片方壊れてもデータが残るよ。Server系のWindows OSとWindows7Professional/Enterprise/Ultimateで使える。

RAID-5ボリューム

名前でわかると思うけどRAID-5(パリティレイド)と同じ。
書き込むときにパリティと呼ばれるデータを作って一緒に書き込むことで高速性、冗長性、容量の拡張性を実現してるよ。実際に使用できるのはディスク本数-1の容量。
f:id:Clairdeluna_eve:20190825233632p:plain
読み出し速度が高速で、台数が増えるほど利用率も上がる。ただ、書き込み時にパリティを作成するので書き込み速度は遅い。障害耐性は高くて故障したディスクを交換してパリティからデータを再構成することができる。でも導入コストが最低構成がディスク3台からなので他と比べて高い。あと、システムボリュームやブートボリュームに使用することができないのでそこが死んだら意味がない。Server系のWindows OSでのみ使える。

ということでボリュームの説明はおしまい!
続いて「ソフトウェアRAIDができる」について。

ソフトウェアRAID

RAIDが大容量化とか冗長性確保、信頼性向上の技術っていうのはさらっと上で書いたけど、実はこれには種類があって。題でわかるかもしれないけど「ハードウェアRAID」と「ソフトウェアRAID」の二つ。

ソフトウェアRAID

OSなどのソフトウェアが複数ディスクをまとめて管理するもの。LinuxだとMD(Multiple Devices)とか。特別なハードウェアがいらないため導入コストが低い反面、CPUリソースを使用するためシステム全体に負荷がかかること、OSが制御するため起動ディスクとして設定することができないなど割と問題があったりする。最近のOSでは標準搭載になってるから簡単にできるよ。

ハードウェアRAID

SCSI(Small Computer System Interface。読みはすもーるこんぴゅーたしすてむいんたふぇーす。通称:スカジー。ハードウェア間のインタフェースの一種)などを使用してハードウェア的にハードディスクを束ねる方法。マザーボードとディスクの間にRAIDコントローラっていうのが入る。ディスクアレイもハードウェアRAIDの一種?だよ。ソフトウェアRAIDと違ってシステム側からは単体のディスクにしか見えないため起動ディスクとして使用できる。そしてCPUやOSのふるまいに影響がない。ただし導入コストが高い。そして最新のCPUとかだとソフトウェアRAIDのほうが性能高かった、なんてこともある。サーバ構築だとこっちが一般的かな?

なんとなくわかったと思うけど、ダイナミックディスクはボリューム構成によってソフトウェアRAIDを実現しているよ。

マルチブート非対応

OSはドライブやボリュームではなくパーティションに入るもの。そのためベーシックディスクと違ってパーティションが一つしかないダイナミックディスクでは一つしかOSを入れることができないよ。

Windows専用

そもそもダイナミックディスクMicroSoftとVeritas Softwareによって作られたWindowsのディスク管理方式の一つ。MicroSoftを全力で推してたのはWindows2000の時だけじゃないかな…?そして今広く使われていないことからわかるようにスタンダードなものではなく、ほかのOSは普通に対応していません。といいたいところなんだけど、Idmtoolというものがあってね?これを入れるとマウントできるようになる。前はリードオンリーだったみたいだけどNTFS(ファイルシステム)に対応してたら普通に読み書き可能。

ベーシックディスクと互換性がない

ベーシックディスクと互換性がない、というのはパーティション管理が違うから。
基本的にハードディスク予約領域(最後の1MB)に論理ディスクマネージャデータベースを作成してシステムのディスク構成を保持する。一応、MBRやGPTを使うこともできる、らしい。
MBRを使用する場合は大きな一つのパーティションがデータを保持して、メタデータは終端に。
GPTを使用する場合は小さなパーティションが作られてそこにメタデータが、それ以外の領域を一つの巨大パーティションにしてデータを保持という形になる。
まあそもそも、相互変換無理という大問題が。ベーシックディスクからダイナミックディスクに変換するときはデータを残して変換することが可能だったりしますが、残念なことに逆はすべて吹っ飛ぶという鬼畜仕様。
ちなみにディスク系のツール全般、OSバックアップソフト、パーティション管理ツール、マルチブートソフト、CDから起動するメンテナンスツールなどなど結構な数のソフトがダイナミックディスク非対応。壊れたときにメンテナンスできないなんてことも起こりうる。

確認方法

「ディスク管理」で自分のPCのディスク種を確認することができるよ。

Windows XP

[コントロールパネル]⇨[パフォーマンスとメンテナンス]⇨[管理ツール]⇨[コンピュータの管理]ウィンドウが起動⇨左側のツリー[記憶域]の中の[ディスク管理]

Windows Vista/7

[スタート]の中の[コンピュータ]を右クリック⇨[管理]⇨[ユーザアカウントの制御]は続行/はいをクリック⇨[コンピュータの管理]ウィンドウが起動⇨左側のツリー[記憶域]の中の[ディスク管理]

Windows 8/8.1/RT

デスクトップ画面とModern UI(アプリアイコンが並んでいるやつ)で変わります。1はどっちでも、2はデスクトップ画面のみの操作。
1.[Windowsキー]+[X]⇨出てきたメニューから[ディスク管理]
2.Cherm(チャーム:横から出てくる電源や設定のメニュー)の設定⇨[コントロールパネル]⇨[システムとセキュリティ]⇨[管理ツール]の[ハードディスク パーティションの作成とフォーマット]

Windows10

[Windowsキー]+[X]もしくは左下の[Windowsアイコン]を右クリック⇨出てきたメニューから[ディスク管理]

共通?

[Windowsキー]+[R]もしくは左下の[Windowsアイコン]を右クリックで[ファイル名を指定して実行]⇨ダイアログに[diskmgmt.msc]を入力⇨[Enter]

XPより前は手元にないので自力で調べてやってね。

ディスク変換

ベーシックディスクからダイナミックディスクへの変換はデータを保持したままいつでもすることが可能です。確かWindows2000だと外付け付けたときに変換しますか?ってすぐきかれたはず。それ以外はこんな感じ。

上で確認するときに出したディスク管理で[ディスク0]や[ディスク1]を右クリック
f:id:Clairdeluna_eve:20190826144239p:plain
出てくるメニューに[ダイナミックディスクに変換(C)]があるのでクリック。ダイアログで出てくるディスクをチェックしたら[OK]。
f:id:Clairdeluna_eve:20190826144720p:plain
再度確認して変換を押すと、変換されます。若干時間かかるけど。

逆にダイナミックディスクからベーシックディスクに変換する場合、データは全部消し飛ぶ。
手順は
docs.microsoft.com

消し飛ぶって言ったけど、「結果的にデータ残したままダイナミックディスクからベーシックディスクに変換する」のならいけるんじゃね?って思っている方法が一つ。
でもこの方法どうなるかわかんないし、たぶん条件あるんじゃないかな。ダイナミックディスクになってから作ったボリュームは形式違うから復元できないとか。ベーシックディスクから変換したときにあったデータは元がパーティションだからいけそうじゃない?
で、TestDiskを知っているかい?
www.cgsecurity.org
これを見ていただけるとわかると思うんだけど、できることに「パーティションテーブルを復元し、削除されたパーティションを復元する」というのがある。
だから、ダイナミックディスクのボリュームをすべて削除してすべて未割当にしたらたぶんベーシックディスクに変換できるようになるはず。
そして変換した後って、たぶんベーシックディスクの全領域未割当ができるはず。そしたらTestDiskでQuick Searchして削除したボリューム(パーティション)を検出できるはずなんだよね。検出されれば復元できるはずだから復元すると「結果的にデータが保持されて」変換できるんじゃないかと。まあ復元されたときになんか問題あるかもしれないけど。
考えられるのだとドライブレターがなくて表示されないとか。

というわけで今回はここまで。ながーくなってしまった。

VMagicMirrorを導入した話

ちょっと前から気になってたソフトを導入しました。
かわいい。たのしい。
f:id:Clairdeluna_eve:20190522233922p:plain
ファイル群は気にしにゃいで。今やってるWordPressのファイルとか投げてたりするけど特にみられて困るものはないのでいいか。
モデルは幻遊童子さんのこちら
ソフトは獏星さん(twitter:@baku_dreameater)のVMagicMirror
baku-dreameater.booth.pm
ソフトとしてはVR機器を使わなくてもトラッキングっぽい感じになる3Dデスクトップマスコット?キーボードとマウス、マイクを使ったリップシンクにカメラで表情かな。今のところ私はマイクとカメラを切ってます。モデルの口が小さいのでリップシンクが全然わからんことと、マウスポインタを目で追うの可愛いから。
導入手順はBoothからダウンロードしてzip解凍。3DをVRM形式で出力したファイルを用意して読み込ませて調節したら使えるようになる。
デスクトップマスコットはゴースト(伺か)とかapricot以来入れてないから久々でした。
これほんとにこう、とてもモチベ上がる。うちの子効果、というか可愛いキャラと共にいる感じがここまで影響あるとは…。
突然だったから自分でモデル作る間もなく導入したけど、そのうち自分のモデル作るぞ!もちろんネコ作るのは決めてる。ネコを信じよ。
余談だけど、個人的に獏星さんとこのめぐみさんめっっちゃ好き。黒肌なのも推せるし星がかっわいい!!黒肌銀髪赤目で獏モチーフかわよ。獏星さんはなんというか統一感?のあるコンセプトだから安心して見れる。好き。

なんでこんなに急かというと、レポートやる気が皆無に等しくて癒しが欲しかったんです。先日のVRM勉強会のライブ映像見てたので思い出したというのもある。
肩幅の狭いモデルだと若干めり込み(服というか袖幅の問題か?)が発生するなあというのはあるけどそれ以上にかわいい。幸せ。ほんとに甘く見てた。すばらっ。
コーディングのお供にとてもいい可愛い。癒し。プレゼンモードも指さしちゃんとしてくれるのがとても可愛いです。右よし!左よし!ってしてしばらく遊んでた。学友らに布教したいけど月曜のプレゼンは残念ながらMacでやることになってるから直見せせねば。早くうちの子作ってデスクトップで仲良くしたい…。
ふと思い出したけど、モデル=うちの子≒リアルアバターという認識の薄いとデスクトップマスコットは「思ったようにキャラを動かす=キャラに対する支配」って受け取る人いるよね。使ってた時にそんなこと言われて非難されたのびっくりした。え、なにぬいぐるみは生きてるからってタイプなの?って聞いたの未だに覚えてる。

ということでこれみた人入れてみよう?幸せだよ!うちの子がそばに居るのたのしいよ。クロマキーとかも出来るみたいだし、ぜひぜひに。そしてキャラがいる幸せを感じよう。3Dモデルがこんなに可愛いとは…この衝撃を分かち合いたい。

私はMMDデスクトップマスコット作ったらモーション入れたくなって、結果的にすごい邪魔で(動き回るから)断念したよ…。その時は最前面じゃなくて後に出してPCの中を自由に動き回ってる感を出したけどすっっごい重くなって地獄を見た。コード自体はそんなに大きくなかったけどはじめてのC#だったので大苦戦した思い出。
Cが書けるからってC#出来ると思ったら大間違い!!(その後にxamarinやったから余計に無理ぽ感あった)
何が言いたいかというと、ツール作る人はすごいよね!わしもやってみたき…というだけですはい。

ついでにずっと重いし容量食うから消してたVisualStudioをThinkPadちゃんに入れました。Webオーサリングツール作ってみたいんじゃい。

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

昨日文学フリマに行って、数冊買ってきました。楽しかった。
それはそうといつも通りの希死念慮と戦いつつ。そう言えば「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が無効になる。まあ署名みたいなもの?

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

修復ループからクリーンインストール 寮友のPC

新寮生の歓迎会?も終わり友人が気掛かりな中、花粉やばすぎて外に出られない日々が続いています。
さて、「これ普通なの?」と寮友に聞かれて見たPCがえげつないほど重く(エクスプローラー開くのに5分とか。Win10だったよ)どういうことなんだと思っていたら突然の再起動の後修復ループがやってきました。全くもって普通じゃないよ。
修復ループっていうのは勝手に言ってるだけなんだけど、自動修復メニューに何度起動しても入ってしまうやつです。あれ怖い。
結局預かってどうにかすることになって困惑していますがまあしょうがない。できなかったらごめんね☆と思いつつこいつPC買ってから1年経ってないよなと訝しんでる。
ということで今回はまたどうやったか、何やったか忘れるから残そうという意図です。

事の起こり

最初マカフィーの期限がもう半年以上前に切れているけどこれは製品版を購入した方が良いのかという質問を受けて、切れてから今まではそのまま放置していたという事だったのと自分で払いたくないという発言から親に聞いて払ってくれるなら製品版に移行、そうでないならほとんど使用しない(最後に起動したのが夏前)かつレポートとCADにしか使用しない(ネットワークに接続しない)ことからWindows Defenderに切り替えることになりました。
そこでやばいほどに重いことが発覚。とりあえず原因を探るべく立ち上げたタスクマネージャーでディスクが100%になっているのを見つけて引いたのが2019年3月30日。歓迎会のためにケーキとみたらし団子作ってた時だったのであわあわした。

30日にしたこと

必要のないタスクを終了する。

反応が遅すぎて、1つ終了するのに数分待ったが改善しなかった。

この時点でちょっとこのPCは大変なことになっていますね?と確信してデータが消えてもいいか確認したらいいとのことだったのでクリーンインストールをすることができますね。

突然落ちてブルースクリーン吐いた

この時私はクッキー焼きに行ってたので突然の「パソコンの画面が青い!!」という電話を受けました。エラー文は見てないので分からず。
そのまま修復モードに入ったらしい。でもここで時間切れ。なぜかというとケーキ2ホールとクッキーみたらし団子チョコフォンデュを作るのにちょっと時間足らなかった。預かることになった。なんでよ。

スタートアップ修復

4時くらいまで歓迎会の後にグダグダ話したり遊んだりしていてめっちゃ眠い中、スタートアップの修復をかけて一旦寝た。

んだけど、起きたら終わっていましたが全然ダメ。この時これは修復ループですねと理解しました。つまりなんらかの原因でWindowsが読み込めていない。レジストリかハードディスクかデータ破損か。なんも分からんのだけど眠すぎてそれどころじゃなく。
とりあえず電源切って再起動。タイミングよくエラー画面が出てエラー番号とエラー文を把握。「0xc0000225」でどうもwinload.efi(winlogin.efiだったか?)が読み込めてないというか見つからないという感じでした。
なればこそ文明の利器に「windows 0xc0000225」と問いかけると
thejuraku.com
「HDDをSSDにクローンした時に起きることがある」らしい?あの子のPCだからそれは絶対にないな。「元のシステム構成を使っていることが原因」ということはこれはブートセクタの問題じゃないですかね?という安直極まりない思考が走る。眠くて単純に考えにくかったのもあってかもうこれしか思いつかないまま。メモに「ブートセクタ」の一語だけが記されていて正直当惑しました。(そう、思いついた後寝たんですよ)

で、まあ昨日かけたけど別のことやりながらだったしもう一回かけてみるかということで(朝かけたこと忘れてもう一度やった)スタートアップ修復をかけた。で、今度はセーフモード起動を試しましょうという意気込みもあり、スタートアップ修復が終わるまで暇を持て余す。
終わったけどやっぱりダメだったらしく、スタートアップ設定からセーフモード起動すべく再起動。これにすら時間めっちゃかかるんだよなこいつと思いながらまた暇なのでゲームした。
そしたらセーフモード起動でこいつが出た(見にくい)。
f:id:Clairdeluna_eve:20190331175027j:plain
文字化けしないで??と思ったけどしてしまったものは仕方がない。というかセーフモードダメなの?ということでこの画面と構成の似たものを探していたけど見つからず、というかどれかわからず。としているうちに消え去ってしまったので再起動。

駄目元復元ポイント

どうせ作ってないだろうなと思いつつシステムの復元とかイメージによる復元を試しましたがそりゃ存在しなかった。今度起動したら作っておきましょう。地獄かな?

コマンドプロンプトを試そう

まずは

bootrec /rebuildbcd

そのあとにスタートアップ修復と思ったんだけどおああああってなった。
f:id:Clairdeluna_eve:20190331181331j:plain
windowsのインストールとして認識された合計数:0」まじかい。これは何が原因なのか。
uraneko.tcorps.info
らしいけど、でもOSのパーティションはあるのか??ということで

diskpart
list volume

...おお?なんかおかしいぞ??
f:id:Clairdeluna_eve:20190331185507j:plain
ファイルシステムがRAW?未フォーマットじゃんか怖。Cドライブが未フォーマットってどういうこと。

Thinkpadさんでwindows10のブートHDDフォーマット情報を確認。
f:id:Clairdeluna_eve:20190331222101j:plain
見た感じNTFSかなとは思ってたけどやっぱそうだった。後ろの画面はなんとなくインストールメディアいるかなと思って開いたけどいらなかったというあれ。徒労ですね。
windowsの下にあるwinREは回復環境。今弄ってるこの修復メニューとかあるやつがこれ。これから起動できるって聞いたけどできんのか??
この辺の(ブートとか起動ディスクとかパーティション関係)は友人のが詳しいから聞きたいが今できないんだよなあ…。正直こういうのは頼まれるとちょっと困る。作る遊ぶバラす組む調べるはいいけど復旧とか修理はとても苦手。うぐぐ。言ってしまった手前頼れませんしのぅ(とても自業自得)

とりあえず調べつつCドライブをNTFSにフォーマットしていきます。相変わらずdiskpart内で

select volume 0

次いで

format fs=ntfs

これFAT32の時はfs=fat32exFATの時はfs=exfatらしいです。
そうして待つこと1時間弱。新しい子と話したりしてたので暇ではなかったがやっとフォーマット終わったー!
f:id:Clairdeluna_eve:20190331235540j:plain
よしよしここから回復環境を使って生き返らせたい(希望的観測)できなかった場合は躊躇のないクリーンインストールですね…。起動できた場合はグループポリシーとかその辺もちゃんと設定した上で返却します。彼女が大学辞めなければあと三年間は関わりがあるはずなので、その範囲は保証対象にしておくべきか迷うところ。

回復環境を使用して生き返らせるべくとりあえずクリーンインストールの準備をします。インストールメディアを作ろう。
www.microsoft.com
全部ここにあるので手順に沿ってやろう。とりあえず8GBはいるそうなので余裕を持って、というかそれしかなかったからなんだけど16GBのUSBフラッシュメモリにWindows10のインストール準備。
どうせ時間がかかるのでその間にやってみよう。

フォーマット後に初期化再インストール

端的にいうと当然のごとく予想通りに失敗しました。メッセージは「PCを初期状態に戻す時に問題が発生しました。」当たり前といえば当たり前ですが初期化されてれば飛ばして再インストールしてくれるかな?って思っていたので。
なんで予想通りかというとフォーマットしたということは(そもそもRAWになっていたので見失っていたか死んだかの)ファイルシステムを完全に初期化しているわけですので、Windowsとか入ってないですからね。何を初期化するの?って話です。

そしてフォーマットよりも早いインストールメディアの作成。

クリーンインストール

実はWindows10のクリーンインストール初めてなのですごくワクワクしています。というかやっぱメディア作るのはやない??
ここから先撮影忘れて画像なしだったり。
UEFIからBoot順を変更してUSBを最初に持ってきた。んで普通にインストール。最後に順番戻すの忘れんようにせにゃ。
ところで今いじっているのはマウスコンピュータのPCです。ここのBIOS呼び出しがDeleteキーらしいという話を聞いたんですけど普通にF2でした。びっくり。
そういえばいまだになんですけど、デリートじゃなくてディレートって言ってしまうんですよ。散々指摘されておかしいおかしい言われ続けているんですけどなんでかなあ。

何はともあれインストール終了。セットアップも終了。後は本人に色々と変更してもらうだけになりました。ブート順は直したよ。
まあそれより先にちょこちょこと設定は変更していくけどね。グループポリシーとか。

ブートマネージャの確認

もしかしたらぐちゃってるかもしれないので確認だけ。修復メニューに設定から入ってコマンドプロンプト

bcdedit

大丈夫だった。ブートマネージャもローダーも1つずつ。問題なしですね。なんかたまに残ってるやつとかあるらしい。現在のやつは{current}って表示されますね。

//不要な情報の削除
bcdedit /delete {[identifier]}

//文字化けする起動情報を修正する
bcdedit /set {[identifier]} locale ja-jp
bcdedit /deletevalue {[bootmgr]} path

//起動OSの表示名変更
bcdedit /set {[identifier]} description "[name]"

よーし、初期状態に復元ポイントを生成したぞ…。システムイメージは残念なことにダメですね。まあ復元ポイントあるからどうにかなったと思いたい。
あ、グループポリシーはproじゃなかったからいじってない。

さて長かったですがやっと終了。後は聞かれた時にどうにかしたらいいはず。それにしても最近午前様でよろしくないですね。まあ仕方あるまいて。お菓子食べたい。

レジストリ③ HKEY_CLASSES_ROOTとHKEY_PERFORMANCE_DATA

さて短期スパンでスマホが死ぬという微妙な出来事がありましたが、色々置いといて。とうとうこれで書溜め分が消失します。どうしよ。前回慌てて投げたので地味な弊害が出てて、そのうちの1つが書溜め消失。
いつもなら投稿する時は次が書き終わった状態なんですが、どうせだし書溜め使い切っちゃおうということですね。これも半分までしか書けてなかったから加筆が大変。
まあそんなこんなでレジストリのルートキー最後の2つ、HKEY_CLASSES_ROOTとHKEY_PERFORMANCE_DATAです。今回でルートキーの説明は終わってあとはなんか面白いのがあったらそれをまとめるかな。記憶と知識の整理になって実に便利だよね。

前回のあらすじ

HKEY_LOCAL_MACHINEとHKEY_CURRENT_CONFIGについて説明したよ。
最後にはおまけで曖昧なWindowsNTの起動フェーズを書きました。
随分前に読んだ本のメモを参考にしながら書いたので見にくいのでもしかしたらもちょっと綺麗にするかなあ?
あと最終校閲しないまま投げたのでさっきちょっとだけ文言やらを修正しました。内容には多分変更ない。
clairdeluna-eve.hatenablog.com
では今回で全部のキーについてざっとした説明が終わります、いってみよー

HKEY_CLASSES_ROOT

このキーにはファイルを開くときの関連情報や拡張子の関連付け、COM(Component Object Model)の登録情報が入ってる。
ちょっとややこしいけど、サブキーでありルートキーであるというものになります。
COMは.NET Frameworkの前身?でソフトウェアを部品化して、呼び出して使おうねっていうMicrosoftが提唱したオブジェクト指向プログラミングモデルの1つ。
詳しくはこっち読んでね
chokuto.ifdef.jp
ざっくりいうとレゴブロック(部品)積み上げて車とかお城とか(何かの機能を提供するもの)作ろうねって考えのことです。ブロックがいろんなことに使えて作られる形が1つじゃないように、開発者が様々に組み合わせて簡単に成果物を作ることができます。ブロックの間に色々(自分で書いたプログラム)挟まってるけどな。ちなみにこのブロックは喋ります(APIとかなので)。数パターンしかないけどな。
例えば緑ブロックは「〇〇」って言ったら「あ」って返してきて「xx」って言ったら「お」って返すみたいな感じ。でこれを使って「あ」のときは立って「お」の時は手を振ろうってしたらブロックがしてくれる分は自分でプログラム書かなくていいので。

話が少々ずれました。サブキーでもルートキーでもあるっていうことについて説明します。まあそのままの意味なんだけど。
このキーの実際の中身はHKLM/Software/Classes(システム共有のデフォルト)とHKCU/Software/Classes(ユーザー固有)を融合したもの。融合時の優先度はHKCUの方が高くて、同じ項目で値や設定が違った場合はHKCUの設定が優先されます。だからもしこのキーを変更するというか設定を変更する際は原則的にHKCUを編集する(両方編集する必要はない)ことになります。あ、もちろんHKCRを編集することもできるからね。
他にも特徴はあって。例えばファイルをダブルクリックした際の設定は基本的にHKLMが使用されてる。でもユーザーが関連付けを変更した時はHKCU (ユーザーの変更した設定)が変更されます(HKLMには書き込み権限がない)。
正確に言えばHKCRでキーの値が変更されたとき、HKCUに該当キーが存在したらそれを存在しなかったらHKLMを変更するっていう動き。前の優先度の話と大体一緒。

サブキーは多すぎるので省略。気になる人は自分で見よう。基本的には拡張子とかを含む大量のサブキーが入ってるよ。列挙とか無理ぽ。

HKEY_PERFORMANCE_DATA

さて、このキーはレジストリに実際存在するキーではありません。なのでレジストリを操作するプログラムを書いて(RegQueryValueEx関数を使用)参照する必要があります。パフォーマンスもニタを表示するのとかに使われています。プロセス間通信とパフォーマンス拡張子DLL (performance Extensions DLL)ですね。たまにクラッシュするって聞くけどどうなんだろ。
あとこのキーは実際に値が入っているのではなくて関数の集合です。
書くことなくなった…

HKEY_DYN_DATA

おまけ。Windows95/98/Meにだけ存在するキーです。ユーザーがカスタマイズ用じゃないし変更することのないキーで、変化していくPCの情報が随時更新されていくやつ。どの程度随時かと言うと取得している間に値が変化してるレベルです。
バイスマネージャーとかシステムモニターとかはこのキーから情報を取得しているから実質その値がこのキーの値ってことになりますかな?
ちなみにPlug&Play情報も含まれてたり。

サブキーは

Config Manager ハードウェアの構成とか障害情報、現在のステータスの情報
Perf Stats PCのパフォーマンス情報

このキーを使ってるバージョンだとCPUの使用率を取得するにはHKEY_DYN_DATA\PerfStats\StartStat\KERNEL\CPUUsageにアクセスすると計測が開始するって感じ。で、HKEY_DYN_DATA\PerfStats\StopStat\KERNEL\CPUUsageにアクセスすると計測が終了します。いつもはCPU使用率が上がるから沈黙してるよ。
HKEY_PERFORMANCE_DATAと変わんない、のかな?
あとこのキーは(HKEY_PERFORMANCE_DATAも?)ハードディスクじゃなくてRAMに構築されてるっぽい?アクセス速度がものを言うタイプのはRAMに書かれるみたい。

さて、このあとなーんも考えてないからどうなるかわからんよ。

レジストリ② HKEY_LOCAL_MACHINEとHKEY_CURRENT_CONFIG

ということでレジストリキー第二弾。今回はHKEY_LOCAL_MACHINEとHKEY_CURRENT_CONFIGについて。
前回の①にも詳細情報というかサブキーの解説を追加しました。間違ってたら教えて。

前回のあらすじ

レジストリってなんやねん?
いろんな情報がまとまったデータベースだよ
ルートキー2つ(HKEY_CURENT_USERとHKEY_USERS)説明したよ
Windowsのマルチユーザ機能の仕組みをざっくりまとめたよ
これを書き始めた時点で編集してちょっと詳しくなったから良かったら確認してね
clairdeluna-eve.hatenablog.com

HKEY_LOCAL_MACHINE

システム全体・ハードウェアに関する情報を持っているキー。例えばハードウェアの構成、ドライバ情報、プラグアンドプレイ(接続したらすぐ使える)に関する情報などなど。略称は「HKLM」。
前回説明したHKU、HKCUはユーザーレベル(Windowsにログインするユーザー固有のもの)の情報を持っていたけれど、こっちはシステムレベル(ユーザーから見ると共通の設定)の情報を持ってる。ちょうど対になる感じ。
このキーが死ぬ(破損する)とWindowsが起動できなくなるよ。

サブキーは

BCD00000000 ブート構成情報(BCD:Boot Configuration Database)で使われる
HARDWARE ハードウェアの構成情報。システムが起動するたびに生成される実体のない揮発性のキー
COMPONENTS OEM構成情報。CBS(Component Based Servicing)とかで使われる
SYSTEM システム起動に必要な構成情報。起動するサービスやロードするドライバなど
SOFTWARE ソフトウェアの構成情報。システムブートに使用されないソフトウェア(完了後に実行されるもの)から参照される
SAM SAM(Security Accounts Manager)のデータベース。中身はSECURITYのSAMへのリンク
SECURITY セキュリティポリシーやユーザの権限の情報。一般ユーザや管理者権限ではアクセスできない

ここのサブキーは全部それぞれが独立したHive(ハイブ。グループを形成し個別の独立したファイルに保存される)になってるよ。
ちなみにウイルスが標的にする(書き換えを行う)ことが多いのはHKCUとHKLMのSOFTWAREだよ。

HKEY_CURRENT_CONFIG

現在使用されているハードウェア設定。と言いつつ実際はただのショートカット(ポインタ)です。中身はHKLMのSYSTEMにあるCurrentへのリンク。
XP?2000?くらいまではディスプレイ解像度情報とかをDisplayってキーで管理してたらしいけど、すでにキーがねえな。あとハードウェアプロファイルを選択する機能もXPくらいで廃止されてる(多分)。

サブキーは

Software 表示フォントとかの情報
System プリンターとかの情報

めっちゃ雑なのは仕様です。そうとしか書きようがないんじゃ。

WindowsNT起動の仕組み

実は大した理由なく前回と合わせとこっかなみたいなノリ。WindowsNTって呼称するときは特定のOSをさしてるから注意。そして起動フェーズに関して資料とかその他諸々が足りんのでNTの起動について(さらっと軽く)と各用語の解説的な何かを書くよ。起動の方法が全部変わってるわけではないと思うから現在の起動手順の参考にはなるんじゃないかな??
現在のWindowsはいわゆるNT系と呼ばれるやつ。NT系、というかWindows10の内部バージョンは10.0。Windows3.1以来の内部バージョンと呼称の一致だね。
ちなみに今回の起動の仕組みは前回のマルチユーザ機能の前段階。そりゃそうだけど。

WindowsNTの起動は8段階。

  1. ファームウェア実行
  2. OSローダー
  3. カーネルの起動
  4. 構成マネージャの初期化
  5. Executiveローダー
  6. ローダーブロックの解放
  7. セッションマネージャ
  8. サービスコントローラ
1. ファームウェア実行

ファームウェアfirmware)っていうのはハードウェアを動かすためのソフトウェア。ROM(読み出し専用メモリ)に入っていてほとんど更新されない固定的なソフトウェアのこと。PCでいうとBIOSが該当するよ。UEFIBIOSの一種とかいう人いるけどそんなわけないので。別物だけど通称的に用いられることは個人的には許容する。UEFIは仕様であってファームウェアじゃ無いから。日本語警察だわーい。
PCの電源が入れられたらまずはBIOSに通電して、ブートROMが実行されます。ブートROMは起動するのに必要なソフトウェアで、メモリのサイズや正常に動作しているか、バスの検出、初期設定をするもの。バスは道路走ってるやつじゃなくて、データ交換をする経路のことね。
次にハードディスクからブートセクタ(ブートブロックとも。ハードディスクの中でブートプログラムを格納してるとこ。確かパーティションの最初のセクタ)を読み込んで実行する。
ブートセクタも種類とかあって奥が深いけどよく知らんので気が向いたら。

2. OSローダー

OSローダーとは、OSをロードするための最小限のプログラムのことである!
そのまんまだね。これも種類があって二次とかフラッシュとか色々。
OSはハードディスクとか記憶媒体に入っているわけなんだけど、実行するプログラムはメモリにいないといけない(いないと実行できない)つまり「OSを実行するためにはメモリにOSがいないといけない」。無理じゃん?無限後退になるわけで。それを解決するのがOSローダー。別名ブートローダ。複雑な動きはできないけど、OSを読み込んで構築する位は充分できる。
そうだなー熟睡してるOSを叩き起こす目覚まし時計みたいな?
WindowsXPまではNTLDRが、Vista以降はWindows Boot Managerがブートローダーとして入ってるよ。
で、こんな感じで動く。

  1. バスからハードウェアの構成を取得し、メモリに情報を構築
  2. ローダーブロックを生成し1へのポインタを設定
  3. カーネルやHAL、ブートに必要なデバイスドライバファイルシステムのドライバを読み込む

ローダーブロックは物理メモリ上のいわゆる非ページプールメモリの情報構造になる。
非ページプールメモリ領域はずっとメモリ上に存在しないといけないものを置いておくページスワップ不可能な領域のこと。
通常メモリ上のプログラムやアプリケーションは使わなかった順や最後に使ってから時間が長い順とかで入れ替わっていくんだけど、OSとかドライバとかが入れ替わってたら使いにくいよね。だから入れ替わりの発生しない場所を作成してずっとそこにいてもらうわけです。

3でロードされるドライバーはいわゆるstartキーに0x00が設定されているものです。
startキーっていうのはHKEY_LOCAL_MACHINE\CurrentControlSet\Servicesのドライバ名がついたサブキーのこと。ここの値でドライバを読み込んだり初期化したりするタイミングが決定されます。
値と定義はこんな感じ

定義 種類 タイミング
0x00 SEVICE_BOOT_START ブート OSローダー
0x01 SEVICE_SYSTEM_START システム Executiveローダー
0x02 SEVICE_AUTO_START 自動 サービスコントローラー
0x03 SEVICE_DEMAND_START 手動 手動で開始
0x04 SEVICE_DISABLED 無効 ロードしない
3. カーネルの起動

Windowsまじでデータが少ないよう…。ここからどんどん書けることが減っていく。
レジストリからロードを制御するための情報が読み込まれて、仮想メモリを制御するパラメータ(非ページプールやページテーブルエントリなど)を設定する。いわゆるカーネルメモリの設定ですね。
カーネルメモリっていうのは、Windowsシステムの基本的な機能を実行するというかWindowsOSそのものであるカーネルを駐在させておくメモリ領域のこと。物理メモリ上に非ページプール、仮想メモリ上にページプールと呼ばれる部分に分かれています。
仮想メモリのと物理メモリので中身は別だからね。物理メモリは固定されてて仮想メモリは固定されてません。つまり仮想の方は入れ替えができるよ。
あとここで頻繁に使われるレジストリ用にメモリを設定したりします。
詳しいこと知ってる人いたら教えて…‼︎

4. 構成マネージャの初期化

カーネルによって初期化処理が行われる。まずはHKLMのHARDWARとSYSTEMのサブキーを初期化します。
この時点ではこの2つしかアクセスできないんだけど、初期化後にレジストリAPIが有効になるからアプリケーションレベルのアクセスはこの後。CurrentControlSetへのリンク確立も行われるよ。

5. Executiveローダー

Windows NT Executiveの残りのコンポーネントが初期化されてロードされる。ここで0x01を設定されたドライバが読み込まれて初期化処理されます。ここのドライバの初期化に失敗すると次に進めないし、下手するとOS再インストールになるよ。

6. ローダーブロックの解放

物理メモリのローダーブロックが解放されるよ。で、HKLMのSYSTEMのコピーが破棄されます。HARDWAREはまだ破棄しないよ。
マジで書けることがねえですわ。

7. セッションマネージャ

System32の下にあるsmss.exeがこれ。で、smss.exeはwinlogin.exeを呼ぶ。つまりWindowsにログインするアプリケーションを呼び出します。ウイルスが好むから気をつけましょう。だからと言ってむやみに消していいわけじゃないよ。
えー、ここで残ってたレジストリが初期化されて全てのレジストリエントリが使用可能になります。
今までのレジストリの書き込み要求の一部は遅延されてて、ここでまとめて書き込むよ。

8. サービスコントローラ

start値が0x02のドライバを読み込んで初期化します。ここでは失敗しても特に問題ないけど、エラーの時は(設定によるけど)警告が出るよ。
ちゃんとできるとシステムが正常起動したことになるから、前回の正常起動としてHKLMのSYSTEMにあるLastKnownGoodに設定されるよ。
Windows起動→ブルースクリーンを繰り返す時にやる「前回の正常起動時の構成を使う」の時の構成がこれ。
この保存って起動時かシャットダウン時かちょーっと曖昧なんだけど、なんとなくシャットダウンだったような??うーん、NTもふわっと最近のもふわっとしか分からないから気になる人は調べてね。

これでブート処理は完了。WindowsNTはこんな感じですね。現在は高速スタートアップとか色々あってよくわかんない。まず資料が見つからんし。