読者です 読者をやめる 読者になる 読者になる

Virtualboxの共有フォルダのマウント位置やパーミッションを調整する

先日の記事では無事OSXホストのフォルダを、仮想マシンのUbuntu Serverにマウント出来た。giraffydev.hatenablog.com

同仮想マシンにはApacheやMySQLも導入済なので、共有フォルダのマウントを調整して、開発と動作テストがスムーズになるように調整。


現在は、自動マウントで以下の位置にマウントされている。

giraffy@pe-dev:~$ df
Filesystem                   1K-blocks     Used Available Use% Mounted on
/dev/mapper/pe--dev--vg-root   8907816  1587872   6844400  19% /
none                                 4        0         4   0% /sys/fs/cgroup
udev                            497612        4    497608   1% /dev
tmpfs                           101756      492    101264   1% /run
none                              5120        0      5120   0% /run/lock
none                            508780        0    508780   0% /run/shm
none                            102400        0    102400   0% /run/user
/dev/sda1                       240972    38099    190432  17% /boot
Projects                     117305216 51439244  65865972  44% /media/sf_Projects

giraffy@pe-dev:~$ ls -la /media/sf_Projects/
total 12
drwxrwx--- 1 root vboxsf  170 Aug  9 16:12 .
drwxr-xr-x 4 root root   4096 Aug  9 16:02 ..
-rwxrwx--- 1 root vboxsf 6148 Aug  9 16:13 .DS_Store
-rwxrwx--- 1 root vboxsf    0 Aug  9 16:09 file_from_OSX
-rwxrwx--- 1 root vboxsf    0 Aug  9 16:09 file_from_pedev

sf_ProjectsがOSXホストからマウントされている共有フォルダ。file_from_OSX, file_from_pedevはテスト作成したファイルなので無視して良い。

オーナー:グループは root:vboxsfとなっている。giraffyユーザーはvboxsfグループに参加している。しかしapacheユーザーのwww-dataを始めとした他サーバーはvboxsfグループに参加していない。パーミッションが770これでは面倒が多い。目標は以下とする。

というわけで目標は

  • マウントポイントをmediaという位置では無く、もう少しstaticな場所にしたい
  • パーミッションを777にしてvboxsfグループに参加しなくてもアクセスできるように

2つ目の目標は危険な気が一瞬するが、開発マシンOSX内の仮想マシンマウントが777なのでそれほど気にする事も無かろう。SSHを仮想マシンにポートフォワードしているわけではないので、外からアクセスされることも無い。

VirtualBoxの共有フォルダのマウント方法を調整する方法

公式マニュアル Chapter 4. Guest Additions によると

4.3.2. Automatic mounting

Starting with version 4.0, VirtualBox can mount shared folders automatically, at your option. If automatic mounting is enabled for a specific shared folder, the Guest Additions will automatically mount that folder as soon as a user logs into the guest OS. The details depend on the guest OS type:

With Linux guests, auto-mounted shared folders are mounted into the /media directory, along with the prefix sf_. For example, the shared folder myfiles would be mounted to /media/sf_myfiles on Linux and /mnt/sf_myfiles on Solaris.

The guest property /VirtualBox/GuestAdd/SharedFolders/MountPrefix determines the prefix that is used. Change that guest property to a value other than "sf" to change that prefix; see Section 4.7, “Guest properties” for details.

Note
Access to auto-mounted shared folders is only granted to the user group vboxsf, which is created by the VirtualBox Guest Additions installer. Hence guest users have to be member of that group to have read/write access or to have read-only access in case the folder is not mapped writable.

To change the mount directory to something other than /media, you can set the guest property /VirtualBox/GuestAdd/SharedFolders/MountDir.

To have any changes to auto-mounted shared folders applied while a VM is running, the guest OS needs to be rebooted. (This applies only to auto-mounted shared folders, not the ones which are mounted manually.)

4.3.2. 自動マウント

