起動時にVirtualBox共有フォルダーをマウントする方法は?


87

UbuntuをVirtualboxにインストールしています。Ubuntuにログインするときに、UbuntuのVirtualBox共有フォルダーを自動的にマウントしたい。〜。/ bashrcおよび〜/ .bash_profileに次の行を追加します。

sudo mount -t vboxsf windows_share /media/windows_share

ここで、windows_shareはVirtualboxで作成した名前です。しかし、Ubuntuを起動するたびに、sudoが必要なのでpasswdを要求されます。とにかく、ログインするたびにパスワードを入力せずにWindows共有を自動的にマウントする方法はありますか?

回答:


109

Ubuntuゲストの起動時にVirtual Boxの「共有フォルダー」を常にマウントするには、2つのオプションがあります。私たちの設定でどのオプションが最適に機能するかは個人の好み次第です。

1. fstabでマウントする

Guest Additionsでvboxsf提供されるファイルシステムを使用して共有フォルダーをマウントするには、最初に前提条件が満たされていることを確認する必要があります。次に、ファイルに次の行を追加します。etc/fstab

<name_of_share>   /path/to/mountpoint   vboxsf   <options>  0   0

交換するname_of_share/path/to/mountpoint、あなたの個々の設定で(マウントポイントのディレクトリを最初に作成する必要があります)。mountのマンページを参照してください<options>。一つの可能性はでマウントすることでdefaults、または特定のマウントオプション(たとえばを与えることrw, suid, exec, auto, users)。

一部のシステムでは、ブートvboxsf時に読み込まれる時点でカーネルモジュールがまだロードされていませんfstabvboxsfカーネルモジュールをに追加すると役立つ場合があります/etc/modules

一部のシステムではcomment=systemd.automount、fstabエントリ(ソース)にオプションが必要な場合があります。

2. Virtual Boxの「自動マウント」でマウントします。

Virtual Boxの最近のリリースでは、作成時に共有フォルダーを自動的にマウントすることもできます。

ここに画像の説明を入力してください

ゲストの再起動後、この共有フォルダーは/media/<username>/sf_<name_of_share>、グループのメンバーになったすべてのユーザーがアクセスできるゲストディレクトリにマウントされますvboxsf


1
マウントディレクトリとマウントプレフィックスをどのように変更しますか?ホストOSまたはゲストOSでターミナルコマンドを実行しますか?
CMCDragonkai 14年

12
この機能を使用するには、「virtualbox-guest-utils」サービスが開始されている必要があり、Ubuntu 14.04では、ファイルシステムがマウントされるよりも後にこのサービスが開始されます。これは、fstabを経由株式を取り付ける「デバイスが見つかりません」というエラーの理由です
kolypto

1
@garromark、私の唯一のアイデアは、非常に単純なupstartスクリプトを作成することです。別のオプションは、同じfstabエントリを置くことですが、「noauto」を追加して手動でマウントするだけです。
kolypto

4
@kolypto、お返事ありがとうございます。私は実際に2つの競合するソリューションを見つけましたが、そのうちの1つだけが私のために働いた:オプション1)(私のために働いた)は、あなたが言ったようnoautoに、fstabオプションを入れてから、通常はスタートアップスクリプト(など)に後でマウントすることですプロファイル)、オプション2)fstabを実行する前にvboxsfがロードされないという主な問題はvboxsf、ファイル/etc/modulesに追加し、fstabを実行する前にカーネルをロードするようカーネルに要求します。たぶん、これは他の誰かを助けるでしょう。
ガロマーク

6
ユーザーをvboxsfグループに追加することを忘れないでください。askubuntu.com/questions/79565/add-user-to-existing-group
chinloong

26
  1. 編集 /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. 入力前exit 0

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. セーブ

  4. (オプション)デスクトップまたはホームフォルダーへのショートカットを作成します。

    ln -s /media/windows_share /home/freddy/Desktop
    

