0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows 7 + NVMe SSD で 0x0000007B を突破した記録 — VAIO S15 SSD換装トラブル完全解決

0
Posted at

TL;DR(この記事で解決できること)

  • 問題:Windows 7を別PCのSATA SSDから新しいNVMe SSDにクローンしたら、STOP: 0x0000007B (INACCESSIBLE_BOOT_DEVICE) で起動しない
  • 根本原因:クローン元にNVMeドライバー(stornvme.sys)が入っていなかった
  • 解決:WinPE上でオフラインのDISMとレジストリ編集で、NVMeドライバーを強制組み込み+CriticalDeviceDatabase手動登録
  • 所要時間:丸1日(失敗試行含む)

本記事について(生成AIの活用)

本記事は、トラブル解決のプロセスと記事執筆の両方で 生成AI(Anthropic Claude Opus4.7)を活用 しています。

  • 問題解決:DISMのエラー診断、レジストリ編集の手順設計、CriticalDeviceDatabaseへの登録パターン提案など、技術的な切り分けと対処方針の立案を生成AIと対話しながら進めました
  • 記事執筆:本記事の構成・文章化も、上記やりとりのログをベースに生成AIにまとめてもらった上で、筆者が内容を確認・編集しています

実際にコマンドを実行し、結果を確認・判断したのは筆者ですが、トラブルシューティングのナビゲーション役としてAIが大きな役割を果たしました。同種のトラブルで困っている方への参考情報として、AIとの協働で得られた解決手順を公開します。


対象読者

  • 古いSATAベースのWindows 7環境を、NVMe SSDにクローン移行しようとして起動しなくなった人
  • STOP: 0x0000007B に遭遇してドライバー不一致を疑っている人
  • サポート終了済みOSの延命措置をしたい人(自己責任で)

環境

項目 内容
ノートPC Sony VAIO VJS151C11N(VAIO S15)
CPU Intel Core i5-6300HQ(Skylake世代)
チップセット Intel HM170
換装SSD ORICO O7000(M.2 2280 NVMe、MAP1602コントローラー)
元SSD SATA M.2 SSD
OS Windows 7 SP1 Pro 日本語版 x64
クローン元 別機種のお古VAIO(SATA HDD搭載)

経緯サマリー

問題①:電源が全く入らない

  • 原因:SSDのヒートシンクがPC内部に干渉してショート
  • 解決:ヒートシンクを剥がして対応

問題②:SSDを挿すとBIOSにすら入れない

  • 原因:上記と同じヒートシンク干渉の余波
  • 解決:物理的干渉を完全排除

問題③:BIOSは通るがWindowsが起動しない → STOP: 0x0000007B

  • 原因:クローン元PCはSATA接続だったため、WindowsイメージにNVMeドライバーが一切含まれていなかった
  • 解決:本記事の主題。以下で詳述

前提知識

なぜ 0x0000007B が出るのか

Windowsの起動プロセスでは、OSが起動する前にブートローダーが最低限のストレージドライバーをロードしてWindowsパーティションを読みに行きます。このとき、対応するストレージコントローラーのドライバーが存在しないとブートできないのです。

SATAからNVMeへの変更は、Windowsから見れば「突然、知らないハードウェアで動き始めた」ことになります。起動中のOSならドライバーをインストールすればいいですが、起動前に必要なので、後からじゃ入れられない。これがクローン移行の壁です。

Windows 7とNVMeの関係

Windows 7はリリース当時(2009年)にNVMeが存在しなかったため、標準ではNVMeドライバー(stornvme.sys)を持ちません。後に以下のホットフィックスで追加されました:

  • KB2990941:NVMeドライバー本体を追加
  • KB3087873:KB2990941の安定性修正

これらが適用されていないWindows 7イメージは、NVMe SSDでは絶対に起動しません。


解決プロセス

全体の流れ

[1] 現状把握(何が足りないかを特定)
     ↓
[2] Windows 10インストールUSBでWinPE起動
     ↓
[3] KB2990941を別PCで入手 → USB経由でVAIOへ
     ↓
[4] MSUからCABを展開 → さらにドライバーファイルを展開
     ↓
[5] DISM /add-driver /forceunsigned でドライバー組み込み
     ↓
[6] レジストリ編集でstornvmeサービスとCriticalDeviceDatabaseを登録
     ↓
[7] 起動成功

使用ツール・準備物

  • Windows 10インストールUSB(WinPE環境として使用)
  • 作業用USBメモリ(パッチファイルとバッチファイル運搬用)
  • 別PC(パッチのダウンロードとバッチファイル作成用)

