USBでWindows7!
USB-HDD, USB-SSD, USBmemory, USBリムーバブルデバイスでWindows7を楽しもう!

外付けUSBHDD、USBメモリーへのwindows7インストール方法

2010Jun16 ノーマルブートとVHDブートのSSを追加
2010Jun03 一部リンク 追加
2010May13 公開

* このページの内容は書きかけです。
本ページは

「EeePCでWindows7!
初代EeePC 4G-X初期モデルでWindows7を楽しもう!」

リンク
から派生した、スピンアウトページです
内容が EeePC ありきになっています


USBからWindows7をつかうには、結論から先に書くと、


UsbBootWatcherを使え!


あとは読み飛ばしてかまいませんが、一番最後の注意事項だけはしっかりと読んでください。
USBブートだと休止が出来ない以外は、わりと普通に使えます。
RAMディスクも使うと結構快適です。スリープも問題ありません。


* 本ページは「Windows7をUSBドライブで普通に使う」ためのページです。
「USBメモリからWindows7をインストールする方法」ではありません。
それはこっち
windows7 で別エディションを試してみよう!windows7 starter や Home Basic, Ultimate のお試しインストール方法

繰り返しますが、本ページの内容は
   USB外付けHDDにwindows7をインストールし、USB外付けHDDからwindows7を起動して普通に使う
   USBメモリーにwindows7をインストールし、USBメモリーからwindows7を起動して普通に使う
   SDHCカードにwindows7をインストールし、SDHCカードからwindows7を起動して普通に使う
です。


■本ページの公開の経緯■
Windows7を8GBのSDHCカードにインストールし、初代 Eee PC で使ってしばらく経つのですが、
使ってみると結構よくて、デュアルブートのXp側はほとんど使わなくなりました。
基本スリープ運用だと、使えば使うほど快適になっていきます。
#「酔えば酔うほど強くなる。」っていう酔拳のようです。
ところが、EeePC発売当初の頃の、「XpをSDHCからブートする」というのがはやったのとは
異なり、ネット上にはほとんど情報がありません。
それどころか、windows7のUSBブートに至っては
「おまえ使ってねーだろ」っていう情報ばかりです。
そこでここにちょっとまとめてもとい だらだらと書いておこうとおもいます。
デスクトップで使う分にもUSB3.0が普及し始めたので、公開するには良いタイミングかとおもいます。



■Windows7をUSBブートで使う仕組み■
基本的な部分はXpをUSBブートするのと変わってません。
ただ、
 windows7は不要なドライバは組み込まない仕様
 Didigal signature (ドライバ署名)がキツイ
 UAC(これは切れば良いという話も)
という点がXpと大きく異なります。

windows7起動時、USBのドライバはオーディオドライバなどと同じタイミングで読み込まれます。
USBから起動する場合、これでは遅すぎて起動できません。
USBから起動するためには、起動の初期の段階でUSBのドライバが読み込まれる必要があります。

まずそのためには、下記レジストリーキー
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\usbehci]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\usbhub]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\usbohci]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\USBSTOR]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\usbuhci]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\usbehci]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\usbhub]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\usbohci]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\USBSTOR]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\usbuhci]
これら全てにおいて、
"Start"=dword:00000000
"Group"="Boot Bus Extender"
とします。
これでUSBからブート時にUSBドライバが読み込まれ、USBから起動できるようになります。
ここまではXpのUSBブートと同じです。


ところが、


Windows7では不要なドライバは組み込まない仕様なため、起動後にUSBが組み込まれると
組み込み済みとしてもう「起動初期に組み込む必要はない」となるので、上記値が変更されてしまいます。
要するに、一度再起動してしまうともうUSBからは起動できないのです。

ではどうすればよいのか。へんなところをいじると、ドライバ署名が無効になるため手が出せません。

そこで思いつくのはこんなところ

(a) レジストリの該当キーを read only にしてしまう
(b) タスクスケジューラにバッチを登録し書き換えさせる
(c) サービスとして書き換えプログラムを常駐させる


まず (a) ですが、USB機器が接続されるたびにレジストリの変更が発生するため、実用性に乏しいです。

次に(b)、これは
reg add HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\usbehci /v Start /t REG_DWORD /d 0 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\usbehci /v Group /d "Boot Bus Extender" /f
このようなバッチを書いてタスクに登録し、起動、ログイン、スリープ、スタンバイ、
休止、復帰、ログアウト、再起動、終了、30分毎などなど、タスク使って強制上書きしてしまうということです。
微妙なタイミングでOSがコケると困ることになりそうですけど、そこまで不安定なOSではないし、
復旧は慣れてしまえば簡単なので、一度復旧訓練をしておけば気にするほどでもないでしょう。

