RAM DISK からの Windows8 Pro ホストOSのネイティブブート

今回は一部で今後ブレイクしそうな気配の Windows 8 Pro を RAM DISK へインストールし、そこからネイティブなハードウエア上で BOOT UP する仕組みを作ってみます。

目標はシステムドライブがランダムアクセス(4KB)で 1GB/s 以上を目指します。

仮想PCを RAM DISK から起動する手法は今までも有りましたが、今回はWindows 8 Proを RAM DISK からネイティブブートする事に挑戦します。

最初に種明かしをしますと、Windows 7 Ultimate/Enterprise などでも利用出来るVHDブートを流用します。
(その為 Windows 8 ではVHDブートが可能なPro エディション限定に成ります。)

ですが、未だWindows 8 Proは発売前ですし、筆者はMSDNにも今は参加してませんので、まずは Windows8 RC/CP や Windows 7 Ultimate (64Bit) を使って RAM DISK から起動する仕組みを試行錯誤して動作検証をしておき、Windows8 Proの発売と同日に環境構築が完了する事を目指してみます。→ 2012/10/26 発売されましたが目標達成出来ませんでしたorz(17号機のBIOSがWindows8に対応していなかった(現在は対応済み)事やUEFI-BOOT(Z9PE-D8 WSは見掛け上はBIOSだが中身はUEFI)に関する知識不足など色々な要因が有りますが、筆者のWindows8に対するモチベーションの低さが最大要因かもしれません。)

VHDは、元々はConnectix社のVirtualPC用の仮想HDDファイルの形式で、現在でもMS製の仮想PCで利用されていますが、MSがVirtualPCをConnectix社から買収した事で状況が変わり、仮想PCのみでなく実機PCでもVHDからの起動が出来る様になりました。
余談ですが、筆者は二代目のiMac(ストロベリー)イベント展示品をApple社員から安価に譲ってもらい、そこにVirtualPCを入れてWin98SEでゲームしていた時期が有ります。当時は実機PCよりMac+VirtualPCの方が早いと話題にもなっていまして、実際、普通に使えました。

VHDは、VMWareの様に複数ファイルに分割されている訳ではなく、1ファイル=1仮想PCだったりするのでHDD/SSDをエミュレートする以外の不要な情報もたくさん盛り込まれているかもしれません。

仕組み的にネイティブマシン上でのVHDブートが出来るという事は、VHDブートの直前までにファイルシステム関連のドライバが正常動作するところまではもっていけるという事ですから、そのシーケンス中に RAM DISK ドライバを読み込ませれば良い訳で、逆に言うとRAM DISKドライバを読み込むまでは少なくともHDD/SSDからのブートシーケンスとなり、VHDブートに切り替わった時点からがRAM DISKブートというハイブリッドに成ると思います。

弱点としては、RAM DISK上にVHDを構築する為、ソフトウエア(ドライバ)で2重にエミュレートする事になり、CPU負荷やメモリ負荷がそれなりに増えるかもしれません。

早速、実践してみます。

失敗例1:
 VHDをMBR形式にしていると、この様なエラーに成りました。
DSC01872.jpg

失敗例2:
 VHDをRAID上に置いてるからか?ていうか筆者のストレージは基本的にAreca ARCシリーズのRAIDなのです。
DSC01873.jpg



---書きかけ---



以下、余談です・・・

RAM DISK はナゼ DISK と呼ばれるのか?
 物理的には円盤形状ではありませんが、観念的には円盤形状です。
 具体的には、シリンダ/サーフェス(ヘッド)/セクタ等をドライバがエミュレートしています。つまり、プログラマ視点では円盤なのです。

なぜ DISC ではなく DISK なのか?
 DISCは光学メディア(CD/DVDなど)、DISKは磁気メディア(HDD/Floppyなど)という使い分けが有る様です。
 RAMD DISK は光学メディアの様な螺旋状のセクタ配列をエミュレートするのではなく、磁気メディアの様な円形のセクタ配列をエミュレートするからではないでしょうか?と書いておきながら気付いたのですがRAM DISK誕生当時は光学メディアは未だコンピュータの主要な記憶媒体ではありませんでした。