Sを押してマウントをスキップする、またはMを押して手動で修復するなどのエラーなしで起動するには、次のエントリを削除する必要があります。fstab


4
これは、私が動作することがわかった唯一の方法であり、通常のマウントコマンドでRC.Localを試し、FSTABを試し、Crontab w / scriptを試しました。どうもありがとう!!
FreeSoftwareServers

2
これは私にとってもうまくいきました(受け入れられた答えに反対、理由はよくわかりません)。本当にありがとうございました!:)
表示名が欠落している

4
私のために働いた。これで編集/etc/rc.localしましたmount -t vboxsf [-o OPTIONS] sharename mountpoint
神経突起

1
引数のためとvirtualboxのケースを反映するために:私はこれを開始時sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointに実行し、それを機能させるために/etc/rc.localに次のものを入れました:mount -t vboxsf windows_share /home/dev/shared/mount_pointdevが私のユーザーである場合、FYI / etc / fstabも機能します!
MediaVince

1
あなたの答えは私にとってはうまくいきましたが、ディレクトリはルートとしてマウントされます。スクリプトのmountコマンドを変更してrc.local、ユーザーID(2000)を含めましたmount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf。PS rc.localUbuntu 17.04 を有効にする方法についてのチュートリアルを探している人がいれば、これでうまくいきました。PPSにvboxsfを含める必要はありませんでした/etc/modules
マイクWittie

5

Virtualbox 5.0.20で実行しているUbutntu 16.04で上記のすべてを試してみて疲れた朝(特にrc.localソリューションが機能しなかったことに失望しました)は、次のように動作しました:

  1. Virtualbox GUIの[共有フォルダー]メニューから必要なディレクトリを登録しますが、自動マウントまたはVirtualboxからの永続的なマウントは行いません。そうしないと、ホストdirがrootによってマウントされ、adminグループからでも非rootユーザーがアクセスするのは苦痛です。

  2. fstabに簡単なエントリを追加します。

    [VirtuablBoxNameOfMount] /media/[guestOSuser]/[mountSubdir]    vboxsf   rw, noauto   0     1
    

    noautoオプション-さもなければ、前述のようにブートローダーが失敗します。

  3. /etc/sudoersゲストOS内からコマンドvisudoを使用して、次のように対応する行を追加します。

    ALL ALL = NOPASSWD: /bin/mount /media/[guestOSuser]/[mountSubdir]/
    

これにより、非ルートプロセスがこれを具体的にマウントできるようになります(fstabは「ユーザー」オプションでマウントできないため...)

  1. ユーザーの.profileに対応する行を追加します。

    sudo mount /media/[guestOSuser]/[mountSubdir]/
    

これで、選択したホストのサブディレクトリが、ログイン時に選択したユーザー用にマウント可能になりました!


回避策を見つけましたnoautoか?
ヨルゲンシグバードソン

これは私のために働いた唯一のソリューションです。しかし、さらに、「vboxsf」を/ etc / modulesに追加して、vboxsfの準備ができる前に.profileがマウントコマンドを実行しないようにする必要がありました。
huyz

代わりにsudoを使用しての、fstabのオプションに「ユーザー」を追加し、すべてのユーザーがファイルシステムマウントすることができます
ラース・ノルディン

fstabの更新に関する情報についてはpclosmag.com/html/issues/200709/page07.htmlを参照してください。ここでのコメントは部分的にしか役に立ちませんでした。fstabの4番目の列は、カンマSepのリストです。リストにユーザー(uid = xxx)を追加します。例:noauto、uid = 1000、gid = 1000
qodeninja

rwとnoautoの間には空白があり、解析エラーになります。空白なしのサンプルは私のために働いた
weberjn

4

新しいsystemdベースのシステムでは、別のアプローチが必要です-最も簡単な方法は、別の質問に対する別の回答で言及されているものです-基本的commentに、/etc/fstabエントリに特別なオプションを追加する必要があると言います