最後に(c)ですけど、常駐プログラムが軽ければこれが一番素性がよさそうです。
これを実装した人たちがここにいて、
http://www.911cd.net/forums//index.php?showtopic=22473
http://www.911cd.net/forums//index.php?showtopic=22473
UsbBootWatcherというのがまさにこの常駐型書き換えプログラムです。
バイナリとソースが公開されています。
当方でも使っており、問題なく動いています。
(基本的には(b)と同じなので、復旧訓練はやっておきましょう。)



■Windows7のインストール■
重要なのはこの2点

 異なるマシンへ移す場合は detecthal と sysprep
 同一マシンで異なるHDDに移す際は slmgr -rearm


USB-HDDへ直接Windows7をインストールする場合、仮想PCを用いてのVHD形式となります。
USB-HDDへの直接の通常のインストールはwindows7ではサポートしておらず、当方でも成功していません。
これはOSDVDをいじっても digital signature の制限がキツくて無理っぽいのと、
わざわざそんな困難な山登らんでも代わりの手段があるからです。


■USB-HDDに関する事前確認事項■
バルクのHDDとUSB外付けケースを使う場合、
PCのBIOSからみて、HDDの型番やシリアルが内蔵時と外付け時で変わってないか、確認します。
USB-SATA(USB-IDE)変換基板にもいろいろあり、またRAID機能がついたモデルだと
HDDの型番がUSB経由では書き換えられ、例えば「GENERIC USB DEVICE」などとなって、
型番が隠匿されてしまうものがあります。これではOSからも別HDDとみなされます。
事前に確認しておきましょう。

USB-HDDを持っている場合
バラして(この瞬間、保障が…)HDDを取り出し、PCにつないでインストールします。
上記型番まわりも確認しておきます。
バラせない場合はバルクのHDDを仮に用意し、HDDイメージコピーツールを使ってUSB-HDDに
コピーすることになります。(VHDで仮想の仮HDDを使うのもアリ)



■通常インストール■
まずPCについているHDD類は全て外しておきます。
まずHDDを内蔵なりeSATAなりでPCにつないで普通にインストールします。
ここではまだプロダクトキーを入れる必要はありません。
OSインストール後、UsbBootWatcherをインストール

UsbBootWatcherのインストール方法
1. UsbBootWatcher.conf と UsbBootWatcher.exe を C:\Windows\System32 にコピーする
2. コマンドプロンプトを「管理者として実行」で起動する。
3. UsbBootWatcher.exe /install でインストール(アンインストールは UsbBootWatcher.exe /uninstall )
4. 念のため、 UsbBootWatcher.exe /prepare もやっておく(これは気になる人向け)
5. さらに念のため、一度リブートし、上記レジストリが正しい値になっているか regedit で確かめる(これは確かめとけ)

ここで、事前に確認した、HDDの型番がBIOSからみて変わるかどうかで、一工程増えます。

型番が変わらない場合
外付けケースに入れて起動を確認し、さらに再起動を確認して出来上がりです。

型番が変わる場合
ライセンス認証の問題で別HDDと判定され、いきなり不正コピー扱いで何もできなくなります。
(すぐに元の内蔵に戻せばまだなんとかなる)
そこで事前にライセンス情報をリセットします。

ライセンス情報のリセット方法
1. コマンドプロンプトを「管理者として実行」で起動する。
2. slmgr -dlv で現在のライセンスを確認。猶予期限リセット可能回数が1以上であることを確認
3. slmgr -rearm
4. windowsを終了。電源OFF

このあとすぐにUSBケースに入れ、USBブートします。slmgr -dlvで回数が減っているのを確認します。

ケースがバラせなくて仮HDDにインストールした場合、上記ライセンス情報リセット後に
イメージコピーツールでUSB-HDDにまるごとコピーします。
#フリーのツールですとEaseusDiskCopyあたりでしょうか。使い慣れたものでよいと思います。
#Windows7のProとUltimateにはOSにバックアップツールがありますが、試していません。
#OS標準のツールだと、ライセンス情報の兼ね合いで、移設前にプロダクトキーを入力してさらに
#USBに移した後に電話認証になるかもしれないので。まぁ試せばよいだけなんですけどね。


■ノートPCの場合■
買ってきたHDDを内蔵できないため、windows7を直接インストールできなかったりします。
最近のモデルには eSATA ポートがついているものがあり、それなら可能ですが、まぁこれは例外でしょう。
そういう場合、

まず今のノートのHDDをイメージバックアップします。
そして内蔵HDDにwindows7をインストールし、それをUSB-HDDにイメージコピーし、
内蔵HDDをバックアップから元に戻して出来上がりです。

ところが、、、 初代 EeePC はSSDが4GBしかなくてインストール出来ません!


