広告

KVM on ThinkPad T14 Gen 1(AMD)

Ubuntu,ThinkPad,Install

これまでは Ubuntu と Windows のマルチブート環境で過ごしてきましたが、今回、Windows は KVM による仮想マシンで運用することにして、念の為 USB の回復ドライブを作ってから Ubuntu 20.04 LTS を 500GB の M.2 SSD にインストールしました。

事前に KVM 環境の仮想マシンで Windows10 の使い勝手がどんな感じか試してみたところ、職場のノート PC と比べても遜色なく動いたので、これ幸いという感じです。
実際のところ、Windows10 を残さなければならない一番の理由は iTunes で、その次が Lenovo Vantage によるシステム(UEFI BIOS)更新やバッテリー設定などでした。
iTunes 以外は Ubuntu で何とかなるので、長らくお世話になったマルチブート環境はこれを持って終了としました。もちろん、少しだけ試してみた WSL2 も使うことはありません。

インストールの前に

仮想環境と Wi-Fi は相性が悪く、単にゲスト PC から外部(インターネット)に接続するだけなら NAT 接続で問題ありませんが、LAN 内の他の PC からゲスト PC にアクセスしようとするとたちまち困ります。なので、普段は Wi-Fi を優先するため、ゲスト PC からは NAT で接続することとして、もしゲスト PC を LAN と同じネットワークで運用する必要があるときは、Virtual Machine Manager でゲスト PC の NIC を Ethernet 接続に切り替えることにします。

準備

Windows10 のプロダクトキー

最初に Windows10 のプロダクトキーを確認、忘れないように記録しておきます。仮想マシンにインストールするときにライセンス認証が必要となるので、このプロダクトキーを使用します。
管理者権限で起動したコマンドプロンプトで、

wmic path softwarelicensingservice get OA3xOriginalProductKey

または PowerShell で、

(Get-WmiObject -query 'select * from SoftwareLicensingService').OA3xOriginalProductKey

とするとプロダクトキーが表示されます。

ちなみに仮想マシン環境の Windows10 の WEI Viewer で表示したエクスペリエンスはこんな感じです。

Ubuntu 20.04 LTS のインストール

ドライブまるごと Ubuntu なのでインストールは特に迷うことはないと思います。
ネットワークの設定で少しだけ。ホスト PC は Wi-Fi 接続だけと割り切って、Ethernet のプロファイルがあれば削除します。もし必要になったらその時に改めて設定することにします。

WIndows10 のディスクイメージ(ISOファイル)のダウンロード

仮想マシンへのインストール用として、次のサイトへアクセスして Windows10 のイメージファイルをダウンロードします。

virtIO drivers(ISO ファイル)のダウンロード

ゲスト PC が Windows の場合、仮想環境に最適化されたドライバ類が色々不足するので用意します。なくても一応動きますが、少しでも速いに越したことはないので。

これで準備は完了です。

KVM のインストール

次のサイトをはじめ、いろいろ詳しく解説されているので特に問題は無いかと思います。

ただし、ブリッジ( br0 )は、普段使いを Wi-Fi 環境とするため追加しません
もしゲストPC を Ethernet で接続したい( LAN 内のホストと同じネットワークセグメントに属したい)ときは、Ethernet をゲスト PC 専用として VEPA モードに設定変更します。
また、ホスト PC もゲスト PC も Ethernet 接続する必要があればブリッジの設定を考えますが、今の Wi-Fi 環境なら速度的な問題も無いので、そのときに考えることにします。

仮想マシンの作成

仮想マシンマネージャーを起動して、左上のアイコンをクリックして新しい仮想マシンを作成します。

ダウンロードした Windows10 のインストールメディアを使用するので一番上にチェック。

「ローカルを参照」をクリックして ISO ファイルを選択します。画像は既にインストールを終えているため、最初は無いはずの gnome-boxes も見えていますが無視してください。

インストールメディアを選択して「進む」をクリックします。インストールする OS の欄は自動で検出されます。

