PCで遊んだ日々の備忘録

Making PC and Customization PC

M.2 SSD の換装と UEFI ブート の修復

2021年11月に製作した ミニタワー型 PC の SATAタイプ M.2 SSD を NVMeタイプに換装しました。それに伴って Windows10 も移設(クローニング)しました。下の画像は NVMe M.2 SSD を取り付けた写真です。

 

換装前の SATA M.2 SSD の Windowsは mbr2gpt コマンドで システム/パーテイションテーブル を Legacy BIOS/MBR から UEFI/GPT へ変換し Secure Bootを設定しました。

変換は成功し、Windowsは正常に動作しており Windows11 アップグレードのダウンロードリンクも表示されています。ところがパーティションの構成を見ると以下のようなおかしなレイアウトになってしまいました。

| Windows | EFI system | 未割り当て | 

正常動作しているとは言えあまり気持ちのよいものではありません。そこで今回 NVMe M.2 SSDへの換装を機に Microsoft推奨の UEFI/GPT ベースのハード ドライブ パーティション を作成し、そこに移設しました。

しかし、移設しただけではパーティションの構成が変わっているため Windowsは起動しません。ブートシステムの修復が必要です。このページでは実際に行った移設と修復の方法を掲載しています。(2021年12月)


Windows 移設先の SSD(Solid State Drive)

今回この SSDに換装し Windws10を移設しました。移設元は Transcend® M.2 SSD 830S です。

SanDisk® Ultra M.2 NVMe 3D SSD 主な仕様

  • モデル・フォームファクター:SDSSDH3N-250G-G25・M.2 2280
  • 記憶容量:250GB
  • インターフェース:PCIe Gen3 8Gb/s, 4レーン
  • NANDタイプ:3D NAND フラッシュ
  • パフォーマンス
    • シーケンシャル リード|ライト:2,400 MB/s|950 MB/s
    • 総書込み量(TBW):150 TB
  • 使用温度域:0℃~70℃
  • 生産国:Malayia
  • 発売日:2020年12月

Explanation

2021年7月に購入しました。同年11月現在では品切れのようですが中身が同じ Western Digitalの SN550 NVMe SSD(WDS250G2B0C-EC)が販売されていました。両者は実装部品の配置やデータシートの仕様が全く同じです。

シーケンシャル リードは SATAタイプの約4倍の速度です。ですが体感的にはさほど差は感じられません。NVMeタイプに換装することで得られるメリットは SATA-6Gポートが 1つ解放されることでしょうか。

▲ 目次へ

Windows 移設の手順

使用するアプリ

下表は移設に使用したアプリケーションソフトです。

GParted(GNOME Partition Editor) パーティションの作成と編集
Acronis True Image 2020 Windowsイメージファイルの作成

何れもブータブル USBメモリーを作成して使用します。

PCの構成

下表は M.2 SSDを換装する前の構成です。

マザーボード ASUS PRIME B460M-K
ファームウェア|Secure Boot UEFI|有効
CSM 有効
チップセット Intel® B460
プロセッサー Intel® Core i5-10400
メモリー 16 GB
SSD 1 SATA M.2 SSD 128GB(Windows10, GPT)
SSD 2 SATA 2.5" SSD 360GB(データ有, MBR)
HDD 1 TB(データ有, MBR)
ODD Blu-ray コンボドライブ
  • GPT・・・GUID Partition Table
  • MBR・・・Master Boot Record

換装するのは SSD 1ですが、その前に Acronis True Imageを用いて Windows10 と EFIシステム のイメージファイルを各々 HDDに作成しました。

それではまず換装した SSD 1(SanDisk)に GPartedを用いて GPTパーテイションテーブルを設定した後、下記のような Microsoft推奨のパーティションを設定します。

Partition	Name                          File systm   Capacity  Flag
--------------  ----------------------------  -----------  --------  -----------
/dev/nvme0n1p1	EFI System partition          FAT32        100 MiB   boot,esp
/dev/nvme0n1p2	Microsoft reserved partition  unformatted   16 MiB   msftres
/dev/nvme0n1p3	Basic data partition	      NTFS         232 GiB   msftdata
/dev/nvme0n1p4	WinRE partition               NTFS         790 MiB   hidden,diag 

