元々はWindowsが入ってたノートパソコンにLinuxを入れて使っている場合、元々入ってたWindowsを仮想マシンなどで使いたいといった場合がある。 Windows 7とかだとPCに貼ってあるシールのライセンスを使えばとりあえず利用できたのだけど、Windows 10の場合はOEMライセンスとしてインストールされているので、ライセンスシールが貼ってなかったりする。

で、なんか方法無いのかなと調べてみたところ、どうやら仮想マシンのハードウェア情報を一部いじれば実現できそうだということがわかった。

Windows 10のOEMライセンスの場合、ハードウェアのBIOSにあるMSDMテーブルという領域からライセンスキーを読み出してアクティベーションしているため、その領域からキーを抜き出して仮想マシンのBIOSに登録してやればいいということだ。 というわけで早速やってみよう。今回、仮想マシンはKVMを利用する。(デスクトップLinuxでVritualBoxは、よほどの理由がない限りはわざわざ選択しなくてもいいだろう…(´・ω・`))

1. PC本体のBIOSからライセンス情報(MSDM)を取得する

まずは、PC本体のBIOSからライセンス情報の取得をする。 Linuxがインストールされている前提となるので、どのディストリビューションでも以下のコマンドで取得ができるだろう。

sudo tail -c +56 /sys/firmware/acpi/tables/MSDM
$ sudo tail -c +56 /sys/firmware/acpi/tables/MSDM
XXXXX-XXXXX-XXXXX-XXXXX-XXXXXX

このファイルを、別途テキストに書き出しておく。

sudo cat /sys/firmware/acpi/tables/MSDM > /path/to/dir/msdm.bin

2. 仮想マシンのBIOSにMSDMの情報を登録する

次に、仮想マシンを作成して、そのBIOSにMSDMの情報を登録する。 今回はすでにKVMで仮想マシンを作成済と仮定して、その仮想マシンファイルに以下の内容を追記する。

KVMの場合、以下のコマンドで仮想マシンの設定ファイルをエディタで編集できる。

virsh edit VM名

エディタを開いたら、以下の様な内容を追記する。 qemuのコマンドオプションを使うので、1行目にあるタグに「xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'」という記述を忘れないようにしよう。 なお、ファイルのPATHはフルパスで記述する必要があるので注意。

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <!-- ... -->
  <qemu:commandline>
    <qemu:arg value='-acpitable'/>
    <qemu:arg value='file=/path/to/dir/msdm.bin'/>
  </qemu:commandline>
</domain>

VirtualBoxの場合については、先程の参考Urlに設定コマンドがあったので、それを使えばいいだろう。

VBoxManage setextradata VM名 \
           "VBoxInternal/Devices/acpi/0/Config/CustomTable" \
           ~/path/to/dir/msdm.bin

3. Windowsインストール

後は、そのまま元々入ってたのと同じWindowsのエディションをインストールしてやればいい。


参考