VirtualBoxで共有フォルダを作ってゲストOSとファイル共有する

Windows10上のVirtualBoxで共有フォルダ機能を利用して、仮想マシンのゲストOSとファイル共有を行う手順。以下、仮想マシンでの操作手順はCentOS 6.8での手順となっている。
VirtualBoxのGuest Additionsをインストールする

ファイル共有をするにはGuest Additionsのインストールが必要なので、最初にインストールしておく。

virtualbox_share1
仮想マシンを選択して上のツールバーの"起動"をクリックする。
仮想マシンにrootでログインして、カーネルのアップデートを行っておく。終わったら、一旦再起動する。
# yum update kernel
# reboot
再度、仮想マシンを起動してrootでログインする。ついでにアップデートをかけてから、必要なライブラリをインストールする。
# yum update
# yum install gcc make bzip2 kernel-devel
virtualbox_share2
起動したらメニューから[デバイス]-[Guest Additions CDイメージの挿入]を選択する。
Guest Additions CDイメージをマウントして実行する。終わったら仮想マシンは、一旦シャットダウンする。
# mount /dev/cdrom /mnt
# cd /mnt
# ./VBoxLinuxAdditions.run
# shutdown -h now
共有するフォルダを作成する
virtualbox_share3
ここではWindows側のフォルダを共有したいので、ドキュメントに"vbox_share"というフォルダを作成した。
virtualbox_share1
仮想マシンを選択して、上のツールバーの"設定"をクリックする。
virtualbox_share4
共有フォルダのページで右端にある"+"ボタンをクリックする。
virtualbox_share5
フォルダーのパスで、上で作成したフォルダを選択して、"自動マウント"にチェックを入れておく。"OK"ボタンで確定してVirtualBoxの最初の画面に戻る。
ゲストOSの設定を行う
仮想マシンを起動して、rootでログインする。VirtualBoxの設定で"自動マウント"にチェックを入れたので、こんな感じで/mediaにマウントされているのが分かる。Windowsで作成したフォルダ名の頭に"sf_"が付加されたディレクトリ名になる。
# ls -l /media
drwxrwx--- 1 root vboxsf 0 12月 11 17:09 2016 sf_vbox_share
このままだと権限がないので、rootかvboxsfグループのユーザーしかアクセスできないため、既存ユーザーをvboxsfグループに追加しておく。有効にするため一度再起動したら、共有できるようになっているはず。単に共有さえできればいいならここまでで設定は終わり。
# gpasswd -a hogeuser vboxsf
# reboot
共有フォルダをApacheで使う場合
自分の場合は、仮想マシン上のCentOSのLAMPサーバーを使うのが目的なので、Apacheのドキュメントルートにする前提で共有フォルダを作成した。そうした時にApacheのキャッシュ的な機能が、ファイルの更新が反映されなかったりする動きになってしまってよろしくないらしい。httpd.confを編集して、その機能を無効にしておく。
vi /etc/httpd/conf/httpd.conf#
# EnableMMAP and EnableSendfile: On systems that support it,
# memory-mapping or the sendfile syscall may be used to deliver
# files.  This usually improves server performance, but must
# be turned off when serving from networked-mounted
# filesystems or if support for these functions is otherwise
# broken on your system.
# Defaults if commented: EnableMMAP On, EnableSendfile Off
#
# 以下の行を両方ともOffにする
EnableMMAP off
EnableSendfile off
また、ドキュメントルートを変更する場合は、同じくhttpd.confを以下のように編集する。なお、Directoryの記述方法はApacheのバージョンによって違うので注意。
# 上で設定した共有フォルダをドキュメントルートにする例
DocumentRoot "/media/sf_vbox_share"

# この記述を追加しておかないとForbiddenになる(Apache 2.4系以降)
<Directory "/media/sf_vbox_share">
    AllowOverride All
    # Allow open access:
    Require all granted
</Directory>

# この記述を追加しておかないとForbiddenになる(Apache 2.4系より前)
<Directory "/media/sf_vbox_share">
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
PHPの設定ファイルを編集する。通常のPHPとFastCGI版のPHPで設定ファイルが違うので注意。内容は同じ。確認は以下のコマンドでどちらのプロセスが動いているかで判断できる。
ps ax | grep php
通常のPHPの場合
vi /etc/httpd/conf.d/php.confProxyPassMatch ^(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/media/sf_vbox_share/$1
FastCGI版のPHPの場合
vi /etc/httpd/conf.d/php-fpm.confProxyPassMatch ^(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/media/sf_vbox_share/$1
apacheユーザーもvboxsfグループに追加して、反映させるため再起動する。
# gpasswd -a apache vboxsf
# reboot
    この記事で書かれている製品やソフトについて
  • Windows10 Pro 64ビット
  • VirtualBox 5.1.10 r112026(Qt5.6.2)
  • CentOS 6.8 minimal 64ビット