RAM DISKの歴史
 教科書的な事は知りませんが、一般に認知されたタイミングは2度有ったと思います。
 最初は PC-9801 シリーズ用に用意されたEMSメモリやXMSメモリ上に構築するタイプの物で、近年ではWinXP用にOS管理外メモリを利用したRAM DISKが流行になりました。
 つまりOSが管理出来ない程にPC本体が多量のメモリを搭載出来る様になった過渡期の産物とも云えるかもしれません。
 具体的には 16Bit -> 32Bit への移行期と 32Bit -> 64Bit への移行期です。
 移行の過渡期を過ぎるとOSがメモリ全域を使えるように成る為、キャッシュの方が優位になります。
 では、64Bit時代にはRAM DISKではなくキャッシュでOKでは?とも思います(実際、最近までそう思っていました)が、実際のところどうなのか?という興味本位的な側面もあります。

 あまり知られていないかもしれませんが、OSインストールの初期段階(つまりHDDやSSDをフォーマットして必要なファイルをHDD/SSDにコピーし終わるまで)は一時的にRAM DISKを構築してRAM DISKをシステムドライブとしてインストーラ用のOSを起動する様なテクニックが一般的に使われています。つまり、RAM DISKをシステムドライブとしてOSをネイティブ起動する事は、そもそも一般的に行われている事でもある訳です。同様の事はCD-ROMブートが出来るLinuxや、NortonBackupの様にWindowsXP/VistaコアをCD-ROMブートする場合も内部的にRAM DISKが使われています。

 筆者の過去の歴史w的にはSUN OSのTMPFSやSWAPFSなどを使ったRAM(というかswap)上に構築されたファイルシステムを使いDBのチューニングをした記憶が有りますが、これらは一般にはあまり知られていないと思います。現状はLinuxにも実装されている様ですからLinux使いなら知っているかもしれません。
 業務的に高速なDB構築にはRAM DISKが欠かせない面があり、その為に大容量メモリを目一杯搭載したサーバが誕生したりしました。DB構築の近況は存じませんが1TBクラスのメモリ搭載が可能なマザーも登場していますので、RAM DISKを使うか否かに関わらず大容量メモリが必要な事に変わりは無いでしょう。

 次の転換期は、MRAMやReRAMの様な不揮発高速RAMが普及し始めた頃に来て、後は高速化/大容量化/低消費電力化の3点に絞られ、それまでの過渡期ともとれるかもしれません。
スポンサーサイト
プロフィール

DualSocketTheWorld

Author:DualSocketTheWorld
自作を始めて20台目くらいになりますが、最初からデュアルソケット限定(始めた当時はデュアルスロット)で自作しており、近年になってAMD K6を試したくなりSocket7でK6-2+のシングル構成で組んだのがシングル初です。

シングルマザー(含:シングルソケットマルチコア)や4ソケット以上の自作は基本的にしませんし、メーカー製PCの改造も基本的にはしません(ノートPCのSSD化くらいはしますが・・・)

基本路線はワークステーションと呼ばれる分野での自作で、OSもWindows系であればProfesionalが主な対象に成ります。

ゲーマーの様なOverClockは行わず、WS路線としてハイエンドCPUとハイエンドGPUの組み合わせで定格或いはDownClockで発熱を抑えつつ、その時のアーキテクチャに置いて爆速かつ静音を目指し、30年以上の長期に渡り稼動状態をキープする事を目指します。

※基本的にリンクフリーです。どこでも自由にどうぞ。

※画像は時々変ります。

※お決まりの文章ですが、改造は個人の責任で行ってください。ここに記載された情報は間違いを含んでいる可能性が有り、それを元に製作や改造などをして失敗しても筆者は一切責任持てませんので悪しからず。

筆者略歴:
小学生時代にゴミ捨て場で拾ったジャンクテレビ数台を分解して部品を取り出し真空管アンプを自作、中学生時代にPC8801mkⅡsrでZ80アセンブラを始める。社会人になって初のプログラムは弾道計算、後に医療系・金融系プログラマ~SEを経て100~200人規模プロジェクトのジェネラルマネジャを数年経験、独立して起業。現在は不動産所得で半引退生活。
(人物特定を避ける目的で一部経歴を変更しています)

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
アクセスカウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR