るなおーびっと!

不良セクタが発生したので EFI システム パーティション と Windows RE を移動させてみた

2018/04/25 13:17 投稿

  • タグ:
  • Windows
  • PCトラブル
  • HDD

先日停電がおきまして、新しく組み上げた PC の HDD に不良セクタが発生しました。
不良セクタに対して対処するのは、これで2度目の経験。(自身が所持するものに限る)

運用してそんなに日がたっていなく大切なデータなどはない。そして HDD の様子を見るにヘッダやモーターが壊れているような感じではなさそうなのでガンガンしばき倒して代替処理をさせてしまおうとしていろいろ試行錯誤した結果、HDAT2 を使用するのが一番だということにたどり着きました。

最初は HDAT2 のために ブータブル USB を用意するのが面倒くさくて Windows 上で動くスキャンツールを見つけて、サブPC に問題の HDD を接続してスキャンさせたり、chkdsk を使用したりしましたが、いずれもうまくいかなかった。(途中原因不明のエラーが発生して完走しない、HDD にアクセスしている様子がなくいつまでたっても進まない状態になるなど)
で、結局 HDAT2 を使ってみたらそれまでの苦労が嘘みたいにすんなりスキャンが完了しました。
ちなみに、若干深刻な状態になっていたみたいで、数回 HDAT2 を走らせてようやく代替処理が全部完了しました。


ここからが本題、HDAT2 のレポートを見ると、先頭のほうで不良セクタがよく発生していることが分かったので、EFI システム パーティション と Windows RE パーティション を後方へ移動してみることにしてみた。

作業の流れとしては以下の通りです。
・Windows RE を無効にする
・Windows 10 セットアップメディアでブートする
・DiskPart で Windows パーティションを縮小する
・DiskPart で空き領域に EFI システムパーティションと Windows RE パーティションを作る
・DiskPart でパーティションをフォーマットする
・DiskPart で適当なドライブレターを割り当てる
・DiskPart で最初から存在しているほうの EFI と Win RE パーティションを削除する
・BCDBoot でブート可能な状態にする
・Win RE パーティションに Winre.wim を配置
・Win RE を有効化
・DiskPart で割り当てたドライブレターを削除する

本当なら Windows パーティション の先頭の位置も後ろへずらしたいところだが、Windows だけの機能ではそれはできないのでパスすることにした。MSR もややこしそうなんで触らないことにした。


実際に後方へ移動させてみた図

Windows を起動させた状態でもできなくはないが、パーティションを縮小するときに、そのパーティションの後方に移動できないデータが存在していると縮小に失敗するので、Windows PE から操作するのが確実です。
今回自分は USB ブート の Windows セットアップ メディア を用意して作業をしました。

ちなみに、Windows RE に必要なパーティションのサイズは以下の通りです。
Windows 8.1 350MB
Windows 10 バージョン1507 ~ 1709 450MB
Windows 10 バージョン1803 500MB (2018年5月に配信予定のバージョン)
この通りどんどんサイズが大きくなっているので大きめにとってもいいかもしれないが、今回は 500MB とした。

EFI システム パーティションは基本的に 100MB。4kn(4Kネイティブ、Advanced Format 4Kn)ドライブの場合は 260MB。

以下の作業について Windows ボリュームは C: ドライブ、システムドライブのディスク番号が0、パーティション構成は先頭から WinRE(1)、EFI(2)、MSR(3)、Windows(4)の場合です。DiskPart の list volume、list disk、list partition を駆使して確認しておきましょう。

DiskPart で作業する前に Windows RE を無効にします。
これをやっておかないと Winre.wim が C:\Windows\System32\Recovery に戻らず削除されてしまいます。Winre.wim が消失した場合は後述。
reagentc /disable

DiskPart
Windows パーティションの選択
select disk 0
select partition 4

Windows パーティションの縮小
shrink desired=600

EFI システムパーティションの作成
create partition efi size=100
format fs=fat32 quick
assign letter=S

Windows REパーティションの作成
create partition primary
format quick fs=ntfs
assign letter=R
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001

先頭にある既存の EFI システムパーティションと Windows RE パーティションの削除
select partition 1
delete partition override
select partition 2
delete partition override

format コマンドにはラベルを付けるオプションがあるが、ラベルは付けなくてもいいです。
ちなみに Windows セットアップ メディア にお任せして作られた Windows RE パーティション は「回復」というラベルがつけられるが、DiskPart は日本語のラベルを付けることはできません。
そのため、分かりやすくラベルを付けるとしたら「Recovery」や「Windows RE」などと付けたらいいでしょう。

BCD ブートファイルの作成
bcdboot C:\Windows /l ja-jp /s S: /d
/d は既存する Windows ブートエントリーを保持するオプション。EFI システムパーティション を一度削除して新規に作成しようとしているのだから不要かもしれないが付けていても不都合はないはず…

Windows RE の再設定
md R:\Recovery\WindowsRE
xcopy /h C:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
reagentc /setreimage /path R:\Recovery\WindowsRE /target C:\Windows
reagentc /enable
EFI システムパーティションが一度消えているので明示的に reagentc /enable しなくてもいいかも?でも有効になっている状態で reagentc /enable をやったところで不都合はないのでやったほうがいいかも…

DiskPart でドライブレターを削除
※一度 DiskPart を終了するとパーティション番号は並び順の通りになる。MSR(1)、Windows(2)、EFI(3)、WinRE(4)
select disk 0

select partition 3
remove letter=S
select partition 4
remove letter=R

これですべて完了です。

Windows RE を無効にせずにいきなりパーティションを削除してしまった場合
セットアップメディア内の install.wim から Winre.wim を抽出します。
※セットアップメディアのボリュームが D: の場合

WIM ファイルの情報を取得し、該当する Windows 10 のバージョンのインデックス番号を調べる
dism /Get-ImageInfo /ImageFile:D:\sources\install.wim

reagentc /disable
md C:\mount
dism /Mount-Image /ImageFile:D:\sources\install.wim /MountDir:C:\mount /Index:1 /Readonly /ScratchDir:C:\Windows\Temp
xcopy /h C:\mount\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
reagentc /setreimage /path R:\Recovery\WindowsRE /target C:\Windows
reagentc /enable
dism /Unmount-Image /MountDir:C:\mount /Discard
rd /s /q C:\mount


コメント

コメントはまだありません
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事