上の画像はパーティション設定後の GPartedのスクリーンショットです。/dev/nvme0nlp1 に EFIシステムのイメージファイルを、/dev/nvme0nlp3 に Windows10のイメージファイルをレストアしました。ここでの要点は各パーティションに boot,esp などの Flag(フラグ)を設定しておくことです。

移設の作業はこれで完了ですが このままでは Windowsは起動しないので次のセクションでブートシステムの修復を行います。

補足

実機のパーティションが実際どのような構成なっているのか手持ちのパソコン2台で確認してみました。下の画像は各パソコン Windowsコマンドプロンプトのスクリーンショットです。赤枠内がシステムデバイスです。

赤枠内の Type 列は下記のパーティション名、

  • システム・・・EFI System partition
  • 予約・・・Microsoft reserved partition(MSR)
  • プライマリ・・・Basic data partition
  • 回復・・・WinRE partition

を示します。確かに容量こそ違えど Microsoft Docsに掲載されているパーティション構成になっていますね。

▲ 目次へ

ブートシステムの修復

作業の前にブートシステムの修復が完了し Windowsが起動するまで SSD 2, HDD, ODD の SATAケーブルを抜いておきます。電源ケーブルは挿したままでよいです。

以下、レストアした Windows10を起動するためブートシステムを修復した方法です。

下記は使用したアプリケーションソフトです。

Windowsインストールメディア作成ツール Media Creation Tool 21H2

このツールから USBメモリーでインストールメディアを作成して起動し Windowsセットアップ ウィザードの「コンピューターを修復する」を選択します。

そして トラブルシューティング > 詳細オプション > コマンドプロンプト の順に選択します。

下記は今回の修復作業で用いたコマンドです。実行した順に記述しています。

  1. diskpart・・・DISKPARTを起動
  2. sel disk 0・・・Windowsが入っているデバイス0を選択
  3. list vol・・・パーティション情報を表示
  4. sel vol 1・・・ボリューム 1(EFIシステムパーティション = ESP)を選択
  5. assign letter=K・・・ESPにドライブ文字 K を設定(ESPをマウント)
  6. exit・・・DISKPARTを終了
  7. format K: /fs:FAT32・・・ESPをフォーマット(bootrec /fixboot が上手くいかないので初期化した)
  8. bootsect /nt60 sys ・・・ESPのブートセクターを更新
  9. bootrec /fixboot ・・・新しいブートセクターをシステムパーティションに書き込む
  10. bcdboot c:\Windows /s K: /f UEFI ・・・古いブートエントリとその値(BCD)を消去してシステムファイルを更新
  11. exit・・・コマンドプロンプトを終了

上記 7.と 8.を実行する前は 9.のコマンドを実行するとアクセス拒否されて先に進めませんでした。この事から EFIシステムパーティションをレストア(復元)する必要はなかったようです。

つまりレストアするのは OS本体である Windows10だけでよいことが分かりました。

参考

bootrec - Guide for Windows XP, Vista, 7, 8, 8.1, 10

