2026年09月09日

Ubuntu 上の KVM/QEMU-Windows で共有フォルダを設定する

 先日設定した KVM/QEMU 上の Windows ですが(「Ubuntu 上の KVM/QEMU で Windows 11 を走らせる」)、Ubuntu 側とディスク共有を設定したいところです。VMWare では GUI で簡単に設定できたのですが、けっこう手間がかかりました。

 まず、Ubuntu 側に virtiofsd をインストールします。

$ sudo apt install virtiofsd

 共有するフォルダを作成します。ホームディレクトリの .vmshare としました。隠しフォルダにした理由はあとで書きます。

 次に、仮想マシン側の設定です。Windows をシャットダウンして、仮想マシンマネージャの「表示」から「詳細」を選ぶと、仮想マシンの設定画面になります。

20260908-3.png

 「メモリ」を開いて「共有メモリを有効にする」にチェックを入れます。これを先にやっておかないと virtiofs ファイルシステムを追加できないようです。

20260908-1.png

 「ハードウェアを追加」から「ファイルシステム」を追加します。ドライバーは「virtiofs」、ソースパスは ~/.vmshare(フルパスで書く), ターゲットパスは vmshare とします。ソースパスが共有される Ubuntu 上のフォルダで、ターゲットパスは Windows 上で見える名前です。

20260908-2.png

 設定を保存して、仮想マシン上で Windows を起動します。WinFspをインストールします(https://winfsp.dev/rel/)。

20260908-4.png

 Windowsツールの「サービス」を起動します。

20260908-5.png

 「VirtIO FS Service」を探し、「プロパティ」を開きます。「スタートアップの種類」を「自動」とし、「サービスの状態」の「開始」を押して「実行中」状態にします。

20260908-6.png

 エクスプローラーを開くと、ドライブZ:に共用フォルダがマウントされています(ドライブレターは環境依存)。

20260908-7.png

 2つ以上のフォルダを共有したいときは、さらにもう一手間かける必要があります。WinFsp は virtio ディスクを1つしかマウントできないため、Ubuntu 側で Bind マウントという機能を使って、ディレクトリをマウントします。次のようにすると、~/Downloads の内容が .vmshare/Downloads の中に、~/Development/wxMyProjects の内容が .vmshare/wxMyProjects の中に、それぞれ見えるようになります。

$ mkdir $HOME/.vmshare/Downloads
$ sudo mount --bind $HOME/Downloads $HOME/.vmshare/Downloads
$ mkdir $HOME/.vmshare/wxMyProjects
$ sudo mount --bind $HOME/Development/MyProjects $HOME/.vmshare/MyProjects

 永続的にマウントするには、/etc/fstab に下のように追記します。

/home/tnagata/Downloads /home/tnagata/.vmshare/Downloads none bind 0 0
/home/tnagata/Development/wxMyProjects /home/tnagata/.vmshare/wxMyProjects none bind 0 0

 なお、Bind マウントしたディレクトリは、ファイルシステムの中で二重に存在していることになるので、バックアップ対象から外しておきます。また、Ubuntu 側の普段使いで混乱しないように、隠しフォルダに入れるようにしました。

 これで、Windows から2つの共有フォルダが見えるようになりました。

20260908-8.png
タグ:Linux
Posted at 2026年09月09日 00:09:53
email.png