インストールには最低5.5GB必要で、vLiteで無理して削るのも、いらん苦労が増えるばかりです。
そういう場合、別にマシンを用意して(別マシンが無い?まぁあわてなさんな。)インストールし、
そのOSイメージコピーを使えばOKです。

この際、

 異なるマシンへ移す場合は detecthal と sysprep

というわけで、上記手順の slmgr -rearm の代わりに detecthal と sysprepをします。


detecthalの仕込み方
1. コマンドプロンプトを「管理者として実行」で起動する。
2. bcdedit を実行
 こんなのが表示されてるはず。
Windows ブート ローダー
--------------------------------
identifier              {current}
…

3. bcdedit /set {current} detecthal yes と入力。ここはyes の代わりに on でもよい。
(identifer が current となっていない場合には、identifer に書かれているものを入力する)
4. bcdedit を実行。detecthalが追加されていることを確認。

次に sysprep を行う

sysprep
1. C:\Windows\System32\sysprep を開く
2. sysprep.exe を「管理者として実行」で実行
3.「 一般化する」にチェックし、シャットダウンを選択 ( sysprep.exe /generalize /shutdown でもOK)

これでOSイメージは出来上がりです。(UsbBootWatcherのインストールを忘れないこと)
イメージコピーツールでUSB-HDDに移してノートPCに接続し、BIOSメニューからUSB-HDDを
選んで起動させます。
detecthal と sysprep をおこなったので最初の起動にはOSインストール並みに時間がかかりますが、
気長に待ちましょう。



■ detecthal とは、 sysprep とは ■
マシン構成が変わると、それにあわせた変更をOSにしなければならないのです。
detecthal で OS のコアとなる部分を、
sysprep でデバイスやライセンス、ユーザ情報などをいわばリセットし総入れ替えさせます。
なのでOSの再インストール並みにとても時間がかかります。


■別マシンが無い場合はどうするか■
上記は特に別ハードウェアである必要はまったく無く、仮想PCでも問題ありません。
すなわち、

  EeePC に Microsoft VPC2007 をインストールする
  外付けHDDに固定VHDを作る(最終的に8GBのSDHC/USBメモリにインストールする場合、7.2GBくらいで作成)
  VHD に windows7 をインストール
  VPC2007上のwindows7でUsbBootWatcherをインストール、detecthal, sysprep を実行
  イメージコピーツールでUSB-HDDにコピー

という流れでOK
#実際にEeePCにVPC2007でやったらとても時間がかかった…SunのVBoxのほうが3倍以上早かった。





■USBメモリ、SDHCカードで使う■
* USBメモリ、SDHCカードはSLCタイプのものを使うこと!(シリコンディスク、シリコンHDDはMLCらしい)
MLCタイプのものでも使えないわけではないが、初代 EeePCの内蔵SSDはSLCタイプなので、
普段SLCに慣れているとMLCは耐えられん!


USBブート可能なOSイメージを作るところまではHDDを使いましょう。
HDDからUSBメモリに移すときもOSからは不正コピーと認識されるので、
移す直前にライセンス情報のクリア slmgr -rearm をしておきます。

EeePC で XpをSDHCに入れて使ったことがある人は、リムーバブルメディアのHDD化ドライバ
HGST Hitachi Microdrive filter Driver
の導入を考えているかもしれませんが、windows7 のOSのドライブにこれを使うと、

ファイルシステムが破損します

データドライブに使う分にはかまいません。
それでも使いたい場合、ドライバの導入はXpのときはOSイメージを移す前に
実行するのが定番でしたが、windows7 ではあとからでも入れ替え可能です。
入れ替えると別HDDとみなされるので、入れ替え作業の際の再起動の直前に、
ライセンス情報のリセット slmgr -rearm を忘れずに。

入れ替え直後の再起動の際は、 EeePC の BIOS にて内蔵 SSD を切っておくと
ドライブの誤認識がされなくなりうまくいくようになります。


USBメモリーやSDHCでHDD化をしなくても、いちおうOS自体はまともに動作します。
でも、アプリによってはリムーバブルメディアだとインストールが出来なかったり、
まともに動作しないものがあります。
これでは使い物にならないという場合、次のVHDブートにすると、メディア自体はリムーバブルのままでも
VHDはHDDとみなされ、うまくうごくようになります。

USBメモリー、SDHCカードからwindows7を通常ブートした場合
windows7 on USB memory
OSのあるCドライブがリムーバブルディスクとなっている

USBメモリー、SDHCカードからwindows7をVHDブートした場合
VHD boot windows7 on USB memory
VHDファイルがあるHドライブはリムーバブルディスクのままだが、OSのあるCドライブはHDD扱いに!


■VHDブート■
やっとここまできました


