Windows10 IP on VMware PlayerをKVMに移行

#移行の背景
　VMware Playerでの仮想化環境には満足していましたが、ハイパーバイザー型の仮想化環境を学習するためには実際に手を動かして理解したいと思いました。

#環境
実機は自宅PC(Lenovo Think Station E30)です。
<ul>
<li>CPU:Core i3</li>
<li>RAM:8GB</li>
<li>OS:Ubuntu 14.04 LTS Desktop 64bit</li>
<li>仮想化ソフト:VMware® Workstation 12 Player(Ubuntu用には日本語版がないので英語版を入れています)</li>
</ul>
```Windows 10 x64.vmx
(snip)
uuid.bios = "xx xx xx xx xx xx xx xx-xx xx xx xx xx xx xx xx"
(snip)
ethernet0.generatedAddress = "yy:yy:yy:yy:yy:yy"
(snip)
```
#移行作業
##「Windows10が正常に起動しない」から「なんとか起動できる（アクティベーションなし）」まで
```bash:history1
sudo apt-get install virt-manager
sudo apt-get install cpu-checker
sudo kvm-ok # OKでした
sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils
qemu-img convert -f vmdk "~/vmware/Windows 10 x64/Windows 10 x64.vmdk" -O raw ~/kvm/raw.img
sudo adduser $USER libvirtd #libvirtdグループに入っていないというエラーのために入力しましたが解消せず。PC再起動で解消できました。
#ここで仮想マシンマネージャーで新しい仮想マシンを作成し、ネットワークアダプタのMac Addressを上記のものとし、既存のディスクイメージ(~/kvm/raw.img)をインポートして仮想マシンを実行しました。
#SYSTEM THREAD EXCEPTION NOT HANDLEDと表示されて正常起動できませんでした。
#"https://ubuntuforums.org/showthread.php?t=2319541"を参考にしてCPUをCore2Duoにしたら正常起動できました。
#でもアクティベーションされていない状態でした。
```
##「Windows10が正常に起動（アクティベーションあり）」まで
```bash:history2
sudo vim /etc/libvirt/qemu/windows10.xml #上記uuidに書き換えようとしましたがなんかエラーが出て変わらない
sudo virsh define /etc/libvirt/qemu/windows10.xml #やっぱり「ドメイン定義に失敗しました」というエラーが出ました
virsh undefine windows10 #ドメインがすっぱりと消されてしまい、仮想マシンを作りなおす羽目に。
virsh define /etc/libvirt/qemu/windows10.xml
sudo vim /etc/libvirt/qemu/windows10.xml
virsh define /etc/libvirt/qemu/windows10.xml
#ここでsudo cp /etc/libvirt/qemu/windows10.xml ~/とかsudo chmod 666 windows10.xmlとかしたはず
virsh edit windows10
sudo chmod 666 windows10.xml
#どうしても書き換えられず
#結局windowsという名前の仮想マシンを新たに作ってvirtsh editして保存かつ終了,sudo virsh defineしたらうまく行きました。
#virtsh editはデフォルトではVimが起動するので、Vimに慣れていない人はシェル上でexport EDITOR=/usr/bin/nanoのようにすればよいようです。
```
```windows.xml
<domain type='kvm'>
  <name>windows</name>
(snip)
  <uuid>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</uuid>
(snip)
    <model fallback='allow'>core2duo</model>
(snip)
      <mac address='yy:yy:yy:yy:yy:yy'/>
(snip)
```
##VirtIO用のドライバをWindowsに入れる
VMware Player上より動作が重い感じがするので、VirtIO用のドライバを入れることにしました。
これは「<a href="http://thaim.hatenablog.jp/entry/2015/08/13/230000">KVM上のWindowsでVirtIOを利用する</a>」のとおりに作業しました。
ハードディスクのドライバの入れ替えは結構苦戦して正常起動できなくなるなどしました。Windowsの知識が必要だと思いました。
作業で他に行ったことといえば、仮想マシンの詳細画面で「仮想ネットワークインターフェース」の「デバイスモデル」をハイパーバイザーのデフォルトからまずe1000にしてWindowsにNICドライバを読み込ませたことでしょうか。その後にVirtioにして、ドライバーソフトウェアの更新を行いました。

##帯域制限
Windows Updateのために帯域を全て食いつぶされることを避けるため、1Mbpsに制限しました。
virsh edit windowsで下の矢印で挟まれた部分を挿入
```windows.xml
    <interface type='network'>
      <mac address='yy:yy:yy:yy:yy:yy'/>
      <source network='default'/>
↓
      <bandwidth>
        <inbound average='128' peak='128' burst='128'/>
        <outbound average='128' peak='128' burst='128'/>
      </bandwidth>
↑
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
```
sudo virsh define /etc/libvirt/qemu/windows.xml
ここではvirsh edit(Vim)で直接仮想マシンのxmlファイルを修正しましたが、仮想マシンのリソース割り当ては<a href="http://enakai00.hatenablog.com/entry/2015/05/11/101429">RHEL7/CentOS7のLinux KVMリソース割り当て機能</a>のように行うのが本筋ではないかと後から思いました。