VirtualBoxはバージョン4.0から共有フォルダを自動マウントできるようになりました。オプション設定も可能です。共有フォルダで自動マウントを有効にするとGuest Additionsが即座にゲストOSにフォルダを自動でマウントします。

LinuxゲストOSでは /media に頭文字"sf_"が付与されて指定されたフォルダが自動マウントされます。例えばLinuxOSに向けてmyfilesフォルダを共有すると /media/sf_myfiles にSolarisなら /mnt/sf_myfiles にマウントされます。

sf_の頭文字付与は、ゲストプロパティの /VirtualBox/GuestAdd/SharedFolders/MountPrefix で設定されます。頭文字を変更したければ Section 4.7, “Guest properties” を読むと設定変更の参考になります。

Note:
自動マウントされたフォルダはグループvboxsfにのみアクセス権があります。vboxsfはVirtualBox Guest Addtionsインストーラーがインストール時に自動で作成します。読み書きが必要ならば、vboxsfグループに参加する必要があります。

4.7. Guest properties
Starting with version 2.1, VirtualBox allows for requesting certain properties from a running guest, provided that the VirtualBox Guest Additions are installed and the VM is running. This is good for two things:

A number of predefined VM characteristics are automatically maintained by VirtualBox and can be retrieved on the host, e.g. to monitor VM performance and statistics.

In addition, arbitrary string data can be exchanged between guest and host. This works in both directions.

To accomplish this, VirtualBox establishes a private communication channel between the VirtualBox Guest Additions and the host, and software on both sides can use this channel to exchange string data for arbitrary purposes. Guest properties are simply string keys to which a value is attached. They can be set (written to) by either the host and the guest, and they can also be read from both sides.

In addition to establishing the general mechanism of reading and writing values, a set of predefined guest properties is automatically maintained by the VirtualBox Guest Additions to allow for retrieving interesting guest data such as the guest's exact operating system and service pack level, the installed version of the Guest Additions, users that are currently logged into the guest OS, network statistics and more. These predefined properties are all prefixed with /VirtualBox/ and organized into a hierarchical tree of keys.

Some of this runtime information is shown when you select "Session Information Dialog" from a virtual machine's "Machine" menu.

A more flexible way to use this channel is via the VBoxManage guestproperty command set; see Section 8.30, “VBoxManage guestproperty” for details. For example, to have all the available guest properties for a given running VM listed with their respective values, use this:

$ VBoxManage guestproperty enumerate "Windows Vista III"
VirtualBox Command Line Management Interface Version 5.0.0
(C) 2005-2015 Oracle Corporation
All rights reserved.
(後略)

4.7. ゲストプロパティ
VirtualBoxバージョン2.1からいくつかのプロパティ設定をゲストOSにできるようになりました。プロパティ設定はGuest Additionsが必要です。これにより2つのメリットがあります。

多くの特徴的な仮想マシンの機能を、永続化・自動化設定ができるようになります。ホストOS側でON/OFFやモニター監視できます。

さらに、任意の文字データをホストとゲスト間で変換する事ができます。これにより以下の事を可能にします。

ゲストOSとホスト間のコミュニケーションチャンネルをプライベート化できます。任意で作成できます。(関係無いので略)

仮想OSのMachineメニューの"Session Information Dialog"から、実行中の情報を表示できます。

セクション 8.30, “VBoxManage guestproperty” を読むと、VBoxManage guestpropertyコマンドセットでより細かに調整する方法が確認できます。(略)


……VBoxManage guestpropertyを眺めて見たが、GUIでON/OFF設定したものをguestpopetyとやらで微調整するというのはなんだか気持ちわるいので、方針を変更。自動マウントをOFFにして、手動でマウント指定を仮想OS側にする。

これもとりあえず、同ページのマニュアルを参照する。

4.3.1. Manual mounting

You can mount the shared folder from inside a VM the same way as you would mount an ordinary network share:

In a Linux guest, use the following command:

mount -t vboxsf [-o OPTIONS] sharename mountpoint
To mount a shared folder during boot, add the following entry to /etc/fstab:

