ホストOSと仮想マシン上で稼働しているゲストOSでフォルダを共有して同期させ、簡単にファイルのやり取りが出来るようにします。VagrantとVirtualBoxではプラグインを導入するだけで簡単にフォルダの共有設定が行えます。

公開日時:2021/05/04 23:24 最終更新:2021/06/09 22:16   サーバー
Vagrant VirtualBox ファイル共有 共有フォルダ 同期

ホストOSとゲストOSでフォルダを共有する

はじめに

この記事は以下の3つの記事、

で、VirtualBox上にCentOS 7がインストールされている事を前提としています。

Vagrantで共有フォルダを設定する

現在は、VirtualBox上のゲストOSとホストOS間でファイルをやり取りする手段がありません。

そこで、ローカルマシンと仮想マシンの間でファイルの転送が出来るようにする為の共有フォルダを設定します。

まず、共有フォルダを利用する為に必要なプラグインvagrant-vbguestが入っているか確認します。

vagrant plugin list

Vagrantのプラグインリスト

入っていませんでしたので、インストールします。

vagrant plugin install vagrant-vbguest

インストール完了

インストールが完了したらゲストOSを起動し、vbguestのステータスを確認します。

vagrant up
vagrant vbguest --status

パッケージ確認

PS C:\Vagrant\centos7> vagrant vbguest --status
[default] No Virtualbox Guest Additions installation found.

No ~~ installation found.(見つかりませんでした)』との事で、vbguestを利用するために必要なパッケージがCentOSにインストールされていないようです。vagratを使ってインストールしましょう。

vagrant vbguest

vbguestパッケージのインストール

vbguestのインストール完了

Vagrantの共有フォルダの確認

vbguestがインストールされると、デフォルトの共有フォルダが作成・設定されています。

上記のようにデフォルトでは、

が共有される事になっています。

/cygdrive/c/Vagrant/centos7/というのは実際にはC:\Vagrant\centos7、つまり、ホストOSでシェルを起動している現在のディレクトリ(カレントディレクトリ)です。

尚、/cygdrive/というのはWindows上でUnixに近い環境を提供するソフトウェアCygwinがWindowsのファイルシステムを利用する際に用いる仮のルートディレクトリです。

共有フォルダでの同期設定

そうしたら、Vagrantfileを編集してより使い勝手の良い共有設定に変更します。

C:\Vagrant\centos7\Vagrantfile
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
            ↓
config.vm.synced_folder ".", "/vagrant", type:"virtualbox" 

vbguestをインストールすると、デフォルトではUnixやLinuxのrsyncコマンドを使って共有が行われる事になっているようですが、これはファイルを編集したりしてもリアルタイムで同期がされません。

それでは不便ですので、上記のように共有フォルダタイプをvirtualboxにする事で、リアルタイム同期が行われるようになります。

"."については相対パスといって、意味は『カレントディレクトリ(現在のフォルダ)』で、Vagrantfile自身のあるフォルダを意味します。

つまり、C:\Vagrant\centos7であり/cygdrive/c/Vagrant/centos7/と同じディレクトリですね。

CentOS側の共有フォルダの確認

次に、CentOSを再起動してSSH接続でログインして共有フォルダを確認してみます。※CentOSの再起動を行うvagrant reloadはしばらく時間がかかります。

vagrant reload
vagrant ssh

CentOSにログインしたらルートディレクトリに移動し、ファイルリストを表示してみましょう。

cd /
ls -la

ルートディレクトリ

ルートディレクトリにvagrantフォルダが作成されているのが分かります。

フォルダ内に入って中を見てみましょう。

cd vagrant
ls -la

vagrantフォルダの中身

C:\Vagrant\centos7の中に在ったVagrantファイルが存在するのが分かります。ファイルを表示してみると、内容が同じである事を確認できます。

フォルダが共有されているかテストする

Vagrant自身の再起動が終わったら、仮想マシンを起動してSSH接続し、共有フォルダ/vagrantに移動します。

vagrant up
vagrant ssh
cd /vagrant

共有フォルダテスト

では、ここにテストファイルを配置してみます。

echo "ファイル共有テストです。" > testfile.txt

上記コマンドは何をしているのかというと、echoコマンドでその後に定義してある文字列"ファイル共有テストです。"を、まず標準出力に対して出力しています。

そのままだとシェルに上記文字列が返されて表示されますが、ここでUnixやLinuxのリダイレクトという機能を使ってtestfile.txtというファイル内に上記文字列を出力させています。

その為の表記がです。testfile.txtが存在しない場合は新規作成されます。

すると、ホストOS側のC:\Vagrant\centos7内にtestfile.txtというファイルが出現し、フォルダが共有されて同期されている事が分かります。

共有フォルダ内に作ったファイルが同期された

ホスト側で、testfile.txtを開いてみましょう。同じ内容ですね。

同期されたファイルの中身

次は、ホストOS側でこのファイルに変更を加え、保存してみます。

ホストOSでのファイル内容変更テスト

仮想マシン側で、testfile.txtの内容を表示してみます。

cat testfile.txt

ファイルの同期テスト2

変更内容反映されていますね。これで、共有フォルダが正しく動作している事が確認できました。

まとめ

これで、ホストOSとゲストOSの間でリアルタイムにファイルの共有が出来るようになりました。

次は『CentOSにSFTP接続でファイルを転送する』で、SSH接続を使ったSFTPでのファイル転送を行えるようにします。

記事リンク