ゲスト PC に付与するメモリと CPU を設定します。私はとりあえずメモリ 8G、CPU 8個にしました。特に重たい処理は予定していないので十分だと思います。
※CPU は Windows 10 Pro の場合、ソケット数の制限から最大2個で十分です。あとでコア数は増やせます。

ドライブのサイズを設定します。

ここは重要です「インストールの前に設定をカスタマイズする(U)」にチェックを入れてください。

SS を取り忘れましたが、上記の完了ボタンをクリックしたあとの画面、左下の「新しいハードウェアを追加」をクリックして次の画面に移り、CD-ROM を追加します。

ディスクバスで「 VirtIO 」を選択します。一応、初期設定のSATA でもインストールはできます。

先程追加した CD-ROM に、ダウンロードした virtio-win-***.isoファイルを割り当てます。私は stable ではなく latest にしてみました。結果、特に不具合はありませんでしたが、USB3.0 で iPhone を接続することはできませんでした(接続の瞬間に落ちます)。stable でどうなるかは不明です。

NIC を設定します。ネットワークソースは初期値のまま NAT です。デバイスのモデルは virtio を選択します。

USB は 3.0 でもいいですが、iPhone との接続を予定しているなら 2.0 を選択してください。

CPU の設定です。トポロジーのところ、初期設定はソケット数が 8 になっていました。Windows10 は最大ソケット数は 2 個だったと思うので、「 CPU トポロジーの手動設定」をチェックして 1 CPU 、8 コアにしました。
※初期設定ではなく、最初に8個にしていただけです。

以上で設定は完了、下図の左上の「インストール開始」をクリックしてWindows10 のインストール画面(の前に UEFI の画面)に進みます。

Windows10 のインストール

「インストールを開始」をチェックして放置していると UEFI の shell 画面になります。放置せずに enter キーを押せば CD-ROM から起動しますが、shell 画面になっていたら exit で再起動してみてくだい。その後、メッセージが出ている間に enter キーを押せばインストール画面が表示されます。

「今すぐインストール」をクリックします。
ちなみに、もしマウスカーソルをゲスト PC からホスト PC に戻したいときは「 ctrl + alt + L 」で。

プロダクトキーの入力画面で、ここで最初に確認したプロダクトキーを入力してもいいですが、私は Microsoft アカウントに紐付いた「デジタルライセンス認証」としたかったので、「プロダクトキーがありません」を選択しました。

もともと T14 に入っているエディションを選択します。

同意しないと次に進めません。

「カスタム:Windows のみをインストールする」を選択して次の画面へ進みます。

インストール先のドライブが見つからないので、最初に準備した virtio-win のドライバーを読み込むため、「ドライバーの読み込み」をクリックします。

「参照」ボタンをクリックしてドライバーの入った CD-ROM を選択します。

amd64 内の win10 フォルダーを選択します。

ドライバが見つかりました。

ドライバーのインストールが終わって、無事にインストール先が出てきました。

インストール画面です。途中、「ネットワークに接続しましょう」の画面が出てもドライバをインストールしていないので無理です。慌てず左下の「インターネットに接続していません」で次に進みます。

virtIO のドライバーをインストールします。CD-ROM を開いて「 virtio-win-gt-x64 」を実行すると、不足していたドライバが色々インストールされます。
終了したら、「 virtio-win-guest-tools 」も実行します。

途中で NIC のドライバが有効になることから、ネットワーク(パブリック、プライベート)が選択できるようになります。

ここまでの作業で WIndows10 のインストールは終了です。あとは細かな設定を行って環境を整えます。

デジタルライセンス認証は Microsoft アカウント に紐付いている素の Windows10 を、今回作成したゲスト PC に切り替えるというイメージになります。
もしくは、プロダクトキーによるライセンス認証(電話)も可能です。
詳細は次をご覧ください。

その他

バッテリーの充電管理

普段はほとんど AC コンセントを使用しているので、バッテリーの劣化を抑えるため、TLP をインストールして充電開始・終了の閾値を設定します。
具体的には次のサイトにあります。

Lenovo のサイトによると、あまりバッテリーを使わない AC コンセント中心の場合、40% で充電開始、50% で充電終了が良いそうです。私の使い方だと、40% まで下がることはまず、ありません。