Windows7 の Ultimate では VHD ブートが可能です。2008R2同様、正式にサポートされています。
( Ultimate を持ってないけどちょっと試してみたい場合は、こちら
windows7 で別エディションを試してみよう!windows7 starter や Home Basic, Ultimate のお試しインストール方法
を一度読んだうえで試してみるのも手です。)
VHDブートの問題点は、いまのところ

エクスペリエンスインデックス測定時にHDDの計測でコケるため、測定が出来ない

#これ、おかしな仕様というか、実装モレだよなぁ。
#あとVHDブートでは休止が出来ないってのもあるけど、USBブートだとHDDでも休止は出来ないので。

VHDは仮想HDDのことで、いままでなら仮想化ソフト上でうごく仮想PCのHDDだったわけですが、
これが仮想ではなく通常のPCでうごくようになりました。
起動用HDDが、たとえば昔はIDEやSCSIのHDDだったのが、いまではSATAHDDも使えるようになったように、
仮想HDDであるVHDも起動用HDDとして使えるようになったわけです。
VHDはただの大きな1ファイルなので、OSのバックアップや復元は、ファイルをコピーするだけ。
ちょっと新しいドライバやソフトを試すときなどとても簡単便利です。
#本インストールの各工程毎のバックアップ、 slmgr や sysprep を実行した場合としない場合の
#挙動の比較や手戻りも簡単。

VHDのインストール、VHDブートの方法は検索してもらうとして、
USBブートする場合はこれもUsbBootWatcherでうまく動きます。

注意点として、

VHDは固定サイズにしておかないと後でハマる。6GBあれば32bit版Ultimateインストール可能。
あとで8GBのメモリやSDHCに移す場合で、かつサイズをぎりぎりまで使いたい場合(フラッシュ
メディアでギリギリまで使うのはおススメしない)は、事前にUSBメモリにbootmgrやbootフォルダを
移してあらかじめVHDブート用設定をしておき、そこで空き容量を調べてVHDサイズを決める。
USBメモリやSDHCは物により空き容量が微妙に異なるので、他人の数値は当てにしないこと。
仮想PCで仮想メモリサイズを 0 にできるが、VHDブートでは仮想メモリが作られることがある。
ここで、最初にwindows7をインストールする時に、仮想PCでインストールしたか、
それともVHDに直接インストールしたかで挙動が変わる模様。
最初に仮想PCでインストールした場合は、仮想メモリを 0 にしてVHDブートしても起動するが、
直接インストールで仮想メモリサイズを 0 にすると、起動時に毎回仮想メモリを作成しようとして
エラーになりエラーダイアログが出ることがある。(これもバグだろう)
Eee PC で使うにはこれはいまいちなので、いまのところ仮想PCを使ってVHDにインストールするのが良い。


最終的にUSBメモリやSDHCにインストールする場合、VHDがUSBメモリの遅さを隠匿してくれるため、
これがOSの快適さに直結します。おススメです。
16GBのSDHCに通常インストールとVHDでのデュアルブート環境を構築し、
起動を切り替えて比較してみるとわかりやすいです。




■ BIOS でブート切り替えメニューが無い場合やUSB-HDDが出てこない場合 ■

自作PCだと、メーカーによりPC立ち上げ時に F6やF8, F10 を押すと
ブートセレクトメニューが立ち上がります。
初代 Eee PC では Escキーを押すと出てきます。
BIOSメニュー内でも、起動メディアの設定が出来るようになっているので、
常にUSB-HDDから起動するように設定できます。

メーカー製PCはというと、さまざまです。
 BIOSにブートセレクトメニューがあるもの
 BIOSにブートセレクトメニューは一見無いが、あるキーを押すと隠しメニューで出てくるもの
(マザーボード製造元のキーと同じだったり。NEC の S70SD はMSIと同じ)
 BIOSにブートセレクトメニューが無いもの

 BIOSメニュー内に起動メディアの設定項目があるもの
 BIOSメニュー内に起動メディアの設定項目一見無いが、ある複数のキーを同時に押すと隠しメニューで出てくるもの
 BIOSメニュー内に起動メディアの設定項目が無いもの

また、メニューはあってもコールドブート時にUSB-HDDの起動が間に合わなくて
選択メニューに出てこない組み合わせもあります。
例えば初代 Eee PC では、USBメモリーはコールドブート時に見失うことが多いです。

BIOSの設定でもどうにもならない場合、内蔵HDDにブート用の bootmgr を仕組んで対処することになります。
やり方は dualboot や multiboot で検索すればものすごくたくさん出てくるのでそちらを参考にしてください。

初代 EeePC ではSDHCは見失わないようなので、当方ではBIOSの設定でSDHCからブートするようにして使っています。



■ BCDEDIT ■
windows7 では、boot の仕組みが Xp とは異なります。
ntldr から bootmgr へ
boot.ini から bcd へ変わりました。
操作の仕方はググってもらうとして、ポイントとしては、

