概要
libvirtで動かしている仮想マシンとホストマシンでフォルダを共有したいことがあって調べていました。その結果、vagrantプラグインのvagrant-sshfsを使えば実現できることがわかりました。そこで、ホスト側にはopenssh-sftp-serverとvagrant-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.
共有できていることの確認
次のような順番で確認します。
- ホストでファイルを作成する
- ゲストで確認する
- ゲストでファイルを作成する
- ホストで確認する
まず、ホストでファイルを作成します。
~/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
コメント