Windowsの起動時にカーソルが点滅して、起動が遅い原因はOPROM?
2018/04/22
本エントリーの目次
先日、自宅にあるPCのうちの1台を久々に再起動した時に、ふとあることが気になりました。
起動が遅い!?
ええ、そうなんです!
以前から遅いのは知っていたんですが、やっぱり遅い。
これまでは後述する理由により、あまり気にしていなかったんですが、一度気になるとすごく気になる…。
というわけで、さっそく調査することに。
これまで起動が遅いのを気にしていなかったわけ
問題が起きているPCは、他のPCのバックアップ先として、また各種テスト用仮想OSのホストとして、サーバー用途としてのみ使用しているPC。
そのため基本的には24時間常に稼働しています。
これを停止または再起動するのは、月に1回程度のWindows Updateの適用の時か、ハードウェアの不具合による交換の時くらい。
あとはマイクロソフトさんから、重要度緊急のセキュリティパッチが公開された時くらいでしょうか。(更新の反映に再起動が必要な時のみ。)
またサーバー機として使用しているため、基本的には操作はリモートアクセスのみ。
このPCにティスプレイやキーボードを繋いで操作することは、ネットワーク系統のトラブル時を除いてはまずありません。
そのため再起動した際は、そろそろ再起動が終わったかなぁ。
なんてタイミングを見計らって、クライアントPCからリモートアクセスを行っています。
このPCの起動が遅いのは、実はPCを組み立て後のUEFIの設定をしている時から把握していました。
ですが再起動をほとんどしない、起動終了まで画面の前で待っているわけではない、といったこのPCの特性から、組み立て時も、そして運用開始からこれまでも、あまり気にしていなかった、というわけ。
より正しく言えば気にならなかった、ですかね。
一度気にしてしまうと、気になって仕方がない…。
ですが冒頭に書いたように、一度気になってしまうともうダメですね。
この時は偶然、累積していたWindows Updateのセキュリティパッチの適用に時間がかかったのか、起動がいつもより遅く。
そこで気になったはるるは、サーバー機にモニターを繋いでみたわけ。
その瞬間PCから『ピッ!』というPOST(Power On Self Test)音。
お!もう一回再起動して適用完了かな!
なんて思ってディスプレイに映しだされた画面を見ていると、…起動が遅い…。
やはり以前から把握していたとおり、起動時のとある画面の起動処理が遅い状態となっており、全体的な起動が遅れている様子。
そこで気になってしまったものは仕方ない!
ということで、本格的に調査をすることにしたわけ。
起動が遅いのはカーソルが点滅する画面
今回問題となっている、起動が遅い画面がこちら。
POSTが終了し、UEFIが起動デバイスを探しにいき、Windowsの窓の画面が出るまでの間に表示される画面です。
この画面の特徴は、画面左上部にカーソル(アンダーバー)が早い点滅状態で表示されること。
そして再起動する度に、この画面が決まって13秒前後表示されて、その後Windows 10の窓の画面が一瞬表示され、その直後にログイン画面が表示される、こんな症状です。
しかも現象の再現性は100%で、さらに待ち時間も決まって13秒前後。
この現象の挙動から、はるるが推測した原因はズバリこれ!
起動デバイスを探しに行って、何かのタイムアウトを待っているのでは?
確証はなかったんですが、Windows 10の窓の画面が表示されてからの起動はかなり早い。
この窓の画面の表示が始まる直前までは、どうも起動デバイスを探しにいっているような気がする。
さらに再現性が100%で決まって13秒前後待たされるとなると、13秒でタイムアウトして、それでダメなら次に見つかったデバイスで起動を試みる、というような動きに感じたわけ。
そこでまず疑ったのが、起動デバイスと起動順序です。
起動デバイスと起動順序を疑うも見当はずれ
当該PCにはDVDドライブ1基、SSD3基、内蔵HDD1基、そして外付けのUSBHDDを1基接続していました。
そこで本来起動すべきOS(Windows 10)がインストールされているSSDよりも、DVDドライブの起動優先順位が高く、起動できるブータブルDVDを探しに行くも、見つからない。
そしてDVDドライブにブータブルディスクが見つかるか、タイムアウトするまで待ってみるも、ダメだった。
よし!それなら他のドライブを見に行くか…。
お!Windows 10がインストールされている起動ディスク(SSD)を発見!
これで起動するぞ~!
というような判断になっているんじゃないか、なんて疑ったんです。
そこで起動して欲しいWindows 10がインストールされている起動ディスク(SSD)以外の、DVDドライブや記憶媒体を起動デバイスから外し、起動ディスク(SSD)を起動優先順位の1位にして再起動することに。
こうすれば、ダイレクトに起動して欲しいSSDを見に行くから起動が早くなるはず!
こう思ってUEFIの設定変更を行い、リブート。
すると…!
…。
どうもこれでは改善しないようですね…。
そこで一旦起動デバイスと起動順序を元に戻し、第1優先 = DVDドライブ、第2優先 = 起動して欲しいWindows 10がインストールされている起動ディスク(SSD)とし、他の改善方法を模索することに。
UEFIの設定で関連しそうなものがないか、確認してみることに
残念なことに、起動優先順位の設定変更ではダメだと分かった、はるる。
ですがOS起動前の起動デバイスを探すのに時間がかかっているのではないか、という予想には少し自信がありました。
そこでUEFIの他の設定項目で、この現象に関連しそうな項目を探してみることに。
そしてまず確認したのがこちら、SATA Configuration。
SATA Configurationは、Serial ATAに関する各種設定を行う項目。
今回の問題はSATAポートに接続した、DVDドライブ、SSD、HDDのどれかに問題があるはずなので、ここを疑ったわけ。
さっそく内容を確認してみるも、う~ん、どうも関係しそうな項目は見つかりません。
そこで次に確認したのがこちら、オンボードデバイス設定構成。
マザーボード上のオンボードデバイスの設定を行う項目です。
これを見ていると…あった!ありましたよ!!
かなり怪しい設定項目が!
それがこちら!
犯人はMarvell Storage OPROM!
結論から言うと、このMarvell Storage OPROMが起動を遅くさせていた張本人。
これを以下のように無効化するだけで、13秒ほどかかっていた待ち時間がほぼゼロになり、起動がかなり高速になりました!
Marvell Storage OPROMとは?
Marvell Storage OPROMは、英語版のマニュアルによるとデフォルト(初期設定)では有効で、Marvell Storage コントローラーをEnabledにしている状況下で、OPROMをONにしたいならEnabledに設定しなさい、とのこと。
ですが具体的には、どういう時にORPOMを有効にすべきなのか、といった解説はなく。
そこでネットで調べてみたところ、どうやらMarvell社製のSATAポートでRAIDやSSD Cacheを利用する場合は有効にする必要がある、というような情報が見つかりました。
問題が発生していたPCでは、Marvell社製のSATAポートでRAIDを構築しているわけではありません。
またSSD Cacheを使用する予定もないため、Marvell Storage OPROMを無効にしても問題がなく、これを無効にするだけであっさり解決!
ただなぜ遅かったのかの根本原因は分からず、本当に何かのタイムアウトを待っていたのかどうかは不明です。
Marvell Storage コントローラーを無効にしてはダメなの?
先のUEFIのMarvell Storage OPROMの設定画面をご覧いただくと、OPROMのすぐ上にMarvell Storage コントローラーという設定項目が存在します。
そのためこれを無効にしてはダメなの?
と疑問に思われる方がいらっしゃるかもしれないので、この点についても補足します。
そもそもMarvell Serial ATAはなぜ存在するの?
当該PCのマザーボードには、以下のSATAポートが搭載されています。
- Intel Serial ATA 6.0Gb/s ✕ 2ポート
- Intel Serial ATA 3.0Gb/s ✕ 4ポート
- Marvell Serial ATA 6.0Gb/s ✕ 2ポート
この中で特に注目していただきたいのが、転送速度の数字。
ご覧のとおり、より高速な6.0Gb/sのSATAポートは、Intel社製とMarvell社製でそれぞれ2ポートずつ、計4ポートが搭載されています。
これ、どうして違うメーカーのSATAポートが混在しているのかというと、マザーボードのチップセットが6.0Gb/sのSATAポートを2個しかサポートしていないため。
でも6.0Gb/sのSATAポートが2ポートではちょっと少ないよね…。
というメーカーさん側の判断により、Marvell社の外部チップを搭載して、6.0Gb/sのSATAポートを2つ追加しているというわけ。
ただチップセットのSATAポートに比べ、外部チップのSATAポートは同じ理論値の6.0Gb/sであっても速度が劣る。
そのため外部チップのSATAポートには起動ディスクではなく、データディスクを接続するよう推奨している。
というようなメーカーさんもあるそう。
こういった背景から、まずはチップセットのSATAポートに起動ディスクやアクセス頻度の高いデータディスクを優先的に接続し、それでポートが足りないようであれば、外部チップのSATAポートにデータディスクを接続するという形が、メーカーさん推奨の接続形態となります。
Marvell Storage コントローラーを無効にして良いかどうかは、接続形態による!
今回発生した起動遅延は先に書いたとおり、Marvell Storage OPROMを無効化するだけで解決しました。
そして実はこの問題、先の疑問をもたれた方の予想通り、Marvell Storage コントローラーを無効にすることでも解決します。
ただMarvell Storage コントローラーを無効にすると、Marvell Serial ATA 6.0Gb/s ✕ 2ポートが使用できなくなります。
これは推測ですが、Marvell Storage コントローラーを無効にすると、当該ポートが無効になるため、Marvell Storage OPROMの動作も無効化される。
これにより、Marvell Storage コントローラーを無効化することでも起動遅延の問題を解決できるのではないかと。
そのためMarvell社のSATAポートにデバイスを接続していなければ、Marvell Storage コントローラーを無効にする対策でもOKです。
つまりMarvell Storage コントローラーを無効にして良いかどうかは、接続形態による、ということになるでしょう。
Marvell Storage OPROMを無効にする対策を採用しました!
今回問題が発生していたPCでは、先に書いたとおりDVDドライブ1基、SSD3基、そして内蔵HDDを1基接続しています。
この内SSDについてはI/O速度がはやいことから、6.0Gb/sのポートに接続しておきたかったため、起動ディスクとアクセス頻度の高いデータディスクのSSDをIntel社のポートに、アクセス頻度の低いデータディスクのSSDをMarvell社のポートに接続していました。
こういった接続形態のため、Marvell社のポートを使用していることから、Marvell Storage コントローラーを無効にせず、Marvell Storage OPROMを無効化する対策を採用することとしました。
今回ご紹介したMarvell Storage OPROMやMarvell Storage コントローラーを無効にするという対策が、同様の起動遅延の症状すべてに効果があるのかどうかは不明です。
ですが同様の症状が発生して悩んでいる方は、一度試してみると良いかもしれませんよ~!