src     /my_mount/src_host  vboxsf  auto,rw,comment=systemd.automount 0 0

ただし、一部のシステムで上記を機能させるには、VirtualBoxの[共有フォルダー]-> [追加]ダイアログの[自動マウント]ボックスをオンにする必要があります。

よりクリーンなマウント-重複したディレクトリや「自動マウント」の必要なし-systemdのマウントおよび自動マウントディレクティブを使用する必要があります。これを行うには/usr/lib/systemd/system/、目的のマウントポイントにちなんでnamedに2つのエントリを作成します。たとえば、上記のfstabマウントポイントに一致するように、名前を付けて以下my_mount-src_host.mountを含めます。

[Unit]
Description=VirtualBox shared "src" folder

[Mount]
What=src
Where=/my_mount/src_host 
Type=vboxsf
Options=defaults,noauto,uid=1000,gid=1000

およびmy_mount-src_host.automount

[Unit]
Description=Auto mount shared "src" folder

[Automount]
Where=/my_mount/src_host
DirectoryMode=0775

[Install]
WantedBy=multi-user.target

次に、有効にする必要があります。

sudo systemctl enable  my_mount-src_host.automount
sudo systemctl enable  my_mount-src_host.mount

ブート時にマウントされます。それらをすぐにマウントしたい場合(共有フォルダーが作成されている場合)、次のようにすることができます。

sudo systemctl start  my_mount-src_host.mount

奇妙な名前やダッシュ(-)が含まれるディレクトリがある場合はsystemd-escape、適切にエスケープされた名前を見つけるために使用してください。


Ubuntu 18.04ではcomment=systemd.automount、Automount VBoxをオンにしなくても、オプションを使用した最初のソリューションが機能します。解決策を見つけるまで何日も苦労しました、ありがとう!
HubertL

聞いて良かった-私はあなたの発見を反映するために答えを更新しました。
ピエルツ

これはDebian 9で機能し、他の機能は機能しませんでした。
cslotty

3

rc.localソリューションを試しましたが、動作しませんでした。
ただし、問題の原因はコマンドを実行したフォルダーにあるようです(理由はわかりません)。そこで、mountコマンドの前にディレクトリをホームフォルダーに変更する行を追加しましたが、現在は機能しています。

だから、私のWindows共有は呼ばれDropbox、私のマウントポイントは/home/jamie/Dropbox、私のユーザー名はjamie、これは私がrc.localに入れたものです:

cd /home/jamie
mount.vboxsf /home/jamie/Dropbox Dropbox vboxsf
exit 0

ブリリアント!ありがとう。他のソリューションに苦労した後、これは初めて働きました!
ノーバートノーバートソン

sleep 2デバイスをマウントする前にを追加する必要がありました。
アドリアーノP

2

上記で提案された非常に類似したモードでそれを行いますが、これらのスクリプトは必要なものを作成し、次のスクリプトで共有フォルダーをマウントまたはアンマウントします:

#!/bin/bash
#
# Mount automatically even shared folder on startup and unmount it at shutdown.
#
# VirtualBox (c) 2015 by Oracle Systems Inc.
#
####

# Check user privileges.
if [[ $EUID -ne 0 ]]; then
    echo -e "This script must run at ROOT user!" \
        "\nPlease, use 'sudo', 'visudo' or any other to run it."
    exit 1
fi

# Check paramas from caller.
if [[ $# -eq 0 ]]; then
    echo -e "Auto-Mount selected shared folder of VirtualBox machine." \
        "\nUsage:" \
        "\n    VBoxShared <drive_one> <drive_two> <...>"
    exit 2
fi

declare EVENT=          # This set the ACTION: -m OR -u
declare -a DRIVES=()

# Processing each param:
for arg in "$@"; do
    case "$arg" in
        "-m"|"--mount")
            if [[ -z ${EVENT} ]]; then
                EVENT=-m
            else
                exit 318        # parameters at conflict!
            fi
            ;;

        "-u"|"--umount")
            if [[ -z ${EVENT} ]]; then
                EVENT=-u
            else
                exit 318        # parameters at conflict!
            fi
            ;;

        *)
            DRIVES=("${DRIVES[@]}" "${arg}")
            ;;
    esac