sharename mountpoint vboxsf defaults 0 0
Replace sharename (use lowercase) with the share name specified with VBoxManage or the GUI, and mountpoint with the path where you want the share to be mounted on the guest (e.g. /mnt/share). The usual mount rules apply, that is, create this directory first if it does not exist yet.
(攻略)

4.3.1. 手動マウント

共有フォルダを仮想マシンの中にマウントできます。マウントは一般的な方法で行われます。
LinuxゲストOSでは以下のコマンドを参考にしてください:

mount -t vboxsf [-o OPTIONS] sharename mountpoint

起動時に共有フォルダをマウントするには以下の行を /etc/fstab に追加してください。

sharename mountpoint vboxsf defaults 0 0

sharename 部分をGUIのVirtualboxで設定した共有フォルダの名前に変更してください。 mountpoint には貴方がゲストOSにマウントしたいパスを設定してください(例えば /mnt/share)。一般的なマウントルールが使えます。指定されたパスにディレクトリが無ければ初回時に作成されます。

…というわけで、ファイルシステムにvboxsfと共有フォルダ名を正しく指定さえすれば、mountも /etc/fstab も同じようにLinuxで使えるようだ。謎のVBoxManage guestpropertyを設定するより随分マシだ。

というわけで、まずは共有フォルダの自動マウントをOFFにして仮想マシンを再起動する。
f:id:giraffyk1:20150812151737p:plain
一応Virtualbox自体も再起動した上で行った。

giraffy@pe-dev:~$ df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/pe--dev--vg-root   8907816 1588372   6843900  19% /
none                                 4       0         4   0% /sys/fs/cgroup
udev                            497612       4    497608   1% /dev
tmpfs                           101756     484    101272   1% /run
none                              5120      12      5108   1% /run/lock
none                            508780       0    508780   0% /run/shm
none                            102400       0    102400   0% /run/user
/dev/sda1                       240972   38099    190432  17% /boot

消えているので手動マウントを試みる。マウントポイントは /usr/projects とした。

giraffy@pe-dev:~$ sudo mkdir /usr/projects
[sudo] password for giraffy:
giraffy@pe-dev:~$ sudo mount -t vboxsf Projects /usr/projects
giraffy@pe-dev:~$ ls -la /usr/projects/
total 12
drwxr-xr-x  1 root root  170 Aug  9 16:12 .
drwxr-xr-x 11 root root 4096 Aug 12 15:20 ..
-rw-r--r--  1 root root 6148 Aug  9 16:13 .DS_Store
-rw-r--r--  1 root root    0 Aug  9 16:09 file_from_OSX
-rw-r--r--  1 root root    0 Aug  9 16:09 file_from_pedev

無事マウントされたので、再度パーミッションオプションを追加してマウント。

giraffy@pe-dev:~$ sudo umount /usr/projects
giraffy@pe-dev:~$ sudo mount -t vboxsf Projects /usr/projects -o fmode=0777,dmode=0755
giraffy@pe-dev:~$ sudo ls -la /usr/projects/
total 12
drwxr-xr-x  1 root root  170 Aug  9 16:12 .
drwxr-xr-x 11 root root 4096 Aug 12 15:20 ..
-rwxrwxrwx  1 root root 6148 Aug  9 16:13 .DS_Store
-rwxrwxrwx  1 root root    0 Aug  9 16:09 file_from_OSX
-rwxrwxrwx  1 root root    0 Aug  9 16:09 file_from_pedev

これで共有フォルダ以下のファイルが777でディレクトリ755で操作が可能となった。
最後にマウントを自動化するためにfstabに以下の行を追加した。

Projects  /usr/projects   vboxsf   fmode=0777,dmode=0755  0   0

仮想マシンを再起動すると…ファイルマウントのところで止まった。レスキューモードでfstabの当該部分をコメントアウトする。 VirtualBoxの共有フォルダの自動マウント化 - どうでもいい日記帳 の記事を参考にvboxsfモジュールを先読みさせる。

…結果、自動で /usr/projects に無事共有フォルダがマウントされていた。