詳細手順

STEP 1:WinPEで起動して現状確認

Windows 10 USBから起動 → 言語選択 → 「コンピューターを修復する」 → トラブルシューティング → コマンドプロンプト

diskpart
list disk
select disk 0
detail disk

出力のドライブ名に NVMe が含まれることを確認。

STEP 2:Windowsパーティションにドライブレターを割り当て

diskpart
select disk 0
select partition 3
assign letter=W
exit

(環境によりパーティション番号は異なる。Windowsパーティションは通常一番大きいもの)

STEP 3:NVMeドライバーの不在を確認

dir W:\Windows\System32\drivers\stornvme.sys

「ファイルが見つかりません」となればNVMeドライバー不在確定。

STEP 4:KB2990941をダウンロード(別PC)

Microsoft Update Catalogから入手:

https://www.catalog.update.microsoft.com/Search.aspx?q=KB2990941

Windows 6.1 for x64-based Systems を選択。ファイル名は Windows6.1-KB2990941-v3-x64.msu

作業用USBメモリのルートに保存。

STEP 5:WinPEでMSUを多段展開

MSUはCABのラッパーなので、中身を取り出して使う。

mkdir W:\Scratch
mkdir W:\Temp
mkdir W:\Temp\KB2990941

expand -F:* D:\Windows6.1-KB2990941-v3-x64.msu W:\Temp\
expand -F:* W:\Temp\Windows6.1-KB2990941-v3-x64.cab W:\Temp\KB2990941\

D: はUSBのドライブレター、環境により変わる)

STEP 6:DISMでドライバーを強制組み込み

dism /image:W:\ /scratchdir:W:\Scratch /add-driver /driver:W:\Temp\KB2990941\ /recurse /forceunsigned

ポイント

  • /scratchdir:WinPEはRAM上の狭い作業領域で動くので、広い場所(Wドライブ)を明示指定。これが無いと「正常完了」と表示されつつ実は失敗する
  • /forceunsigned:ホットフィックスの署名タイムスタンプが古く、WinPE環境ではエラー50(未署名判定)になるため強制オプションで通す
  • /recurse:サブフォルダを再帰的に探索

STEP 7:ドライバーが配置されたか確認

dir W:\Windows\System32\drivers\stornvme.sys

ファイル情報が表示されればOK。

STEP 8:stornvmeサービスの状態確認

reg load HKLM\TEMP W:\Windows\System32\config\system
reg query "HKLM\TEMP\ControlSet001\services\stornvme" /v Start

Start = 0x0(ブート起動)になっていれば理想。DISMがINF通りにサービス登録してくれているはず。もし未登録や値が違う場合は手動で追加:

reg add "HKLM\TEMP\ControlSet001\services\stornvme" /v Start /t REG_DWORD /d 0 /f
reg add "HKLM\TEMP\ControlSet001\services\stornvme" /v Type /t REG_DWORD /d 1 /f
reg add "HKLM\TEMP\ControlSet001\services\stornvme" /v ErrorControl /t REG_DWORD /d 3 /f
reg add "HKLM\TEMP\ControlSet001\services\stornvme" /v ImagePath /t REG_EXPAND_SZ /d "system32\drivers\stornvme.sys" /f
reg add "HKLM\TEMP\ControlSet001\services\stornvme" /v Group /t REG_SZ /d "SCSI miniport" /f

ControlSet002 にも同内容を登録。

STEP 9:NVMeコントローラーのPnP ID取得

reg unload HKLM\TEMP
wmic path win32_pnpentity where "Service='stornvme'" get DeviceID,Name

または:

wmic path win32_pnpentity get DeviceID,Name | find "PCI\VEN"

PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XX 形式の文字列を控える。

(今回のORICO O7000のケース:PCI\VEN_1E4B&DEV_1602&SUBSYS_16021E4B&REV_01 → MAXIO MAP1602コントローラー)

STEP 10:CriticalDeviceDatabaseに登録

ここが最重要ポイント。Windows起動時にPnP IDとサービスを紐付けるマスターテーブル。

バッチファイル nvme_fix.bat を別PCで作成してUSB経由でWinPEに持ち込む:

@echo off
reg load HKLM\TEMP W:\Windows\System32\config\system

rem ControlSet001 - 具体→汎用の順で4パターン登録
reg add "HKLM\TEMP\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&subsys_16021e4b&rev_01" /v Service /t REG_SZ /d stornvme /f
reg add "HKLM\TEMP\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&subsys_16021e4b&rev_01" /v ClassGUID /t REG_SZ /d "{4d36e97b-e325-11ce-bfc1-08002be10318}" /f