「いまの自分から見てどう見えるか」という視点で表示されている


わかりやすい例えでいうと、お化け煙突のように、
ある方角から見ると4本、またある方角から見ると3本、そしてまたある方角から見ると2本に見えるが、
煙突自体は4本で特に移動しているわけではない。

bcdedit コマンドでの表示も見る方角によって変わるが、bcd に書かれている内容は変わっていない。
例えばVHDブートで、VHDファイルの場所が
F:\win7.vhd だとしよう。

bcdedit の結果は vhd=[F:]\win7.vhd

となっている。このHDDを F から G にマウントしなおすと、

bcdedit の結果は vhd=[G:]\win7.vhd

と表示される。だっていま確かに G:\win7.vhd にあるでしょ、G にマウントしなおしたんだから。
見る方角が変わったために表示が変わったんです。このとき bcd の内容は変わっていません。




■ windows7 インストール時のパーティション ■
買ったばかりのバルクHDDにそのままインストールすると、
先頭 100MByte ほど勝手にパーティションが作られ、そこは bootmgr などブート用の
パーティションとして使われます。
windows7 のOSはその次のパーティションにインストールされ、起動すると
OSのパーティションは C ドライブとして認識されます。
それでは先ほどの先頭のパーティションはというと、通常は見えないようになっています。

この2パーティション構成だとイメージバックアップコピーツールで不都合がある場合、
事前にHDDをフォーマットしておくか、windows7のインストールディスク上の
DISKPART コマンドで操作すれば、1パーティションでインストールできます。
この場合、C ドライブに bootmgr や boot フォルダ、そしてwindows7 OS が全て
入っていて、Xpと同じような感じになります。




■windows7のエディション、販売形態による違い■

初代 Eee PC では64bit版は動きません。

HP, Pro, Ultimate, Enterprise のうち、

OSに完全バックアップ機能がついているのは、 Pro, Ultimate, Enterprise
VHDブートが出来るのは、 Ultimate と Enterprise
MSのサイトから評価版がダウンロードできるのは、 Enterprise
#ただしこの評価版は機能制限があるらしいので、評価用にすらならないでしょう。

個人的にはVHDブートが出来る Ultimate がお勧めです。#Proより安かったし。

通常版、アップグレード版、DSP版とありますが、ライセンスを正しく守っていれば、
違いはアップグレード版だけインストール時に一手間かかる程度です。
DSP版だとサポートが異なりますが、そもそもUSBブートはサポート外ですので。
よってインストール後はどれでも同じなんですが、
気に入らなかったときにXPへダウングレード出来るのはDSP版です。
Xpの製品版かDSP版を持っていればダウングレード可能です。
(DSPのサポートはDSPを組み込んだ会社が行うのが建前で、よってMSとしては
直接サポートしないだけで、ダウングレード権は行使できます=電話認証可能です。)


ちなみに他のエディションをちょっと試してみたい場合、
手元にwindows7 の HomeなりPro のインストールDVDメディアを持っていれば、
Starter から Ultimate まで試すことが出来ます。
やり方を別途、こちら
windows7 で別エディションを試してみよう!windows7 starter や Home Basic, Ultimate のお試しインストール方法
に書いておきました。

■OSの猶予期限とリセット可能回数■
windows7もライセンスキー無しでインストールが出来ます。
その場合、ライセンス認証まで30日間の猶予期限が設定されます。
この猶予期限は3回までリセットが可能で、最長120日間、認証無しで使えるようになっています。
#店頭で製品パッケージを買うと、 32bit と 64bit の2枚のDVDメディアが入っていますが、
#この猶予期間にいろいろ試してから、最終的に自分のマシンではどちらを使うかを決めることが
#出来るようになっています。

現在の残日数などの情報は、
コマンドプロンプトを「管理者として実行」で起動し、
slmgr -dlv で確認が出来ます。
そして slmgr -rearm をすると残日数が30日に戻され、リセット回数が1回減ります。
sysprep も同じで、残日数が30日に戻され、リセット回数が1回減ります。
よって、
   別PCから移す際にsysprep で1回、
   USBメモリ/SDHCに移す際に slmgr -rearm で1回

消費されるので、残りの合計60日間は評価が出来ます。

windows7は使い込むほど動作が良くなっていくOSなので、この期間を利用して
いろいろと評価していきましょう。
#ちなみに EeePC 1台で仮想PCを用いながらVHDブートを作ったときは
#sysprep もslmgr も必要が無かったので、うまくやれば最長120日間評価が出来ます。

ちなみに一番最初からプロダクトキーを入れてライセンス認証をしてしまった場合、
いきなり電話認証コースとなり、作業中に何度も何度も電話することになるのでとても面倒です。


