EFI パーティションが完全に壊れて BOOT 出来なくなったら


年度末、安価に調達した
新ノート PC に標準搭載されていた SSD は容量が 256 GB と不十分であり、
1TB NVMe SSD に交換すべくクローン作業していたところ、
誤って EFI BOOT パーティションを削除してしまって、
Windows 10 が全く立ち上がらなくなってしまった。

この記事では、
そんなうっかりさんのほか、
歴戦の SSD が大事なところを負傷してしまった場合などで
もしかしたら復旧できるかもしれない、
そんな方法を備忘録代わりにまとめてみた。



前提 1. Windows 系 OS ( ここでは特に、Win10 )
前提 2. ブートセクタが完全に壊れていて、RAW 状態。
前提 3. 元々は正常に起動していたため、パーティション容量は正規の状態。



手順 1. Windows のインストールメディアを準備する。
     ( Win10 の場合、USB が便利。Win 7 なら DVD か )
手順 2. インストールメディアを BOOT してシステムの復元機能に入り、
     コマンドプロンプトを起動する。
手順 3. DISKPART を起動する ( コマンド : diskpart )
手順 4. DISKPART > list volume を入力し、Volume 情報を閲覧する。
手順 5. もともとブートセクタがあったと思われる Volume を特定する。
     フォーマットが FAT32 となっていて、容量 200 MB 位なら怪しい。 
     フォーマットが崩れて RAW になっている場合も ( ウチの場合 )。
 
※ 以降の手順は、しくじるとお陀仏。慎重に実行すること!
 ※ FAT32 のパーティションがブートセクタの場合、後はググってよろしく。
     以降の手順をやると多分復旧できますが、確かめて無いので分かりません。

手順 6. RAW partitino を、 FAT32 にフォーマットする。
     以降、Volume 1 が当該パーティションだったとし、ラベルを E とする。

     DISKPART > select volume 1
           DISKPART > assign volume 1 e:
           DISKPART > format fs=FAT32 quick

手順 7. format 後に、list volume で
           Volume 1 が FAT32, ラベル e になっているかを確かめる。
     OK であれば、exit で DISKPART を抜ける。

          DISKPART > list volume
          DISKPART > exit

以下、MBR or GPT で内容が異なる。

手順 8. 空っぽの FAT32 パーティションに移動して、BOOT ディレクトリを作る

     cd /d e:\
           e:\mkdir boot (MBRの場合)    
           e:\mkdir efi\microsoft\boot (GPTの場合)    

手順 9. OS システム領域からブートデータをコピーする。
           OS パーティションはラベル c の volume にあるとする。

( GPT の場合 )

           e:\bootrec /Rebuildbcd
           e:\bootrec /fixboot
           e:\bcdboot c:\Windows /l ja-JP /s e: /f ALL

( MBR の場合 )

     この神サイトの、下の方、「bcdの削除と再作成を行う」を参照。


この手順 9. が成功すれば、
GPT, MBR ともに正常復帰できており、
次回以降に OS を正常 BOOT 出来るはずである。



以下、ちょっと解説。

OS が入っているストレージ ( HDD, SSD ) には、
もれなく BOOT ( OS を起動すること ) のために
必要になるデータを貯めておく場所が存在する。

この BOOT のためのデータは
ブートローダと言うマザーボードに実装された基本機能によって
読み取り・順次実行され、OS が起動する。

従来、ブートローダは BIOS に実装されており、
ブートデータを保存する場所 = ブートセクタとして、
Master Boot Record ( MBR ) が主流であった。

一方で、近年では UEFI という統一規格ブートローダが主流になっている。
UEFI におけるブートセクタは
EFI システムパーティションと呼ばれ、
これには GUID Partition Table ( GPT ) が標準的に採用される。


要は、一般の OS において、
MBR, GPT のいずれかの領域にダメージを与えれば
たちまち OS は起動不能になるし、
悪意のある改ざんをすることで、
想定外の働きをいとも簡単に実行してしまうのだ。

よって、一般に
ブートセクタ領域は書き込み不可の領域として
ユーザーは操作できないようになっている。
このことは、安全面で見て必須ではあるが、
一方でこれを普通にはコピーペーストできないことが
HDD, SSD 引っ越しの大きな障害の一つとなっている。



MBR または GPT の内容を含めて、
全てのシステムデータを新規 HDD, SSD に移行するための
もっとも単純なやり方は、
コピー元のデータを 1 から順に 1 つずつ
まるまるコピーしてしまうやり方であり、
セクタ・バイ・セクタ方式と呼ばれる。

この方法では、
まさしく物理的にクローンを作っているに等しい。
このやり方は時間が掛かってしまう上に、
途中で失敗したら一巻の終わりで、
コピー先の最大容量が元より小さい場合は実行できない
などなどいくつも欠点があるが、
それでも実行できた暁には動作はほとんど保証されてると言って良い。


これとは別に、
ストレージのクローン専用に開発された
特殊な OS ( Unix 系が主 ) を用いて、
その特殊 OS 上でソフトウェア的にクローンを作成する場合もある。

このやり方では、
各パーティション毎のデータがそれぞれ整列して連続記入できるため、
デフラグ的な観点からは都合が良いと考えられる。
また、コピー先の最大容量が元より小さいが、
コピーしたいデータ自体はそれより小さい場合には、
パーティションを区切ることで問題無くクローン出来る

このため、HDD → SSD でのクローンは、
このソフトウェアクローンが多く利用される。



今回、ウチもこのソフトウェアクローンを使った。
ただし、今回はなぜか
いつも使っている EaseUS が BOOT 出来なかったので、
慣れない別のでやった。
これが間違いだった。
操作ミスかなんなのか良く分からないが、
誤ってクローン元の SSD を削除してしまったのだ。

結果、EFI partition だけがまるまる無くなって他は無傷の
ナゾ過ぎる SSD ができあがった。

正直、あせった。

税金で調達して、即破壊は流石に笑えない。
懲戒免職が近づいてしまう。
だから、必死で復旧方法を調べたが、
Google 先生がいぢわるで教えてくれない。

結果、やけくそのダメ元で
mkdir で boot フォルダ作ってコピーしたら、
奇跡的に出来ちゃったという話。
いやぁ、諦めずに、やってみるものだねぇ。
めでたしめでたし。