mmm spot

好きで語ろうインターネッツ

Windows10のクローンバックアップとHDD交換【dism / UEFIブート】

こんにちは、amumaです。

最近自宅で使っているPCのSSDが使用時間も多くなってきているので、壊れる前に新しくしようということになり交換をしました。
その時にWindowsの再インストールをしたり、データをバックアップしたり、ソフトの再インストールをしたりと面倒臭いのでいっそのことdismを使ってクローンを取ってしまおうということで少しやってみました。

今回はその時の備忘録です。基本的にMicrosoft Docsを参照しながら作業を進めました。

前準備

  • 新しいHDD/SSD(そらそやろ)
  • Windows PEディスク(インストーラでOK、バージョンを合わせること。)
  • 外付けHDDなど記憶媒体(クローンを取りたいシステムディスクの容量が充分に収まるもの。NTFSフォーマットが望ましい。)
  • パーティション区切る用のスクリプトファイル(手動でももちろんいいので任意。テキストファイル。記述内容は後述。)
  • クローン適用のためのbatファイル(スクリプト同様任意。こちらも内容は後述。)

全体のフロー

  1. PEで起動。dismを使ってシステムボリュームをキャプチャ(クローン)。
  2. HDD(SSD)交換
  3. PEで起動
  4. パーティション作成
  5. クローン適用
  6. 起動確認

クローン作成

普通にPEディスクなりインストーラなりで起動。インストーラの場合Shift + F10でコマンドプロンプトを立ち上げる。

f:id:amuma5:20190906151726j:plain
インストールよりcmd立ち上げの方がよく使う機能説ある

立ち上がったらまずはボリュームを確認。必要なのはキャプチャしたいシステムディスクとキャプチャデータの保存先(外付けメディア)のボリュームレター。

diskpart
list volume

ここで仮にシステムディスクをc:、外部PEディスクをd:、外付けメディアをe:とする。
確認できたら実際にキャプチャを行う。キャプチャしたwimファイルの名前はここでは'testenv.wim'とする。

dism /capture-image /imagefile:"e:¥testenv.wim" /capturedir:c/name:testenv /checkintegrity

これで実行。ラベルを間違えないように気をつける。あとはキャプチャが始まり、しばらくしたらwimファイルが外付けメディアの直下に保存されているはず。。
/checkintegrityはキャプチャデータの真正性を確認するオプション。時間もかかるので任意。
正常に終わっていることを確認したら電源を切って新しいHDDなりSSDに交換する。

クローンの展開

新しいディスクに換装できたら実際にクローンの展開を行っていく。まずは外部PE起動。
ひとまずdiskpartとかでdisk0に新しいディスクが認識されているか確認。確認は大事。

まずはパーティションを区切る。ここの作業はめちゃ重要で、間違えたら起動しないことにも繋がるので注意して行う。必要なコマンドが多いので下にあるスクリプトを使用する手法を推奨する。

diskpart
select disk 0
clean
convert gpt
create partition efi size=100
format quick fs=fat32 label="System"
assign letter="S"
create partition msr size=16
create partition primary 
shrink minimum=500
format quick fs=ntfs label="Windows"
assign letter="W"
create partition primary
format quick fs=ntfs label="Recovery tools"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
list volume
exit

ちなみにMS Docsではこの過程をスクリプト化している。もしスクリプト化する場合、下記コマンドを丸々コピペしてtxt形式でPEメディア内に保存しておく。

select disk 0
clean
convert gpt
create partition efi size=100
format quick fs=fat32 label="System"
assign letter="S"
create partition msr size=16
create partition primary 
shrink minimum=500
format quick fs=ntfs label="Windows"
assign letter="W"
create partition primary
format quick fs=ntfs label="Recovery tools"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
list volume
exit

diskpartにおいてスクリプトの実行には /s オプションを使用する。仮にスクリプトのテキストファイルが'createpartitions-UEFI.txt'だった場合、実行するコマンドは

diskpart /s d:¥createpartitions-UEFI.txt

となる。

一応’list vol’コマンドとかでちゃんとパーティションが区切られていることを確認できたらクローンの展開を行う。
それぞれのボリュームレターは上記コマンドで割り振ったものを前提とし、インストールメディアを上と同じくd:、外部メディアをe:とする(おそらく実際はc:などが振られている)。

クローンの展開はdismコマンドを使用する。以下のコマンドを順に実行していけばよい。こちらもコマンドの下にbatスクリプトについて書いたので、スクリプト化した方が楽だし安全。

powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
dism /Apply-Image /ImageFile:e:¥testenv.wim /Index:1 /ApplyDir:W:\
W:\Windows\System32\bcdboot W:\Windows /s S:
md R:\Recovery\WindowsRE
xcopy /h W:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
W:\Windows\System32\Reagentc /Setreimage /Path R:\Recovery\WindowsRE /Target W:\Windows
W:\Windows\System32\Reagentc /Info /Target W:\Windows

スクリプト化するなら以下。ここでbatファイルの名前は'Applyimage.bat'とし、PEメディアの直下(d:¥)に置くものとする。

call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\
W:\Windows\System32\bcdboot W:\Windows /s S:
md R:\Recovery\WindowsRE
xcopy /h W:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
W:\Windows\System32\Reagentc /Setreimage /Path R:\Recovery\WindowsRE /Target W:\Windows
W:\Windows\System32\Reagentc /Info /Target W:\Windows

スクリプトの実行にはbatファイルに対してwimファイルを引数として渡してあげる必要がある。以下のような形で実行する。

d:¥applyimage.bat e:¥testenv.wim

正常にコマンドが終了したら再起動してみる。正常に終わっていればこれで新しいHDD/SSDWindowsの環境は移しかえられて起動できるようになっているはず。
場合によっては初回起動時のみchkdskなどが走る可能性があるが、気長に様子を見ておく。

また自分の場合、回復環境がなぜか正常に展開することができなかった。まぁこれができている時点でPEメディアなりインストールディスクを持っているのでローカルの回復環境は必要ないと思うが。自分はEFIパーティションとシステムパーティションしか置いていない。

終わり。