インストール

hoge@T14:~$ sudo apt -y install tlp acpi-call-dkms

設定

本来は /etc/tlp.d/ 内に設定フィアルを作る、または 00-template.conf に書き加えるのが正しいとは思いますが、何故か設定が反映されなかったので /etc/tlp.conf を修正します。初期値は・・・忘れました。
tlp-stat コマンドで色々確認できます。

hoge@T14:~$ sudo vi /etc/tlp.conf

〜〜〜
START_CHARGE_THRESH_BAT0=40
STOP_CHARGE_THRESH_BAT0=50
〜〜〜
hoge@T14:~$ sudo tlp-stat -c
--- TLP 1.3.1 --------------------------------------------

+++ Configured Settings:
defaults.conf L0004: TLP_ENABLE="1"
defaults.conf L0005: TLP_PERSISTENT_DEFAULT="0"
defaults.conf L0006: DISK_IDLE_SECS_ON_AC="0"
defaults.conf L0007: DISK_IDLE_SECS_ON_BAT="2"
defaults.conf L0008: MAX_LOST_WORK_SECS_ON_AC="15"
defaults.conf L0009: MAX_LOST_WORK_SECS_ON_BAT="60"
defaults.conf L0010: CPU_ENERGY_PERF_POLICY_ON_AC="balance_performance"
defaults.conf L0011: CPU_ENERGY_PERF_POLICY_ON_BAT="balance_power"
defaults.conf L0012: SCHED_POWERSAVE_ON_AC="0"
defaults.conf L0013: SCHED_POWERSAVE_ON_BAT="1"
defaults.conf L0014: NMI_WATCHDOG="0"
defaults.conf L0015: DISK_DEVICES="nvme0n1 sda"
defaults.conf L0016: DISK_APM_LEVEL_ON_AC="254 254"
defaults.conf L0017: DISK_APM_LEVEL_ON_BAT="128 128"
defaults.conf L0018: DISK_IOSCHED="keep keep"
defaults.conf L0019: SATA_LINKPWR_ON_AC="med_power_with_dipm max_performance"
defaults.conf L0020: SATA_LINKPWR_ON_BAT="med_power_with_dipm min_power"
defaults.conf L0021: AHCI_RUNTIME_PM_TIMEOUT="15"
defaults.conf L0022: PCIE_ASPM_ON_AC="default"
defaults.conf L0023: PCIE_ASPM_ON_BAT="default"
defaults.conf L0024: RADEON_POWER_PROFILE_ON_AC="default"
defaults.conf L0025: RADEON_POWER_PROFILE_ON_BAT="default"
defaults.conf L0026: RADEON_DPM_PERF_LEVEL_ON_AC="auto"
defaults.conf L0027: RADEON_DPM_PERF_LEVEL_ON_BAT="auto"
defaults.conf L0028: WIFI_PWR_ON_AC="off"
defaults.conf L0029: WIFI_PWR_ON_BAT="on"
defaults.conf L0030: WOL_DISABLE="Y"
defaults.conf L0031: SOUND_POWER_SAVE_ON_AC="0"
defaults.conf L0032: SOUND_POWER_SAVE_ON_BAT="1"
defaults.conf L0033: SOUND_POWER_SAVE_CONTROLLER="Y"
defaults.conf L0034: BAY_POWEROFF_ON_AC="0"
defaults.conf L0035: BAY_POWEROFF_ON_BAT="0"
defaults.conf L0036: BAY_DEVICE="sr0"
defaults.conf L0037: RUNTIME_PM_ON_AC="on"
defaults.conf L0038: RUNTIME_PM_ON_BAT="auto"
defaults.conf L0039: RUNTIME_PM_DRIVER_BLACKLIST="amdgpu mei_me nouveau nvidia pcieport radeon"
defaults.conf L0040: USB_AUTOSUSPEND="1"
defaults.conf L0041: USB_BLACKLIST_BTUSB="0"
defaults.conf L0042: USB_BLACKLIST_PHONE="0"
defaults.conf L0043: USB_BLACKLIST_PRINTER="1"
defaults.conf L0044: USB_BLACKLIST_WWAN="0"
defaults.conf L0045: USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN="0"
defaults.conf L0046: RESTORE_DEVICE_STATE_ON_STARTUP="0"
defaults.conf L0047: RESTORE_THRESHOLDS_ON_BAT="0"
defaults.conf L0048: NATACPI_ENABLE="1"
defaults.conf L0049: TPACPI_ENABLE="1"
defaults.conf L0050: TPSMAPI_ENABLE="1"
/etc/tlp.conf L0425: START_CHARGE_THRESH_BAT0="40"
/etc/tlp.conf L0426: STOP_CHARGE_THRESH_BAT0="50"
hoge@T14:~$ sudo tlp-stat -s
--- TLP 1.3.1 --------------------------------------------

