最初に
日経Linux 2022年11月号を書店で見かけまして、Ubuntu 22.04 LTSを特集していることを知りました。
その時は立ち読みもせずにそのまま流してしまったのですが、後になって気になり(気になったときには、次の号が出てしまって書店では買えなくなっていました)、Kindle版を購入して記事を一通り読みました。
その記事の中で、Windowsがプリインストールされているマシンに登録されているライセンス情報は、仮想マシンを作成する際に使用できることを知りました。
Ubuntuにも関心を持ち始めたところでしたので、WindowsがプリインストールされているマシンにUbuntuをホストOSとしてインストールして、ゲスト・仮想マシンとしてWindowsをインストールして見ようと考え、実施してみました。
プリインストールされたWindowsを消し、別のOS(本例ではUbuntu Desktop 22.04 LTS)をインストールした後、VirtualBoxでWindowsを仮想マシンとして動かす場合には、BIOS・UFEIに登録されているWindowsのライセンス情報をVirtualBoxに認識させることができます。
環境について
ホスト
- マシンはThinkPad L390
- 中古品を購入した(3万円台)
- CPUはCore i5-8265U(4コア8スレッド) 1.6GHz
- メモリは16GB
- ストレージはNVMe SSD 500GB
- Windows 10がプリインストールされていた
- Ubuntu Desktop 22.04 LTSをクリーンインストールした
- Windows 10のISOイメージは、マイクロソフトのサイトからダウンロード済み
- セキュアブートは途中で無効にした
- 購入時はセキュアブートが有効になっていた
- 有効なままで作業を始めてしまって、途中でエラーが発生したので、補足としてそのことを書いておく
ゲスト、仮想マシン
- OSはWindows 10とする
- ライセンスはL390のファームウェアに書き込まれていることを確認したので、そちらを使用した
手順
ホスト: ファームウェアに書き込まれたライセンス情報を確認する
以下のコマンドでライセンス情報が表示されれば、この先の作業を進められます。
$ sudo strings /sys/firmware/acpi/tables/MSDM
MSDMU
xxxxxxxx
xxxx
xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
ホスト: ファームウェアに書き込まれたライセンス情報をファイルに書き出す
ユーザーのホームディレクトリにある、VirtualBox共有フォルダ(VirtualBox VMs)に任意のディレクトリを作成して保存します。
$ sudo cat /sys/firmware/acpi/tables/MSDM > ~/"VirtualBox VMs"/Windows/msdm
ホスト: 書き出したライセンス情報をVirtualBoxに登録する
$ VBoxManage setextradata Windows VBoxInternal/Devices/acpi/0/Config/CustomTable ~/"VirtualBox VMs"/Windows/msdm
ここまでできれば、VirtualBoxで仮想マシンを作成してWindows 10のインストールを行ったときに、仮想マシン上のWindows 10でライセンスの認証が行われます。
補足: セキュアブート有効時に発生したエラー
セキュアブートを有効にしたままでホストにUbuntuのインストールはできました。その後、VirtualBoxのインストールもできました。
ただ、書き出したライセンス情報をVirtualBoxに登録するところで下記のエラーが発生しました。
$ VBoxManage setextradata Windows VBoxInternal/Devices/acpi/0/Config/CustomTable ~/"VirtualBox VMs"/Windows/msdm
WARNING: The character device /dev/vboxdrv does not exist.
Please install the virtualbox-dkms package and the appropriate
headers, most likely linux-headers-generic.
You will not be able to start VMs until this problem is fixed.
エラーメッセージのWARNING: The character device /dev/vboxdrv does not exist.
からあたりを付けて調べてみたところ、セキュアブートの設定に行き当たり、セキュアブートを無効化したら先に勧めました。
セキュアブートを有効にしたままでも、このエラーを回避することはできるようですが、今回はセキュアブートを無効にするという対応を取っています。
Ubuntu自体はセキュアブートに対応しているとのことなので、セキュアブートを有効化した状態で作業を進める方法は機会を改めて行ってみたいと思います。