Windows10をP2VしてKVMで動かす

MacBookAir2011Midに以前Windows10 64bitをUEFIで起動させるように試みたが、IntelGraphicsのドライバ不適で使い物にならなかった。
とはいってもこの機体でWindowsを使いたくなったので、Windows10 64bit on Xubuntuという構成でできないか、試してみた。

P2V

Windows10側でVHDX(仮想ディスクイメージ)ファイルを生成する。
VHDX化したいOSを起動したままでよいので、sysinternalsからDisk2Vhdをダウンロード、実行しVHDXファイルを生成する。

VHDXをRAW形式に変換

KVMで利用できる仮想ディスクファイル形式に変換する。
圧縮は利かないがパフォーマンスはいいRAW形式(.img)を今回は選んだ。

apt-get install qemu-kvm virt-manager

qemu-img convert -f vhdx -O raw ./win10_64.vhdx ./win10_64.img

RAW形式の仮想ディスクファイルの圧縮

不要なパーティションの削除

どうやらRAW形式にすると、もともとのHDDのサイズ、もともとのパーティション構成でファイルが生成されてしまうようだ。
(例えば、300GBのHDDでCドライブとDドライブを100GB、残りを未定義として分けていたところでCだけをDisk2Vhdしても、生成されるファイルは300GBでDドライブもパーティションだけ定義されてしまう)

user@locahost:~$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 298.1G  0 loop 
├─loop0p1 253:0    0   100M  0 part 
├─loop0p2 253:1    0   100G  0 part 
└─loop0p3 253:2    0   100G  0 part

そのため必要に応じて、仮想ディスクファイル内の不要なパーティションを削除する。

# 必要なツール
sudo apt-get install libguestfs-tools kpartx

_loopdevice=$(losetup -f)

# パーティションテーブルの修正
sudo losetup ${_loopdevice} ./win10_64.img
sudo kpartx -av ${_loopdevice}

fdisk ${_loopdevice}
# 適宜必要な作業を行う。
# 例えばDドライブ(パーティション番号3)を削除するなら
#   d
#   3
#   w
# する。

# 変更の反映
sudo kpartx -d ${_loopdevice}
sudo losetup -d ${_loopdevice}

参考:https://docs.openstack.org/ja/image-guide/modify-images.html

修正が終了するとこんな感じ。

user@localhost:~$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 298.1G  0 loop 
├─loop0p1 253:0    0   100M  0 part 
└─loop0p2 253:1    0   100G  0 part 

DDでイメージの再作成

上記のままだとls -lして見えるファイルサイズは依然もともとのHDD全体の容量になっているので
(対処方法は他にもあるんだろうけど)ddでイメージの取り直しを行うことで、これを解決する。
参考:https://wiki.vpsget.com/index.php/How_to_shrink_raw_qemu_/_kvm_images

_loopdevice=$(losetup -f)

sudo losetup ${_loopdevice} ./win10_64.img
sudo fdisk ${_loopdevice}
# p を入力し、セクタサイズと最後のパーティションの最後の位置を覚えておく

# 例
# コマンド (m でヘルプ): p
# ディスク /dev/loop0: 298.1 GiB, 320072933376 バイト, 625142448 セクタ
# 単位: セクタ (1 * 512 = 512 バイト)
# セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
# I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
# ディスクラベルのタイプ: dos
# ディスク識別子: 0xb410f68a
# 
# デバイス     起動  開始位置  最後から    セクタ サイズ Id タイプ
# /dev/loop0p1 *         2048    206847    204800   100M  7 HPFS/NTFS/exFAT
# /dev/loop0p2         206848 209919999 209713152   100G  7 HPFS/NTFS/exFAT
# /dev/loop0p3      209920000 419635199 209715200   100G  7 HPFS/NTFS/exFAT
#
# →この場合、size=512と、lastsector=419635199
sudo losetup -d ${_loopdevice}

_size=512
_lastsector=419635199
((_count = _lastsector + 2))

dd if=./win10_64.img of=./win10_64_shrinked.img bs=${_size} count=${_count}

ls -l ./win10_64_shrinked.img

KVMで起動

上記で生成したimgファイルをストレージとした仮想マシンを生成し、起動する。
通常のKVMの設定で問題ないが、CPUのモデルはもともとP2Vしたマシンのものを引き継ぐと吉。
引き継がないと、構成が大幅に変わったとしてライセンス認証を再度求められる。

MacBookAir2011MidはCPUが第二世代Core i5でメモリも4GBしかないので、サクサク動くとは言い難いが
KVMのチューニングをすれば、なんとか。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です