+++ System Info
System         = LENOVO ThinkPad T14 Gen 1 20UDCTO1WW
BIOS           = R1BET56W(1.25 )
Release        = Ubuntu 20.04.1 LTS
Kernel         = 5.4.0-52-generic #57-Ubuntu SMP Thu Oct 15 10:57:00 UTC 2020 x86_64
/proc/cmdline  = BOOT_IMAGE=/boot/vmlinuz-5.4.0-52-generic root=UUID=479e9637-dfc8-4f74-bd95-f78390ac6f40 ro quiet splash psmouse.proto=bare vt.handoff=7
Init system    = systemd v245 (245.4-4ubuntu3.2)
Boot mode      = UEFI

+++ TLP Status
State          = enabled
RDW state      = enabled
Last run       = 12時29分01秒,  13272 sec(s) ago
Mode           = AC
Power source   = AC
hoge@T14:~$ sudo tlp-stat -b
--- TLP 1.3.1 --------------------------------------------

+++ Battery Features: Charge Thresholds and Recalibrate
natacpi    = active (data, thresholds)
tpacpi-bat = active (recalibrate)
tp-smapi   = inactive (ThinkPad not supported)

+++ ThinkPad Battery Status: BAT0 (Main / Internal)
/sys/class/power_supply/BAT0/manufacturer                   = LGC
/sys/class/power_supply/BAT0/model_name                     = 5B10W139
/sys/class/power_supply/BAT0/cycle_count                    =      2
/sys/class/power_supply/BAT0/energy_full_design             =  50500 [mWh]
/sys/class/power_supply/BAT0/energy_full                    =  50500 [mWh]
/sys/class/power_supply/BAT0/energy_now                     =  24710 [mWh]
/sys/class/power_supply/BAT0/power_now                      =      0 [mW]
/sys/class/power_supply/BAT0/status                         = Unknown

/sys/class/power_supply/BAT0/charge_start_threshold         =     40 [%]
/sys/class/power_supply/BAT0/charge_stop_threshold          =     50 [%]
tpacpi-bat.BAT0.forceDischarge                              =      0

Charge                                                      =   48.9 [%]
Capacity                                                    =  100.0 [%]

UEFI BIOS 更新

次の Lenovo のサイトで ISO ファイルの r1buj56wd.iso (2020年10月19日 ver1.25)をダウンロード、Bootable USB メモリを作って更新します。
少し時間がかかりますが我慢します。

マウス

トラックポイントがどうしてもカクカク動作するので調整します。
こちらの記事に書きました。

リモート接続

インストール直後から入っている RDP クライアントの Remmina を使います。
自宅のサーバーは Windows の Hyper-V 環境なので、VNC より RDP が高速で使いやすいです。

GNOME Boxes

仮想マシン環境の管理用には virt-manager で事足ります。スナップショットもワンクリックで普通に残せます。
GNOME Boxes は virt-manager より簡単に仮想マシンを作成できますが、特にネットワークまわりなどに制限があります。
とりあえずインストールして試しに使ってみるにはお手軽です。

GNOME Boxes で作成したゲスト PC には、virt-manager からだと、QEMU/KVM ユーザーセッション( qemu:///session )で接続することができます。

その他、詳細は次のサイトなどでご確認下さい。

Posted by @think