仮想化ツールをVirtualBoxからlibvirt/virt-manager/kvmに移行しました

nogajun
nogajun

_といっても1ヶ月ぐらい前の話です。

VirtualBoxは、LinuxやWindows仮想マシンを動かすだけなら悪くありませんが長く使っているといろいろ気になってきます。

たとえば、ディスクやネットワークの遅さ(virtioを使うと改善されるけど、そうすると挙動の問題がある)やカーネルのバージョンを上げたときのカーネルモジュールの心配。ほかには、VirtualBoxとKVMを同時に利用できないなど、いろいろあります。それで移行したいと考えていましたが、ある日、思い切って移行しました。

(2021/09/16追記: virt-managerのインストールで「libvirtグループに追加だけでOK」と書いていましたが思い違いで、それだけでは使えないことを思い出したので設定を見て、大幅に書き直しています。)

virt-managerのインストールと設定

virt-managerのインストールは sudo apt install virt-manager でインストールします。そして、libvirtグループに利用するユーザーを追加します。ユーザーがkvmグループに追加されていなければ、こちらにも追加します。

 $ sudo gpasswd -a (ユーザー) libvirt
 $ sudo gpasswd -a (ユーザー) kvm

設定は、 /etc/libvirt/qemu.conf の以下の部分のコメントを外して変更します。

 user = "jun" ←利用ユーザー名に変更
 group = "libvirt" ← libvirtに変更
 dynamic_ownership = 1 ← コメントアウトだけでOK

/etc/libvirt/libvirtd.confの設定は、以下の行のコメントを外すだけでOKです。

 unix_sock_group = "libvirt"
 unix_sock_ro_perms = "0777"
 unix_sock_rw_perms = "0770"
 auth_unix_ro = "polkit"
 auth_unix_rw = "polkit"

これで設定が終わったのでデーモンの再起動をしてログアウトすれば使えますが、ユーザーをグループに追加していてログアウトも必要なのでマシン自体を再起動するのが手っ取り早いと思います。

イメージの変換とインポート

移行の方法は、qemu-imgを使って~/VirtualBox VMs以下にあるvdiファイルをこんな感じに変換。

 $ qemu-img convert -f vdi -O qcow2 hoge.vdi hoge.qcow2

古い情報だとrawイメージに変換してとか書いてあるけど、今は直接qcow2に変換できます。

変換したqcow2イメージを(root権限が必要なのでsudoをつけて)/var/lib/libvirt/images/にコピーして、virt-managerの「新しい仮想マシン」から「既存のディスクイメージをインポート」を選んでインポートします。

virtioドライバーのインストール

Windowsにvirtioドライバー一式をインストールするためのISOイメージをこちらからダウンロードします。(ディレクトリはこちら) ダウンロードしたらISOをイメージのある/var/lib/libvirt/images/まで移動しておきます。

インポートしたWindowsマシンは、そのまま起動できます。最初に起動したらインストールしていたVirtualBoxのGuestAdditionsを削除して仮想マシンをシャットダウンします。

そして、仮想マシンの情報にある「ハードウェアを追加」ボタンからCD-ROMドライブを追加します。CD-ROMは、「ストレージ」を選んで、カスタムストーレジからVirtioのISOを指定、デバイスの種類に「CD-ROMデバイス」、バスの種類を「SATA」を指定します。

再度、Windowsマシンを起動するとCD-ROMドライブが追加されているので、セットアップのexeファイルを起動するとvirtioドライバー一式がインストールされます。インストールが終わったら再びシャットダウンします。

仮想マシンの設定変更

ゲストにドライバーをインストールしたので仮想マシン側の設定を変更します。

virt-managerから直接XMLを書き換えるので、virt-managerのメニュー[編集]→[設定]を開いて、全般タブにある「Enable XML Editing」にチェックを入れます。

ネットワークはvirtioに変更するだけで大丈夫です。HDDは、virtioに変更するとWindowsが起動しなくなります。なので仮のvirtioのHDDを追加してから、インポートしたHDDの設定を変更するという方法で設定します。

HDDの追加は、「ハードウェアを追加」からCD-ROMと同じように追加しますが、バスの種類「VirtIO」の指定を忘れなければ、どんな容量でも構いません。

virtioのHDDを追加したら仮想マシンを起動します。すると、Windows側にVirtIOドライバが読み込まれるようになるのでマシンをシャットダウンして改めてインポートしたHDDの設定を変更します。

設定の変更方法は、インポートしたHDDをクリックして、XMLタブを開きます。すると以下のような設定が表示されるので、devの行のsdaをvdaに、sataをvirtioに変更します。そして、addressの行を削除して「適用」ボタンを押します。

 <disk type="file" device="disk">
   <driver name="qemu" type="qcow2"/>
   <source file="/var/lib/libvirt/images/hoge-1.qcow2"/>
   <target dev="sda" bus="sata"/> ← sdaをvdaに変更。sataをvirtioに変更する
   <address type="drive" controller="0" bus="0" target="0" unit="1"/> ←この行を削除する
 </disk>

ディスプレイとビデオの設定ですが、自分はウィンドウで使って画面がウィンドウに追従するほうがいいので、ディスプレイは「SPICEサーバー」でリッスンタイプは「なし」。ビデオは「QXL」にしました。 これで、仮想マシンのメニュー[表示]→[仮想マシンのウィンドウを自動的にリサイズ]にチェックを入れるとウィンドウに合わせて画面サイズが自動的に変更されます。(余談ですがLinuxゲストの場合は、spice-vdagentとxserver-spiceを入れると追従します。)

特定の画面サイズしか使えなくなりますが画面描画が高速な方がいい人は、ビデオを「VirtIO」にしてディスプレイの「OpenGL」を有効にしてください。フルスクリーンで使う場合はこちらのほうが都合がいいと思います。

どちらを選ぶかは好みと用途に合わせて選択してください。

_ virt-manager上のゲストWindowsマシンにsshfs-winをインストールしてホストのファイルシステムを読み書きする

VirtualBoxではGuestAddtionsを入れるとサクっとホストのファイルシステムと共有できますが、virt-managerにそういう物はありません。

検索すると「ホストにsamba入れて共有しろ」と書いているサイトが多いけど仮想マシンのためだけにセットアップは面倒なので却下。 ほかに探すとspice-webdavdというのがあったので試したけど設定方法がわかりにくい上にvirt-viewerからしか使えないので、これも却下。

ということで、Windowsゲストにsshfs-winをインストールして使う方法に落ち着きました。

sshfs-winのインストールは、READMEに書いてあるとおりWinFspsshfs-winをインストール。そして、エクスプローラーを起動して「ネットワークドライブの割り当て」から\\sshfs\(ユーザー名)@(ホスト)のように指定すればOK。

すっごい楽!