■参考:windows7のGroupの順序■
System Reserved
EMS
WdfLoadGroup
Boot Bus Extender
System Bus Extender
SCSI miniport
Port
Primary Disk
SCSI Class
SCSI CDROM Class
FSFilter Infrastructure
FSFilter System
FSFilter Bottom
FSFilter Copy Protection
FSFilter Security Enhancer
FSFilter Open File
FSFilter Physical Quota Management
FSFilter Virtualization
FSFilter Encryption
FSFilter Compression
FSFilter Imaging
FSFilter HSM
FSFilter Cluster File System
FSFilter System Recovery
FSFilter Quota Management
FSFilter Content Screener
FSFilter Continuous Backup
FSFilter Replication
FSFilter Anti-Virus
FSFilter Undelete
FSFilter Activity Monitor
FSFilter Top
Filter
Boot File System
Base
Pointer Port
Keyboard Port
Pointer Class
Keyboard Class
Video Init
Video
Video Save
File System
Streams Drivers
NDIS Wrapper
COM Infrastructure
Event Log
AudioGroup
ProfSvc_Group
UIGroup
MS_WindowsLocalValidation
PlugPlay
Cryptography
PNP_TDI
NDIS
TDI
iSCSI
NetBIOSGroup
ShellSvcGroup
SchedulerGroup
SpoolerGroup
SmartCardGroup
NetworkProvider
MS_WindowsRemoteValidation
NetDDEGroup
Parallel arbitrator
Extended Base
PCI Configuration
MS Transactions
ちなみに通常のIDE(atapi.sys)やSATA-AHCI(msachi.sys), RAID(iaStorV.sys)は、上記SCSI miniportあたり


■試したマシンなど■
デスクトップPC
   ASUS M4A785D-M PRO, Memory 2GBx2枚挿し, CPU 550BEの4core化3.2GHz駆動, VGA HD4670ZALMANoc, NECのS70SDについていたDVDドライブ
   HDDはeSATAポート経由にて接続
HDD seagate 20GB SATAHDD (PS3 20GB の中身だった気が)
USB-SATA変換ケーブル 男五人衆X2 (JMicronチップで、SATA側はHDDの型番やシリアル、SMART情報はそのまま通す)

初代 Eee PC 4G-X, Memoryだけ2GBに換装
SDHC 8GB いわゆる白芝 (SLC)
SDHC donya の8GB SDHC class6 (MLC) (A-DATA製に酷似)
USBメモリ BUFFALO RUF2-P8G 8GB (MLC) (実体は小型microSDHCリーダーとmicroSDHC8GBの模様)


■参考:DISKPARTコマンド■
DISKPARTコマンドでHDDやUSBメモリ、SDHCに起動用アクティブパーティションを作成し
NTFSフォーマットする方法


標準の2パーティション構成では不都合がある場合、この方法で事前に1パーティションにしておく。

1. Windows7マシンがある場合、まずコマンドプロンプトを「管理者として実行」で起動する。
  無い場合、Windows7のDVDから起動し、修復を選んでコマンドプロンプトを起動する。
2. notepad.exe を2つ起動し、notepadの窓サイズは小さくしておく。
3. notepad でファイルを開く操作をし、どのディスクがどのドライブレターで認識
  されているかを確認する。
  またこのとき、 EeePC の内蔵SSDに保存しておいた手順書をひらいても良い。
4. ここからのDISKPARTの流れは下記のようになる。
  なお、対象 DISK のサイズは7872MBで、一番大きい物として記憶して作業した。
C:\Windows\system32>diskpart

Microsoft DiskPart バージョン 6.1.7600
Copyright (C) 1999-2008 Microsoft Corporation.
コンピューター: W7

DISKPART> list disk

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン          3815 MB  2624 KB
  ディスク 1    オンライン          7742 MB      0 B
  ディスク 2    オンライン          7678 MB      0 B
  ディスク 3    オンライン          7373 MB  1024 KB
  ディスク 4    オンライン          7872 MB      0 B

DISKPART> select disk 4

ディスク 4 が選択されました。

DISKPART> list disk

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン          3815 MB  2624 KB
  ディスク 1    オンライン          7742 MB      0 B
  ディスク 2    オンライン          7678 MB      0 B
  ディスク 3    オンライン          7373 MB  1024 KB
* ディスク 4    オンライン          7872 MB      0 B

DISKPART>
DISKPART> create partition primary

DiskPart は指定したパーティションの作成に成功しました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
* Partition 1    プライマリ             7871 MB  1024 KB

DISKPART> select partition 1

パーティション 1 が選択されました。

DISKPART> active

DiskPart は現在のパーティションをアクティブとしてマークしました。

DISKPART> format FS=NTFS QUICK

  100% 完了しました

