2011年1月29日土曜日

XPにAHCIドライバをインストールする

いまさらながら、基本的にAHCIに対応していないXPにAHCIドライバを入れてNCQを有効にした状態で動作させる、というネタです。
普通にクリーンインストールをするときにAHCIドライブを認識させる、というだけのことならF6インストールをすればいいわけで、WEBで簡単に情報を見つけることができる。今回のポイントは、既にインストールされたXPにクリーンインストールも修復インストールも行わずにAHCIドライバを導入する、という点にある。

しかし、これもまた同様にWEBにはいくつかの情報が転がっていて2chなんかでも議論されているけれど、今回少し違うのはIDEドライバ→AHCIドライバへの変更ではなく、RAIDドライバ→AHCIドライバへの変更を行うという点で、この点ではWEBでは情報は見つからなかったので、今回やった方法をちょっとリークする。ちなみにターゲットとなるチップセットはICH7Rですが、分かる人なら適宜読み替えてICH8やICH9でも応用できるはず。

本題からそれるけれど、そもそも「なぜRAIDドライバをAHCIドライバに変えたいのか?」というと、「IntelのSSD X25-M用のToolboxがSSDを認識しないのはRAID BIOSが噛んでいるからだろう」という推測のもと、「SSDがあればRAID-0の御利益はほとんどないし、AHCIに戻そう」と思ったのが始まりです。

さて、やり方のおおまかな流れとしては、下記のようにやります。ただし、極めてクレイジーなやり方なので、よほどの自信と覚悟がない人にはオススメできない方法です。もし、果敢に(無謀にも?)トライしてみようと思う方は、あくまでも自己責任でお願いします。

  1. 現在RAIDドライバで起動しているシステムに、AHCIドライバを仮インストールする(詳細は後述)。
  2. BIOS設定をAHCIに変更して(RAID BIOSを切って)、再起動する。
  3. 1でうまくインストールできていれば、AHCIでWindowsが起動できると思う。しかし、デバイスマネージャはエラー(サービスの表示名かエントリが既に使われている、と何とか・・・)を出す。が、動いておればまずはOK。
  4. デバイスマネージャでRAIDドライバがもう読み込まれていないことを確認する。その後、レジストリエディタでRAIDドライバ関連のエントリを全部消す。
  5. 1でインストールしたAHCIドライバは仮ドライバなので、本AHCIドライバを入れ直す(実際にはレジストリエントリの書き換え)
  6. 再起動して、デバイスマネージャがエラーを報告しなければOK。
  7. (必要であれば)最新のIntel Rapid Technology Driverをインストールします。


で、具体的な方法は次のようになります。

  1. 現在RAIDドライバで起動しているシステムに、AHCIドライバを仮インストールする。

    IBMが出している資料が非常に参考になりました。要点は、PnPマネージャによるインストールではなく、ドライバサービスエントリとPnPエントリを手動で追加することでドライバをインストールする、という方法です。
    (1)
    Intelのサイトからマトリックスマネージャをダウンロードしてsetupを実行します。インストールの途中でc:\Windows\temp\iifというフォルダが作成されていますので、この中にあるAHCIドライバ本体とinf/catファイルを別ディレクトリにコピーしておきます(x86とx64用があります)。コピーしたらインストーラは中止します。
    (2)
    コピーしたドライバファイルiaStor.sysをiaStor2.sysにリネームして、c:\windows\system32\drivers\フォルダに置きます(iaStor.sysはRAID用ドライバとして既に居座っているので、これを置き換えることはできない)。
    (3)
    次のレジストリエントリを追加する(.regファイルなどに保存して「結合」する)。
    ここでの注意点は、ここにあるデバイスIDはICH7R用のものである(下のリストの'dev_27c1'となっている部分全部)から、お使いのPCにあわせて適宜変更する必要があるということです。サービスエントリが'iaStor'ではなく、'iaStor2'に変更していることもポイント。

    ~ここから~
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_27c1&cc_0106]
    "Service"="iaStor2"
    "ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaStor2]
    "Type"=dword:00000001
    "Start"=dword:00000000
    "Group"="SCSI miniport"
    "ErrorControl"=dword:00000001
    "DisplayName"="Intel AHCI Controller"
    "ImagePath"="system32\\drivers\\iaStor2.sys"
    "Tag"=dword:00000019

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaStor2\Parameters]
    "queuePriorityEnable"=dword:00000000

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaStor2\Enum]
    "0"="PCI\\VEN_8086&DEV_27C1&SUBSYS_03451014&REV_01\\3&61aaa01&0&FA"
    "Count"=dword:00000001
    "NextInstance"=dword:00000001

    ~ここまで~
  2. (特に説明なし)
  3. (特に説明なし)
  4. の「その後、レジストリエディタでRAIDドライバ関連のエントリを全部消す。」については、ICH7Rの場合はデバイスIDが'DEV_27c3'となっていたので、これに関連するレジストリエントリはすべて消しました。
  5. 1でインストールしたAHCIドライバは仮ドライバなので、本AHCIドライバを入れ直す。

    これについては、まずドライバ本体を先ほどインストールしたiaStor2.sysからiaStor.sysにリネームします(この段階ではRAID用のiaStor.sysはもう使用されていないので削除できるはず)。
    そして、上の.regファイルで追加したレジストリエントリの'iaStor2'となっている箇所を、'iaStor'にリネームします。具体的には、レジストリエントリ
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaStor2→iaStorとするのと、
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_27c1&cc_0106キーにある値"Service""iaStor"に、
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaStorキーの"ImagePath""system32\\drivers\\iaStor.sys" と書き換える。

ポイントとしては以上ですが、(言うまでもありませんが)このような極めてクレイジーな操作が一発でうまくいくとも限らないので、私はTrue Imageでバックアップしてから行いました(ええ、一度はリカバリする羽目になりましたよ)。


....


で、なんとかAHCIに切り替えることはできたわけだけれど、当初の目的であった「SSD Toolboxを使えるように」という目標は叶わなかった。結局、ドライバを変えてもToolboxはSSDを認識してくれずドライブ一覧は空白のまま・・・。なんで?

0 件のコメント:

コメントを投稿