libvirt/KVMの仮想マシンとvagrant-sshfsでフォルダを共有する

vagrant-logo-4 vagrant
vagrant-logo-4

概要

libvirtで動かしている仮想マシンとホストマシンでフォルダを共有したいことがあって調べていました。その結果、vagrantプラグインのvagrant-sshfsを使えば実現できることがわかりました。そこで、ホスト側にはopenssh-sftp-servervagrant-sshfsをインストールして確認しました。

動作環境

  • ubuntu 22.04
  • vagrant 2.2.19
  • vagrant-sshfs 1.3.7

vagrant-sshfsのインストール

ホスト

仮想マシンを動かしているホスト側にはopenssh-sftp-serverをインストールします。

$ sudo apt install openssh-sftp-server

また、vagrantのプラグインとしてvagrant-sshfsをインストールします。

$ vagrant plugin install vagrant-sshfs

Vagrantfile

共有フォルダの設定はVagrantfileにsynced_folderの項目で設定します。書式はconfig.vm.synced_folder “ホストのパス”, “ゲストのパス”, type: “sshfs”のようになります。

Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2204"
  config.vm.synced_folder "./data", "/work", type: "sshfs"
end

Vagrant upコマンドによる仮想マシンの起動

vagrant upコマンドで仮想マシンを起動しましょう。もし仮想マシンが起動済みならvagrant reloadコマンドで実行できます。

Vagrant upの場合

仮想マシンの作成が始まります。ログの後半の方でCreating shared folders metadata…あたりから共有フォルダの作成がされていることがわかります。

$ vagrant up
Bringing machine 'default' up with 'libvirt' provider...
==> default: Checking if box 'generic/ubuntu2204' version '4.2.14' is up to date...
==> default: Starting domain.
==> default: Waiting for domain to get an IP address...
==> default: Waiting for machine to boot. This may take a few minutes...
・
・
・
==> default: Creating shared folders metadata...
==> default: Rsyncing folder: /home/higmasan/ubuntubox/data/ => /work
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

Vagrant reloadの場合

こちらは仮想マシンを一旦シャットダウンします。その状態で共有フォルダの設定をします。こちらもCreating shared folders metadata…あたりから共有フォルダの作成がされていることがわかります。

$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Starting domain.
==> default: Waiting for domain to get an IP address...
==> default: Waiting for machine to boot. This may take a few minutes...
・
・
・
==> default: Creating shared folders metadata...
==> default: Mounting SSHFS shared folder...
==> default: Mounting folder via SSHFS: /home/higmasan/ubuntubox/data => /work
==> default: Checking Mount..
==> default: Folder Successfully Mounted!
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

共有できていることの確認

次のような順番で確認します。

  1. ホストでファイルを作成する
  2. ゲストで確認する
  3. ゲストでファイルを作成する
  4. ホストで確認する

まず、ホストでファイルを作成します。

~/ubuntubox/data$ echo "sample contents created by host" > sample1.txt
~/ubuntubox/data$ cat sample1.txt 
sample contents created by host

ゲストで確認します。

/work$ cat sample1.txt 
sample contents created by host

ゲストでファイルを作成します。

/work$ echo "sample contents created by guest" > sample2.txt
/work$ cat sample2.txt 
sample contents created by guest

ホストで確認します。

~/ubuntubox/data$ cat sample2.txt 
sample contents created by guest

コメント