uefi(http://hrn25.sakura.ne.jp/win/uefi/uefi.html)

対処3: ブート領域を再構築する

コマンド実行のドキュメント

以下、コマンド実行した時の標準出力の結果です。

  • Volume 0・・・Basic data partition
  • Volume 1・・・EFI System partition
  • Volume 2・・・WinRE partition
  • Volume 3・・・WindowsインストールUSBメモリー
  • Microsoft reserved partition(MSR)は既定により未フォーマットなので表示されません
  • ドライブ文字は K を割り当てた
CMD.EXE :
X:\Sources>diskpart
DISKPART>sel disk 0
DISKPART>list vol
Volume###  Ltr  Label     Fs     Type       Size    Status  Info
---------  ---  --------  ----   ---------  ------  ------  ------ 
Volume 0   C    m2win10  NTFS   Partition   232 GB  正常
Volume 1   	         FAT32  Partition   100 MB  正常     非表示
Volume 2   D	         NTFS   Partition   790 MB  正常     非表示
Volume 3   E    ESD-USB  FAT32  リムーバブル  28 GB  正常

DISKPART>sel vol 1
ボリューム 1 が選択されました。

DISKPART >assign letter=K
DiskPartはドライブ文字またはマウントポイントを正常に割り当てました。

DISKPART>exit
DiskPartを終了しています...

X:\Sources>cd /d K:\EFI\Microsoft\Boot\
X:\EFI\Microsoft\Boot>bootrec /fixboot
アクセスが拒否されました。

アクセスが拒否されたので Volume 1(ESP)を初期化するためフォーマットしました。

X:\Sources>format K: /fs:FAT32
ファイルシステムの種類は FAT32 です。
警告:ハードディスクのドライブ K: のデータは失われます。
フォーマットしますか(Y/N)? y
フォーマットしています	100.0 MB
ファイル アロケーションテーブル(FAT)を初期化しています...
ボリュームラベルを入力してください。(半角で 11文字、全角で 5文字以内)
必要なければ、Enterキーを押してください:
フォーマット完了しました。
96.0 MB		:全ディスク領域
96.0 MB		:使用可能領域
1,024 バイト	:アロケーションユニットサイズ
98,303 個	:利用可能アロケーションユニット
32 ビット	:FAT エントリ
ボリュームシリアル番号は 721D-30C2 です

X:\Sources>bcdboot c:\Windows /s K: /f UEFI
ブートファイルは正常に作成されました。

X:\Sources>bootrec /fixboot
アクセスが拒否されました。

まだアクセスが拒否されるので ブートセクターを更新しました。

X:\Sources>bootsect /nt60 sys
対象のボリュームは BOOTMGR 互換のブートコードで更新されます。
 K:(\\?\Volume[0a9f...65ff])
 FAT32 ファイルシステムのブートコードを正常に更新しました。
すべての対象ボリュームでブートコードが正常に更新されました。

X:\Sources>bootrec /fixboot
操作は正常に終了しました。

X:\Sources>bcdboot c:\Windows /s K: /f UEFI
ブートファイルは正常に作成されました。

X:\Sources>exit

下の画像(全3枚組)は最初の アクセス拒否 の後、最初からやり直した時の写真です。Bootディレクトリへ移動するコマンド cd /d K:\EFI\Microsoft\Boot\ は ESPを初期化したので使っていません。

PC電源オフ。満を持して電源入れるも Windowsは起動せず。ブートシステムは修復されているはずなのに Windowsは起動しない。

が、何か特別なことをしたわけでもないのに以下の経緯で起動しました。

  • PC再起動してみるが、やはり起動しない
  • WindowsインストールUSBから「スタートアップ修復」を実行するも失敗する
  • PC再起動し「スタートアップ設定」を開くと英語のメニューが表示される (2023.5 訂正)
  • PC再起動すると下記のように英語の Recovery メニューが表示される
Recovery
You PC couldn't start properly
after multipletries, the operating …
Error code: 0xc0000001
you'll need to use recovery tools. …

Press Enter to try again
Press F1 to enter Recovery Enviroment
Press  F8  for Startup Settings
Press Esc for UEFI Firmware Settings
  • F8キーを押して Startup Settingsメニューを表示する
  • そのまま暫く眺めていたら、タイムアウトで自動的に PC電源オフになる
  • PC電源オンするとなぜか Windowsは起動した
  • 以降、普通に起動するようになった

ボーっとしていたのでハッキリと覚えていませんが確かこんな流れだったと思います 残念ながら、なぜ起動できたのか理由は分かりません。

2023年5月、スリムPCを UEFIに変換 し同様のパーテイション変更をしたら上述の現象が再現した

2023年6月、メインPCを UEFIに変換し同様にパーテイション変更したが、この現象は起こらず通常起動した

下の画像は修復後のパーティション レイアウトとディスクの管理、システム情報のスクリーンショットです。

| EFIシステム | MSR | Windows10 | 回復 | 

cmd.exeコマンドプロンプト

コマンドプロンプト

換装後SSD 1のパーテイション レイアウト

ディスクの管理

Windows10 システム情報

システム情報

下の画像は修復後のマザーボード(ASUS PRIME B460M-K)の UEFI BIOS Utilityのスクリーンショットです。

起動優先順位と起動デバイスの第一位に Windows Boot Manegerが、第二位に SanDisk NVMe M.2 SSDが表示されています。

その後、特に不具合もなく正常に動作しています。なんだか釈然としない結末ですが当初の目的である Microsoft推奨パーテイションの作成 を達成したということで今回は良しとしましょう。

補足

下記はマウントした EFIシステムパーティションをアンマウントする DiskPartのコマンドです。

DISKPART >remove letter=K

参考までに。

▲ 目次へ

Windows RE のインストール

Windows RE を配置する回復パーティションは手動で作成しているのでその中に Windows RE のイメージファイル winre.wim はありません。それが置かれる C:ドライブに Windows.old ディレクトリもありません。

正常であれば winre.wim は

C:\Windows.old\$WINDOWS.~BT\Sources\SafeOS 

にあります。

コマンドプロンプトから reagentc.exe /info でステータスを確認すると勿論 Disabled(無効)になっており、有効にしようと reagentc.exe /enable コマンドを実行しても下の画像のように 「Windows RE イメージは見つかりませんでした」 が返ってきます。

今回 Windows RE をインストールした方法は「 Windows10 メディア作成ツールをダウンロードして Windows上で実行する」です。その際 ”個人ファイルとアプリを引き継ぐ” オプションにチェックを入れます。

これでシステムだけクリーンインストールされるため Windows RE もインストールされます。所要時間は 45分程度でした。

上記の方法を使う場合手動で作成した回復用パーティション内にレストアしたデータやその他のデータがあると新しい回復パーテイションが作られ、既存のパーテイションは消されず残ることになります。

なので空のパーテイションにするか、そもそも作らない方がよいと思いますがその場合パーテイションサイズが自動的に決まってしまいます。

尚、この方法は更新プログラムのアップデートのエラー時や Legacy BIOS を UEFI に変換する際のディスク検証コマンド mbr2gpt /validate /disk:0 /allowFULLOS を実行した際のエラー Cannot find OS partition(s) for disk 0 の解消にも有効でした。

参考までに。

▲ 目次へ

雑感

話は当ページの内容からずれてしまいますが、我が家のPCにおいて Windows11は他の OSとマルチブートしないことになりました。

これまで MBRパーテイションテーブルと MBM(Multipule Boot Manager)を組み合わせた 2段階ブートで Windows XP, 7, 10, Linux OS を一台のPCや一台のデバイスで行ってきました。

この組み合わせは、一度コツを覚えるとものすごく簡単で管理がとてつもなく楽なのです。

ここで言う「簡単に」とはOSを追加したり削除したりする度にブートファイル編集や NVRAM変数の整合性をとる必要がないことであり、メンテナンス性も含みます。

翻って UEFI/GPTブートシステムと SecureBootを調べていくにつれて、この環境下で同様のマルチブートを構築するのはものすごく煩雑で管理がとてつもなく難しいことが分かってきました。例えば英文の UEFI仕様書 を読み理解することなど。

これだとマルチブートのメリットがなく実用に耐えないのです。

単にマルチブートを構成するだけなら UEFI環境においても簡単です。ブートローダーに Windows Boot Managerか GRUB2を使えば最初だけは勝手にやってくれるのだから。問題はその後の管理なのです。

チェーンローダーに rEFIndブートマネージャー を使ったところでなにかしらの調整が必要になるはずです。例えば、OSカーネルがアップデートされる、Secure Boot を有効にしたいなど。

(NVRAMに登録しない方法があるようです
rEFInd|http://hrn25.sakura.ne.jp/win/refind/refind.html)

今後は Windows11, Legacy Windows, Linux OS それぞれ別個の専用機で運用していきます。ミニタワー型PCの製作は スリムPC自作機 のアップグレードに続く第二弾というわけです。

▲ 目次へ

クリエイティブ・コモンズ・ライセンス
Top of Pageの画像
sidemenuの画像