Windowsシステムドライブを4Kネイティブ化

NVMe SSDの大半は4KBの物理セクタをもっていながら512Bセクタをエミュレート(512e)している。4KBセクタのHDDが出てきた当初(2009年頃?)にAFTとして話題になりWindows8以降は4Knに対応している事から過渡期のテクノロジーとされてきたわけだが、いつまで経っても過渡期のまんま。4Knのドライブがエンタープライズ向けばかりで寂しいなんて思ってたら実は身近にあって使われいないだけだったなんて。

4Knしようよ!

UEFI Secure Erase

最近のマザーボードではUEFI上でSSDをSecureErase出来る機能があり、それを用いてNVMe SSDを4Kネイティブ(4Kn)動作に切り替える事が出来るという事を最近になって知ったが、あまりにも簡単すぎて使わない手はないという事でやってみようと思う。

こんな素晴らしい機能がある事に気付くのに随分と時間がかかったわw

Linuxでやる方法もあるけど、こりゃ簡単すぎる。

デメリットそしてメリット

引っ越しが面倒くさい

4Knをサポートしないストレージドライバを使用したいなどの事情がない限り敢えて512eモードのまま使い続ける意味はないが、512eから4Knあるいは4Knから512nなど異なる論理セクタサイズ(エミュレートを含む)を持つドライブ間ではセクタ・バイ・セクタクローンをするようなツールが使えないという、微妙に面倒くさいデメリットというか、ちょっとした障壁がある。

パフォーマンス向上

その一方で512eでの読み書きに必須なRead-Modify-Writeという動作が4Knでは行われず、より効率的な読み書きがされるようになるというメリットがあって、微々たる物であろうがパフォーマンス向上と動作温度の低下さらには寿命の延長が見込まれる。

微々たるメリットだとしてもタダでやれるなら自作erとして見過ごせない。

ベストなクラスタサイズには諸説ありSSDのページサイズ(16KBとか)に設定すると尚のこと良いらしいが、システムパーティションには16KB未満のファイルが無数にあるんで悩ましいところだ。

まあ、新規でPCを組んでWindowsをクリーンインストールするのなら最初から4Knでやれってこった。

とりあえずやってみる

現状のシステムドライブのパーティション構成はこのようになっている。

C:をバックアップしてからSSDを4Kn化し、パーティションの再構成とC:の復元をやっていく。

いずれ4Knドライブにクローンする時が来るであろうと前もってEFIパーティションを260MBとしていたが、クローン出来ないんじゃ意味なかった。

4KnのドライブではFAT32の制約※により260MBのEFIパーティションが必要
※FAT32パーティションの最小セクタ数65527×4096≒256MBなんだけど実際に試すと260MB以上でないとFAT32でフォーマット出来なかった

Windowsパーティションのバックアップ下準備

512e動作から4Kn動作への切り替えにはSecureEraseをかける必要があり当然ながらデータが消えるので、環境を維持したければ必要に応じてバックアップと復元の操作が必要になる。

セクタバイセクタでのクローンは出来ないので、ファイルベースのツールを使うことになるんだけど、マイクロソフト謹製の展開イメージのサービスと管理 DISM.exeがめちゃくちゃ便利でファイルベースはもちろんのことセクタベースでのバックアップ・復元も出来て便利だ。なんといってもタダだし。

Winre.wimの退避

以前にシステムドライブのパーティションを整理した際に回復環境を再構築するのが面倒だったので退避を忘れずに。

reagentc /disable

これでWinre.wimはC:\Windows\System32\Recovery\に退避される

WSLの無効化

バックアップ・復元にDISMを使うが、WSLがあると変なエラーが起こる事があるので使用していたなら事前にバックアップとアンインストールおすすめ。

DISMでC:のイメージバックアップと復元

バックアップ

USBメモリなどからWinPEをブート(たぶんインストールメディアでも行ける)して、コマンドプロンプトから操作する。

例:USBブート後のテンポラリドライブのドライブレターがF:、イメージの保存先ドライブがE:、Windowsが入ってるパーティションのドライブレターW:の場合

md F:\temp
set TEMP=F:\temp
Dism /Capture-Image /ImageFile:E:\My_Windows.wim /CaptureDir:W:\ /Name:My_Windows /Compress:fast /CheckIntegrity /Verify /ScratchDir:F:\temp

復元

USBメモリなどからWinPEをブート(たぶんUSBインストールメディアでも行ける)して、コマンドプロンプトから操作し、Secure Eraseで4Kn化したドライブにパーティションを作っていく。

例:USBブート後のテンポラリドライブのドライブレターがF:、イメージの保存先ドライブがE:、C:が既に他のドライブに割り当てられている場合

md F:\temp
set TEMP=F:\temp
DISKPART
select volume c:
assign letter=g
list disk
select disk <ターゲットのドライブ番号>
clean
convert gpt
list part
select part <勝手に出来てる(はず)のパーティション番号>
delete part override
create partition EFI size=260 offset=1024
format quick fs=fat32 label=ESP
assign letter=z
create partition MSR size=16
create partition primary size=2048
format quick fs=ntfs label=WinRE
set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
gpt attributes=0x8000000000000001
create partition primary
format quick fs=ntfs label=Windows
assign letter=c
exit
Dism /Apply-Image /ImageFile:E:\My_Windows.wim /index:1 /ApplyDir:C:\ /CheckIntegrity /Verify /ScratchDir:F:\temp
bcdboot C:\Windows /l ja-jp /s z:

回復パーティションは要らんというのなら作らなくて良いけど、Windowsパーティションより前の位置に作りたくなる可能性があるなら今作っておいた方が良い。

USBメモリを外してリブートすれば完了!

論理セクタと物理セクタそしてクラスタサイズが揃っていると気持ちが良いな。特にトラブルもなく快調で読み書き中の温度が少し下がった気がする。

コメント

タイトルとURLをコピーしました