reg add "HKLM\TEMP\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&subsys_16021e4b" /v Service /t REG_SZ /d stornvme /f
reg add "HKLM\TEMP\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&subsys_16021e4b" /v ClassGUID /t REG_SZ /d "{4d36e97b-e325-11ce-bfc1-08002be10318}" /f

reg add "HKLM\TEMP\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&cc_010802" /v Service /t REG_SZ /d stornvme /f
reg add "HKLM\TEMP\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&cc_010802" /v ClassGUID /t REG_SZ /d "{4d36e97b-e325-11ce-bfc1-08002be10318}" /f

reg add "HKLM\TEMP\ControlSet001\Control\CriticalDeviceDatabase\pci#cc_010802" /v Service /t REG_SZ /d stornvme /f
reg add "HKLM\TEMP\ControlSet001\Control\CriticalDeviceDatabase\pci#cc_010802" /v ClassGUID /t REG_SZ /d "{4d36e97b-e325-11ce-bfc1-08002be10318}" /f

rem ControlSet002 にも同じ内容を登録
reg add "HKLM\TEMP\ControlSet002\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&subsys_16021e4b&rev_01" /v Service /t REG_SZ /d stornvme /f
reg add "HKLM\TEMP\ControlSet002\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&subsys_16021e4b&rev_01" /v ClassGUID /t REG_SZ /d "{4d36e97b-e325-11ce-bfc1-08002be10318}" /f

reg add "HKLM\TEMP\ControlSet002\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&subsys_16021e4b" /v Service /t REG_SZ /d stornvme /f
reg add "HKLM\TEMP\ControlSet002\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&subsys_16021e4b" /v ClassGUID /t REG_SZ /d "{4d36e97b-e325-11ce-bfc1-08002be10318}" /f

reg add "HKLM\TEMP\ControlSet002\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&cc_010802" /v Service /t REG_SZ /d stornvme /f
reg add "HKLM\TEMP\ControlSet002\Control\CriticalDeviceDatabase\pci#ven_1e4b&dev_1602&cc_010802" /v ClassGUID /t REG_SZ /d "{4d36e97b-e325-11ce-bfc1-08002be10318}" /f

reg add "HKLM\TEMP\ControlSet002\Control\CriticalDeviceDatabase\pci#cc_010802" /v Service /t REG_SZ /d stornvme /f
reg add "HKLM\TEMP\ControlSet002\Control\CriticalDeviceDatabase\pci#cc_010802" /v ClassGUID /t REG_SZ /d "{4d36e97b-e325-11ce-bfc1-08002be10318}" /f

reg unload HKLM\TEMP
echo.
echo === 完了 ===
pause

注意点

  • VEN_XXXX&DEV_XXXX の値は自分のNVMe SSDのPnP IDに置き換える
  • キー名の & 文字があるので、パス全体を必ずダブルクォートで囲む
  • 具体的なPnP ID → 汎用の cc_010802(NVMeクラスコード)の順で4パターン登録するのがコツ。優先順位を考慮した冗長化

USBから実行:

D:
nvme_fix.bat

STEP 11:シャットダウンして起動テスト

wpeutil shutdown

USBを抜いて電源ON。


ハマりポイントと教訓

ハマり①:dism /add-package0x800f082f エラー

症状unattend.xml 処理でコケる

原因:Windows 10のDISMでWindows 7のMSUを扱うときの相性問題

対策/add-package(MSU単位)ではなく /add-driver(INF単位)に切り替える。CABをさらに展開してINFを直接指定。

ハマり②:DISMが「正常完了」と言うのにファイルが配置されない

症状:コマンド成功するが stornvme.sys が存在しない

原因:WinPEのスクラッチディレクトリ(作業領域)不足。警告は出るが処理自体は失敗している

対策/scratchdir:W:\Scratch を必ず指定

ハマり③:ドライバー署名エラー(エラー50)

症状/add-driver 実行時、LDRブランチ側のドライバーが「署名されていない」と拒否される

原因:WinPE環境でのタイムスタンプ署名検証の問題。GDRブランチは通るがLDRブランチは通らない

対策/forceunsigned オプションで強制導入。GDRだけ入れば起動には十分

ハマり④:KB3087873には stornvme.inf が含まれていない

症状:KB2990941と同じ手順でKB3087873を適用しようとすると .inf が見つからない

原因:KB3087873は「ドライバーパッケージ」ではなく「バイナリ更新のみ」の構成

対策:KB3087873はオフライン適用せず、起動後にWindows Update経由で適用するか、手動で .sys ファイルをコピーする