DiskPart は、ボリュームのフォーマットを完了しました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
* Partition 1    プライマリ             7871 MB  1024 KB


DISKPART> exit
上記で
DISKPART> select disk 4
の後に
DISKPART> clean
を実行すると disk 4 にある情報が全てクリアされる。よって
DISKPART> create partition primary
を実行前に clean を実行しておいたほうが良い場合もある。

また、上記 format コマンド後に
DISKPART> assign
を実行するとマウントされ、OS(含OSDVDから起動したインストール用OS)から 認識されるようになる。


VHDのサイズを見積もる
OSboot用の bootmgr をWindows7のDVDからコピーする。エディションは問わない。
(別にDVDでなくても、起動中のwindows7からでも良い。)

notepadでどのドライブが何かを確認し、xcopyを使ってファイルをコピーする。

D: DVD, E: SDHC とすると、

XCOPY D:\bootmgr E:\ /cehikry
XCOPY D:\boot E:\boot\ cehikry

BCDEDITで確認
C:\Windows\system32>BCDEDIT /STORE E:\BOOT\BCD

BCDEDITは引数無しだと現在起動するのに使ったBCD情報を表示する。
BCDの場所を明示的に指定するためには、上記のように /STORE を使う。

これで空き容量が分かるようになったので、試しに7.3GBのVHDを作成してみる。

diskpart
DISKPART> list disk
DISKPART> select disk 4
DISKPART> select partition 1
DISKPART> CREATE VDISK FILE="E:\w7.vhd" MAXIMUM=7300
DISKPART> list vdisk
DISKPART> select vdisk FILE="E:\w7.vhd"
DISKPART> attach vdisk
DISKPART> list disk

VHDがHDDとして認識されたのがわかる。ここからのVHDのフォーマットはHDDと同じ。
VHDなので2パーティション構成でかまわない場合は、特にフォーマットしなくてもよい。
再度notepad使い空き容量も確認しておく。

#ちなみに内蔵HDDの場合はこのままwindows7のインストールに進められる。
#ディスク選択画面でVHDがディスクとして選択できるようになっており、
#そのままインストールするとBCDもVHD用に自動で設定してくれる。
#(警告が出るが、理由は読めば分かる)


小ネタ

ここでの notepad の使い道はこれだけではない。
2つの notepad でファイルをひらく操作をすると、ファイルの選択GUIが出るが、
これ、通常の窓のように、ファイル名の変更や窓間での移動などの操作が可能なのである。
OS修復セットアップの時、通常の窓が出なくて不便なのだが、notepad を使うと
結構いろんなことが出来るのだ。
これらの操作をするときに notepad 本体の窓が大きいと邪魔なので、最初に小さくしておく。
notepad って便利。



■参考:BCDEDITコマンド■
上記パーティション作成からの続き

VHDブートさせるためにBCDを書き換える

まず初期確認

BCDEDIT /STORE E:\BOOT\BCD

ブートマネージャー部の書き換え

BCDEDIT /STORE E:\BOOT\BCD /SET {bootmgr} device partition=E:
BCDEDIT /STORE E:\BOOT\BCD /SET {bootmgr} locale ja-JP

ブートローダー部の書き換え

BCDEDIT /STORE E:\BOOT\BCD /SET {default} device vhd=[E:]\w7.vhd
BCDEDIT /STORE E:\BOOT\BCD /SET {default} path \Windows\system32\winload.exe
BCDEDIT /STORE E:\BOOT\BCD /SET {default} description "w7"
BCDEDIT /STORE E:\BOOT\BCD /SET {default} locale ja-JP
BCDEDIT /STORE E:\BOOT\BCD /SET {default} recoverysequence {default}
BCDEDIT /STORE E:\BOOT\BCD /SET {default} recoveryenabled Yes
BCDEDIT /STORE E:\BOOT\BCD /SET {default} osdevice vhd=[E:]\w7.vhd
BCDEDIT /STORE E:\BOOT\BCD /SET {default} systemroot \Windows
BCDEDIT /STORE E:\BOOT\BCD /SET {default} nx OptIn
BCDEDIT /STORE E:\BOOT\BCD /SET {default} resumeobject {default}
BCDEDIT /STORE E:\BOOT\BCD /deletevalue {default} winpe
BCDEDIT /STORE E:\BOOT\BCD /deletevalue {default} ems

必要に応じ、 detecthal を設定
(paeの設定を変更する必要がある場合もアリ)

BCDEDIT /STORE E:\BOOT\BCD /SET {default} detecthal yes

最後に確認

BCDEDIT /STORE E:\BOOT\BCD

BCDの設定は Export, Import 出来るので、必要ならExportでバックアップしておく。


ちなみにVHDではなく通常ブートの場合は、device と osdevice がこんな感じ

