はじめに
VHDブートはサブとして使うか、サブWindowsがある上で運用しようね……!
VHDネイティブブート のみ でメイン運用していたため、Windowsの大型アップデートが適用できずに詰んだ/(^o^)\
状態から .vhdx
ファイルの中身を物理ディスクに展開することで解決できたので、その方法を残しておきます。
2018/08/19 仮想メモリの設定が初期化されることの追記
注意事項
- Windows PE を用意する
-
Windows Subsystem for Linux(WSL) はアンインストールしておく
- WSL 関連でイメージ作成時の処理が失敗するため
- 現状の
.vhdx
ファイルのバックアップをとる - Windows OSをインストールするディスクの既存パーティションは初期化する
作業準備
Windows PE ブートメディアの作成
管理者必携のトラブルシューティングツール「Windows PE 5.0」の起動用USBメモリを作成する (1/2) や Windows 10 用の Windows PE (WinPE) のUSBメモリセットアップ例 の記事を参考に作成する。
WSL バックアップ
WSL の環境をバックアップする。
要はルートディレクトリ以下を .tar.bz2
として固めてしまう。
やり方は WSLのバックアップを検討する の記事に書かれている通りにすればいい。
-
除外ディレクトリ設定ファイルの作成
WSL$ cat <<EOF > /mnt/f/exclude.txt > /mnt > /dev > /proc > /tmp > /sys > /run > /var/log > EOF
-
tar
コマンドで圧縮WSLsudo tar -cvpjf /mnt/f/WSLbackup/20180803-backup.tar.bz2 -X /mnt/f/exclude.txt /
WSL アンインストール
Windows設定の アプリと機能 からアンインストールしておく。
アンインストール後はPCを再起動し、Windows PE を起動させる。
Windows PE で作業開始
以下、Windows PE 上から操作していく。
-
.vhdx
ファイルを.wim
ファイルに変換 - ディスクのパーティション再構成
- 作成した
.wim
ファイルからディスクにWindowsインストール
変数設定
コマンド操作で用いるファルダ/ファイルパスをあらかじめ変数に設定しておく。
まずは現在認識されているボリュームのドライブ文字を確認。
echo list volume | diskpart
あとは dir
コマンドなどで次のパスについて位置を特定し、変数の設定を行う。
(.vhdx
ファイルのパス以外は、Windowsをインストールするディスクとは別のディスクないし外部メディアを指定すること)
-
.vhdx
ファイルのパス -
.vhdx
ファイルをマウントするフォルダパス -
一時保存用フォルダ(scratch)のパス
-
作成する
.wim
ファイルのパスcmdset vhdx=C:\path\to\windows.vhdx set mnt=E:\mount set scratch=E:\scratch set wim=E:\wim\win10-yyyy-mm-dd.wim
.vhdx
ファイルのバックアップ
作業を開始する前に現在使用している .vhdx
ファイルをバックアップしておく。
バックアップはコピーすればいい。
が、次のコマンドで .vhdx
から .vhd
ファイルへ変換してバックアップをとることもできる。
echo create vdisk file="F:\vhd\win10-yyyy-mm-dd.vhd" source=%vhdx% type=fixed | diskpart
容量可変にしたい場合は type=expandable
とする。
VHDX -> WIM 変換
.vhdx
ファイルを .wim
ファイルへ変換していく。
-
.vhdx
ファイルをマウントcmdmkdir %mnt% Dism /Mount-Image /ImageFile:%vhdx% /index:1 /MountDir:%mnt% /ReadOnly
Windowsイメージを
.vhd
ファイルからマウントする場合、index
は 1 にするべきらしい。 -
マウントしたイメージを
.wim
ファイルに変換cmdmkdir %scratch% Dism /Capture-Image /ImageFile:%wim% /Compress:max /CaptureDir:%mnt% /Name:"Windows-VHDX" /CheckIntegrity /Verify /ScratchDir:%scratch%
イメージ作成・展開時にデフォルト設定では一時保存領域が小さすぎて失敗する。
これを避けるため/Scratch
オプションを用いて一時保存フォルダを指定している。 -
.wim
ファイルが作成できたらアンマウントcmdDism /Unmount-Image /MountDir:%mnt% /discard
パーティションの再構成
Windows起動ディスクのパーティションを再構成する。
-
ドライブ文字 C の割当解除
C ドライブは後々Windowsイメージをインストールするパーティションに設定するため、ここで一度変更して解除する。
(このときR, S, X
は 割り当ててはいけない )cmd( echo select volume C: echo assign letter=T ) | diskpart
-
Windows起動用ディスクの番号を確認
cmd( echo select volume <Number> echo list disk ) | diskpart
-
Windows起動用ディスクをフォーマット
cmd( echo select disk <DiskNumber> echo clean echo convert gpt echo list partition ) | diskpart
-
各パーティションを構成
cmd( echo select disk <DiskNumber> echo create partition primary size=1024 echo format quick fs=ntfs label=Recovery echo assign letter=R echo setid id=de94bba4-06d1-4d40-a16a-bfd50179d6ac echo create partition efi size=512 echo format quick fs=fat32 label=EFI echo assign letter=S echo create partition msr size=16 echo create partition primary echo format quick fs=ntfs label=Windows echo assign letter=C echo list partition ) | diskpart
以上でパーティション再構成は完了です。
partition | 回復環境ツール | EFIシステム | MSR | Windows |
---|---|---|---|---|
Letter | R | S | -- | C |
WIMからDiskにインストール
-
.wim
イメージを作成したWindowsパーティションにインストールする。cmdDism /Apply-Image /ImageFile:%wim% /index:1 /ApplyDir:C:\ /CheckIntegrity /Verify /ScratchDir:%scratch%
-
ブートコーダーの設定
cmdbcdboot C:\Windows /l ja-JP /s S:
終わり
以上で必要な操作は終了です。
Windows PE を終了してPCを再起動しましょう。
ディスクにインストールされたWindowsが起動するはずです。
exit
お疲れ様でした。
(8/19 追記)
仮想メモリ(ページファイル)の設定が初期化されるみたいです。
なので [コントロールパネル] -> [システムとセキュリティ] -> [システム] -> [システムの詳細設定]
から設定の確認をし、必要ならば再度設定を行って下さい。
別ドライブにページファイルを移動していた場合はインストールしたWindowsではそれを認識しないので、一旦有効化してから削除してみてください。
-
あるドライブにおけるページファイルの有無を確認
管理者Get-ChildItem G:\ -Attributes Hidden -Filter pagefile.sys
また、休止状態 も有効化されているので不要であれば無効化してください。
powercfg /h off
powercfg /a
補足:UEFI/GPT パーティションの構成について
UEFI/GPT ベースのハードドライブパーティションを参考にする。
-
回復環境ツール パーティション
- 指定された
GUID
を設定する必要がある - 容量が足りない場合は勝手にパーティションが増設されてしまうので、あらかじめ多めの容量を確保したほうがいいらしい
最低サイズ 個人的推奨サイズ ファイルシステム ドライブ文字 GUID 300 MB 1024 MB NTFS R DE94BBA4-06D1-4D40-A16A-BFD50179D6AC - 指定された
-
EFIシステム パーティション
- 最低値だと大型アップデートのときにエラーが発生することがあるため多めに確保
最低サイズ 個人的推奨サイズ ファイルシステム ドライブ文字 100 MB 512 MB FAT32 S -
Microsoft予約 パーティション(MSR)
- 規定サイズの16MBを確保すればいい
- ドライブ文字は割り当てられない
最低サイズ 個人的推奨サイズ ファイルシステム ドライブ文字 16 MB 16 MB (自動) -- -
Windows パーティション
- Windows OS をインストールするパーティション
最低サイズ 個人的推奨サイズ ファイルシステム ドライブ文字 20 GB お好きに NTFS C
参考
- WSLのバックアップを検討する | concerti.tsukubaのブログ
- VHDXをVHDに変換する冴えてないやり方 | FNE.JP::とあるIT系脱求職者の日記(仮称)
- Windowsのバックアップと復元にはDismを使う | バグのある生活
- Windowsのdiskpartコマンドでディスクのパーティションを操作する (1/3) | @IT
- コマンドプロンプトを使ってWindows 10のパーティションをカスタマイズしてクリーンインストールする | vorfee's Tech Blog
- DISM イメージ管理のコマンドラインオプション | Windows 10 hardware dev
- UEFI/GPT ベースのハードドライブパーティション | Windows 10 hardware dev
- Windows パーティション、システム パーティション、回復パーティションのキャプチャと適用 | Windows デベロッパーセンター