ハマり⑤:WinPEのコマンドプロンプトにクリップボードが無い

症状:長いコマンドを手打ちすると必ずタイポする

対策:別PCでバッチファイルを作ってUSB経由で実行。これが一番楽で確実。

ハマり⑥:コマンドの全角スペース・バックスラッシュ

症状:日本語配列のキーボードで \¥ になったり、スペースが全角になったりして DISM がエラー

対策:バッチファイルにすれば回避可能。手打ちするなら注意深く


教訓:そもそもこうなる前に

今回の教訓を一般化すると:

  1. クローン前にNVMeドライバーを入れておく

    • クローン元のWindows 7側で、事前にKB2990941を当てておけば回避できた
  2. Macrium ReflectなどのUniversal Restore機能付きツールを使う

    • 異なるハードウェアへの復元に対応したクローンツールなら、ドライバー修正を自動でやってくれる
  3. そもそもWindows 7を延命するか考える

    • サポート終了済みOSは、ネット接続すると危険
    • Windows 10/11への移行を検討するか、完全オフライン運用に徹する

残課題と運用方針

決定事項

  • 長期運用方針:オフライン専用機として運用
    • サポート終了済みOSのネット接続リスクを回避するため、本機は完全オフラインで運用する
    • 必要なファイル受け渡しはUSBメモリ経由で行う

残課題

  • KB3087873の適用(安定性向上のため、いずれオフラインで手動適用予定)
  • Convenience Rollup(KB3020369 + KB3125574)の適用検討

セキュリティに関する注意

Windows 7は2020年1月にサポートが終了しています。ネットに接続する場合、パッチ未対応の脆弱性を突かれるリスクが高く、以下の対策が最低限必要です:

  • ネット接続を極力避ける(今回の移行もオフラインで完結できる)
  • 接続する場合はファイアウォールで制限
  • ブラウザやメーラーの使用は避け、必要な通信のみ許可
  • 可能ならWindows 10/11への移行を検討

今回の対応では、本機は完全オフライン運用と決定しました。ネット接続によるリスクを回避し、必要なデータの受け渡しはUSBメモリ経由で行います。


生成AIの利用について

本記事の 問題解決プロセスおよび記事執筆の両方で、生成AI(Anthropic Claude)を活用しました

具体的な使い方

  • トラブルシューティング:エラーコードや状況を伝えると、AIが原因の仮説と次の手順を提示。それを実機で試して結果をフィードバックする、という対話形式で進めた
  • コマンド生成:DISMコマンド、レジストリ編集コマンド、バッチファイルなど、長く正確性が要求されるコマンドはAIに生成させた
  • 記事構成と執筆:このやり取りの記録を元に、AIが本記事の初稿を作成

AIの強みと限界

強みだった点

  • エラーコード(0x0000007B0x800f082f、エラー50など)の意味と典型的な原因を即座に提示
  • スクラッチ領域不足、/forceunsigned の必要性、CriticalDeviceDatabase登録の重要性など、複合要因の絡んだ問題を分解して提示してくれた
  • 失敗するたびに別アプローチをすぐ提案してくれた(DISMの/add-packageがダメなら/add-driver、それもダメならMSU→CAB→ファイル展開、という階段状の代替案)

限界・注意点

  • AIの提案がすべて正しいわけではなく、実機での試行と結果のフィードバックが不可欠
  • 例えば最初は「KB2990941が当たれば動く」と断言気味に出てきたが、実際にはCriticalDeviceDatabaseへの手動登録まで必要だった
  • WinPE特有の制約(クリップボードなし、スクラッチ領域狭小など)も、実際にぶつかってからAIに伝えて回避策を引き出した

結論

AIは万能の解決者ではないが、優秀な技術相談相手として機能した。一人で資料を漁って試行錯誤するより、明らかに早く・正確にゴールに到達できた。同様のトラブルシューティングをする方には、AIとの対話形式での問題解決を強くおすすめします。


参考リンク


まとめ

フェーズ 状態
ヒートシンク干渉 ✅ 解決
BIOS認識 ✅ NVMeとして認識
Windows 7起動 成功
KB3087873 ⏳ 保留中

Windows 7 + NVMe SSD の組み合わせは、標準ではブートできませんが、WinPE上でのドライバー手動組み込み+CriticalDeviceDatabase登録によって起動可能になります。クローン移行でコケた人の役に立てば。

同じ状況でハマった方がいたら、コメントください。


Tags: Windows7 NVMe SSD換装 VAIO トラブルシューティング DISM 0x0000007B

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?