SAND STORM

朝ぼらけ

2012年4月17日

[Windows] AHCIの事後導入

Filed under: 未分類 — Tags: , — sajin @ 20:55

WindowsはXPからVista、果ては7に至ってもAHCI(Advance Host Controller Interface,Wikipedia)#1に完全に対応しておらず、install時にfloppy diskなどに用意しておいた専用のdriverをF6で読み込ませてinstallするのが推奨されるやり方になっている。事後のinstallも可能だが、五つの抑えておかねばならない要点があり、必ず1から順番にすべてを把握して正しく指定しないと機能させることができず、延々とbluescreen of deathを拝み続ける羽目になる。

#1 AHCIはUSB同様のhot-plugによる認識、port multiplierで1cableで複数の対象認識を可能にするだけでなく、さらにNCQ(Native Command Queuing)によってdisk上の距離にかかわらず命令された順番にdisk読み書きを行うのではなく、近い場所から順番にaccessしていくことでdisk読み書きの高速化・長寿命化の両方に寄与する。

AHCI vs IDE – Benchmark & Advantage @ Expertester

1.Motherboard(M/B)のどのSATA portをどのchipが管理しているかを明らかにする

 SATAのport数が多いM/Bだと、まず複数のchipが別々のSATA portを管理している。0-3まではAMDやらIntelやらのchip(South Bridge)だが、4-5はMarvellであるとかJMicronであるとかportを制御する専門のchipが別個に積まれていることが多い。 M/Bの説明書にどのchipがどのportを扱っているかは図示してあるので、必ずそれを参照してcableを挿しているportがどのchipによっ て操られているかを明らかにしておく。

2.そのchipに該当するdriverを入手

1で明らかにしたchipに該当するdriverをそれぞれdownloadする。M/BのchipsetがIntelAMDのものならそれぞれのsiteやM/B製造業者のofficial downloadから、また個別のchipはそのM/B製造業者が公開しているM/BのdownloadでAHCI(昔はRAIDと一体となっているものが多かった) driverとしてdownloadできるはずだ。

3.driverのinstall

AMD/IntelのようなM/Bの主要なchipsetなら、installerがついていて自動でinstallされる。それ以外のMarvellだのJMicronだのといった制御chipのdriverは、単にfileだけであったり仮にinstallerがついていてもfileが指定場所にcopyされるだけで自動的に使えるようになったりはしない。これらはdevice manager(デバイスマネージャ)でIDE ATA/ATAPIControllerの該当項目をdriver softwareの更新で手動検索、参照/ディスク使用など手動で直接そのdownloadして展開されたdriverのinfを指定してinstallせねばならない。成功すれば”記憶域controller”に新たにAHCI deviceが表示される。

4.registry設定

OS起動時に自動で読み込まれるようにregistryで設定されていないと、たとえdriverがinstallされていてもBSODをはいたり、認識されることもない。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\[該当するdriver]\Start

上がその設定項目で、CurrentControlSet\Services Subkey Entries @ Microsoft Supportで説明されているがStart subkeyは

0=boot loader OS以前に読み込まれる。
1=kernel OSとともに読み込まれる
2=automatic OSが立ち上がった後に、必要であれば読み込まれる。
3=manual userが操作してその必要が生じた時に読み込まれる。
4=disable まったく機能しない。

を意味する。

例えばatapiを4にすればatapi接続はまったく認識されない。msahci(Microsoftが標準で用意しているAHCI driver)であればdefaultで3に設定してあるので、仮にこのdriverでM/BのSATAを扱うchipを制御できたとしてもOS用のdiskはOS起動前に読み込まれないと意味がないのでBSODになってしまう。AHCIでOSのdiskを読もうとするなら必ず該当driverでStartを0に指定しなければならない。

かようにCurrentControlSet\Servicesはdriverを読むか読まないか、いつ読むかを規定しているのだが、問題はAHCIのinstallerとされるものをinstallしても、これらのregistryが適切に設定されるとは限らないことだ。例えばAMDのSBxxx系のAHCIを扱っているのが何かと言えば、amd_sataとamd_xataの両者だが、普通にinstallしてもamd_xataの方しか0に指定されず、amd_sataは3設定なのでOSのdiskは読めずBSODになる。この場合、amd_sataの方も0に指定して、改めてrebootしなければならない。

5.BIOS

AHCIを使うかIDEを使うかはBIOS/UEFIの設定が決めている。

起動時のlogoでF2/DEL keyなど押してBIOS/UEFIのmenuに入ってIDE/AHCI切り替え項目を探し、AHCIに切り替えて起動すれば、上の1~4の手順が正常に行われていればWindowsが起動し、deviceの再設定が行われ新たにAHCIで機器を認識して再起動が要求される。ひとつでも間違いがあれば、OSのdiskならBSOD、それ以外のdiskならOSを起動しても存在を感知できないといったことになる。

通常1の要因により、chipが操るportの塊ごとに切り替えができるようになっているから、ちゃんとportとそれに挿さっている機器を把握して該当する項目を切り替えないとAHCIにならなかったり、表示されない原因が何かわからなくなる。


関連記事

2 Comments »

  1. Windows Vista 32bit

    officialからdownloadできるAHCIを含んだchipset driverをそのままinstallしてもAHCIはinstallされない。

    AMD\Support\12-3_vista_win7_32-64_sb\Packages\Drivers\SBDrv\SB7xx\AHCI

    にある自分のOSのfolderを開いてamd_sata.msiを実行することで初めてinstallされる。しかし、これでも駄目で、device managerでIDE controllerを手動で更新して先ほどのfolderのinfを指定しなければならない。結局自動installなどされないと考えるべきで、すべての手順を踏むのが当然と考え、registryまで含めすべて確認したうえでBIOSでの変更を行うべき。

    Comment by sajin — 2012年4月19日 @ 23:12

  2. bootでCD/DVDを指定してもAHCI/RAID modeだと無視される。これはBIOS段階で起きる一般的現象なのでAHCIを使用する際は注意が必要。

    Comment by sajin — 2012年4月23日 @ 11:50

RSS feed for comments on this post. TrackBack URL

Leave a comment


sand-storm.net