done
unset arg

[[ -z ${EVENT} ]] && exit 1             # ERROR: No se ha establecido la acción a realizar.
[[ "${#DRIVES[@]}" -gt 0 ]] || exit 1   # ERROR: No se han indicado las unidades a manejar.

# Process each shared folder stored on '${DRIVES}' array
for drive in "${DRIVES[@]}"; do
    DEST="/media/sf_${drive}"

    case "${EVENT}" in
        "-m")
            [[ -d ${DEST} ]] || (mkdir ${DEST} && chown root:vboxsf ${DEST} && chmod 770 ${DEST})
            mount -t vboxsf ${drive} ${DEST}
            ;;

        "-u")
            if [[ `df --output=target | grep "${DEST}"` > /dev/null ]]; then
                umount -f ${DEST}
                rm -rf "${DEST}"
            fi
            ;;
    esac
    unset DEST
done
unset drive

unset EVENT
unset DRIVES
exit 0

として保存します/opt/.scripts/VBoxShared.sh

これを実行できることを確認してください。シェルタイプ:

sudo chmod a+x /opt/.scripts/VBoxShared.sh

次に、このスクリプトを実行する行を追加しrc.localます。

sudo nano /etc/rc.local

最後の行(exit 0)の前にこれらの行を追加します。

. /opt/.scripts/VBoxShared.sh --mount <SharedFolder1> [<SharedFolder2> <SharedFolder3> ...]