デフォの2パーティション構成の場合
BCDEDIT /STORE E:\BOOT\BCD /SET {default} device partition=F:
BCDEDIT /STORE E:\BOOT\BCD /SET {default} osdevice partition=F:

1パーティション構成の場合
BCDEDIT /STORE E:\BOOT\BCD /SET {default} device partition=E:
BCDEDIT /STORE E:\BOOT\BCD /SET {default} osdevice partition=E:



■注意事項■
マザーボードの背面USBポートのうち、LAN用のRJ45のポートの直下にあるUSBポートは
特別な意味を持ちます。
このポートだけUSBブート出来なかったり、逆にこのポートだけUSBブートが出来るなど。


マザーボードのUSB給電方式により挙動が変わります。
シャットダウン時でも常時給電する方式(GIGABYTEのマザーなど)ですと問題になりにくいのですが、

これがシャットダウン時にUSB給電をとめる方式(ノートPCはたいていコレ)ですと、
まず、コールドブート時にUSB-HDDの起動を待ちきれずに結果起動できないものがあります。
リセットボタンを押すと起動出来るわけですが、マザーボードによっては
待ち時間を調整出来る物があるので、BIOSの項目を調べてみてください。
次にシャットダウン時、マザーボードより早いタイミングでUSB給電がとめられてしまうために
ファイルが壊れてしまうものがあります。
これら起動と終了時の挙動は、USB-HDD側の基板におけるUSB給電の扱いによっても変わってきます。
USBメモリの場合はより危険性が高いです。
ただ、シャットダウン時の対策として、シャットダウンはせずに「再起動」をし、
BIOS画面上で再起動を止めてここで電源を切ると、給電問題を回避出来ます。
★windows7は基本スリープ運用!


書き込みキャッシュによる高速化の危険性
ディクスのプロパティのポリシーのところで、キャッシュの挙動を設定できるのですが、
USBブートした際の”起動デバイス”のポリシーは安全側の設定にしておきます。

USBメモリなどリムーバブルデバイスでは、「クイック削除」にします。
HDDの場合は「デバイスの書き込みキャッシュを有効にする」のチェックは外します。

OSのシャットダウン時、キャッシュが有効の場合はキャッシュにたまっている内容を
全て書き込んだのちOSが電源を落とすようになっています。
USB接続のデータ用ドライブに対してはこの仕組みは確実に働いているのですが、
USB接続の起動用ドライブに対してはファイルシステム破損の危険性があります。

VHDブートの場合、
VHDディクスに対してはキャッシュあり、
VHDが入っているHDD/USBメモリにはキャッシュなし
でOKです。

USBメモリ、SDHCカードの場合、
高速化のために HGST Hitachi Microdrive filter Driver を起動ドライブに対して使うと
ファイルシステムが破損します。
特に、このドライバを適用し、さらにポリシーで「高パフォーマンス」にすると
確実にファイルシステムが破損します。
勝手な想像ですが、このドライバを用いると目覚しいほどに高速化がされるのですが、
このUSBメモリの遅さを隠匿する仕組みが、シャットダウン時のキャッシュの処理時に
上記「高パフォーマンス」と合わさって、
「キャッシュをメディアにフラッシュしたつもりが、実はキャッシュにフラッシュしていた」
という状態になっているんじゃないかと。
データドライブの場合でも、シャットダウン時にログなどを書き込むようになっていると
ちょっと危険かもしれません。


番外編として下記も読んでおきましょう。
http://technet.microsoft.com/ja-jp/magazine/2007.04.windowsconfidential.aspx

FUAとは、
read 時はHDDの円盤からreadすることを強制し、
write 時はHDDの円盤に直接writeさせるタグ。
HDD上のキャッシュメモリではなく円盤から読み、
書き込みもHDD上のキャッシュメモリ上でバッファをさせないようにするのがFUAなわけだが、
以前はバグでこのタグが無視されていた。
チェックボックスをオンにするとこのバグ状態になる。
HDD上のキャッシュメモリから円盤に書き込まれる前にUSB給電が切れると、
USBバスパワー駆動ではデータが破壊される危険が。
「拡張処理」という表現ではまるで良いことのように見えるけど、
仕組みを理解しないで使うとかなり危険。


低騒音、省電力について
 ワットチェッカー所有者の間ではよく知られている事実ですが、
これらの目的のためにUSBメモリ起動を選択するのは誤りです。
内蔵SATAポートにSSDを接続して使うのが一番静かで省電力です。
USBメモリやSDHCカードは、アクセス時に高周波音が出るものが結構あります。
また消費電力も、USBメモリの場合はPC本体側のUSBコントローラーが電力を消費し、
SDHCにいたってはさらにカードリーダーが結構電力を消費します。


■その他■
EeePC でWindows7! のほうも見てくださいね!-- ゆかた