保存(CtrlO)して閉じます(CtrlX

この時点で、<SharedFolder>起動時にリストされているすべての共有フォルダーを自動的にマウントします。

マウントを解除するには、タイプのみが必要です。

sudo nano /etc/rc6.d/K99-vboxsf-umount.sh

#!/bin/bash

. /opt/.scripts/VBoxShared --umount <SharedFolder1> [<SharedFolder2> <SharedFolder3> ...]

exit 0

保存(CtrlO)および閉じる(CtrlX

sudo chmod a+x /etc/rc6.d/K99-vboxsf-auto.sh

そして、それだけです!


2

これが実用的なソリューションです。

ルート(IE sudo su)としてホームフォルダー(
cd〜)に移動し、cronファイルを作成します。vi cronjobs
次の
@reboot sleep 15;を追加します。mount -t vboxsf app / mnt / app

ファイルを保存

注:appを共有フォルダー名と、マウントする/ mnt / appに置き換えます。この場合、最初にマウント(mkdirアプリ)の下にフォルダーアプリを作成しました。

cronをルートとして有効化するには(上記のファイル名用)
crontab cronjobs

cronがアクティブであることを確認します:
crontab -l

再起動すると、マウントされます。15秒のスリープでは、すべてのマウントの準備が整うのに十分な時間を確保できます。


受け入れられた回答のrc.localは、Ubuntuの最近のリリースで削除されました。この代替ソリューションは動作します:)
shonky linuxユーザー

0

Ubuntu LTS-18に更新した後(VirtualBoxに変更を加えず、拡張機能とblah-de-blahを再インストールした後)、自動マウントが機能しなくなったときに、最近このスレッドに遭遇しました。sf_xxxディレクトリが存在した/media/が、それらのどれも実際にマウントされませんでした。

/etc/fstab(VirtualBoxのドキュメントで示唆されているように)それらをマウントしようとしても機能しませんでした/etc/modules。ファイルを変更した場合でも、「緊急モード」へのブートに失敗しました。

でした最終的に仕事-私はstinkinとみなしものの、ハック-であるcrontab、上述のトリック。

今日まで、私は「何が壊れたのか」は知りません。


0

共有フォルダーが表示される問題がありましたが、ファイルがありませんでした。そこで、上記のようなハックを行いました。

ユーザーが正しいグループに属していること、共有をマウントするためのエントリがfstabにあること、権限が正しく設定されていること、VirtualBox設定で自動マウントがオンになっていることを確認しましたが、見られるファイル。
そこで、Ubuntu 18.04 GUIでStartup Applicationsアプリを開き、起動時に「sudo mount -a」を実行するだけのタスクを作成しました。何らかの理由で、ブート時にfstabが自動的に解析されたときに共有フォルダーが正しくマウントされていなかったため、すべてを再マウントすると問題が解決したようです。これで、共有内のファイルを確認できます。


0

ここですべてのソリューションを試しましたが、どれも機能しませんでした。

うまくいったのは、スーパーバイザーをインストールしてpythonスクリプトを実行することでした。

スーパーバイザーをインストールする

apt-get install supervisor

pythonスクリプト(私のものは/home/ubuntu/shared_folders.pyにありました)

import subprocess
import os
import time

shared_folder = '/home/ubuntu/shared'

file_count = len(os.listdir(shared_folder))

mnt_command = 'mount -t vboxsf -o rw,uid=1000,gid=1000 shared-folder ' + shared_folder
if file_count == 0:
        # mount
        subprocess.Popen(mnt_command, shell=True)

time.sleep(3600)

スーパーバイザーの構成ファイルを作成する

nano /etc/supervisor/conf.d/sharedfolders.conf

[program:shared_folders] command=python shared_folders.py directory=/home/ubuntu process_name=%(program_name)s_%(process_num)s numprocs=1 numprocs_start=0 autostart=true autorestart=true startsecs=1 startretries=3 exitcodes=0,2 stopsignal=TERM stopwaitsecs=10 ;user=pavelp redirect_stderr=true stdout_logfile=/var/log/supervisor/qlistener-stdout.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 stdout_capture_maxbytes=0 stdout_events_enabled=false stderr_logfile=/var/log/supervisor/qlistener-stderr.log stderr_logfile_maxbytes=50MB stderr_logfile_backups=10 stderr_capture_maxbytes=0 stderr_events_enabled=false environment=APPLICATION_ENV=development serverurl=AUTO

Supervisorctlを開きます

sudo supervisorctl

設定を読む

reread

構成を追加する

add shared_folders


0

(私の場合、ホストOSはMac OS Xで、ゲストOSはUbuntuです)

上記の解決策のどれも、ここここで言及さた解決策は私にとってはうまくいきませんでした。それらすべてに問題がありました。

問題を解決するために私が最後にしたことは次のとおりです。

1- VirtualBox UIで共有フォルダーを作成VMSharesし、Mac OSで名前が付けられたフォルダーをポイントして、名前を付けますwd

2-次に、Ubuntu Guest Additionツールをインストールしました(再起動が必要です)

3-次に、ゲストOSにマウントポイントとしてフォルダーを作成しました(私の場合、名前は/home/fashid/host

4-その後、私は走った:

sudo VBoxControl sharedfolder list

これは、共有をゲストOSで使用できるようにするためのコマンドでしたが、実際に使用可能にするには、ゲストOSで共有をマウントする必要があります。

次のように表示されます。

Shared Folder mappings (1):
01 - VMShares

これがトリックです!実際にマウントしてゲストOSで使用できるようにするために、以下のコマンドに入力する必要がある実際の名前を示しています。

sudo mount -t vboxsf VMShares /home/farshid/myshares

ポイントを実現しましたか?後でwdを使用しませんでした。手順3では、GUIダイアログボックスで割り当てた任意の名前ではなく、実際の(ホスト)フォルダー名を取得する必要がありました。

上記の手順により、私の問題は解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.