web-dev-qa-db-ja.com

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

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

Sudo mount -t vboxsf windows_share /media/windows_share

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

86
tonga

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を個々のセットアップに置き換えます(マウントポイントのディレクトリを最初に作成する必要があります)。マウント<options>のマンページを参照してください。 1つの可能性は、defaultsでマウントするか、特定のマウントオプション(たとえば、rw, suid, exec, auto, users)を指定することです。

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

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

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

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

enter image description here

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

108
Takkat
  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のエントリを削除する必要があります。

26
Fred Collins

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

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

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

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

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

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

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

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

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

    Sudo mount /media/[guestOSuser]/[mountSubdir]/
    

これで、選択したホストのサブディレクトリが、ログイン時に選択したユーザーに対してすぐにマウントできるようになりました!

5

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

したがって、私のWindows共有はDropboxと呼ばれ、私のマウントポイントは/home/jamie/Dropbox、私のユーザー名はjamieです。これがrc.localにあるものです:

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

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

#!/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)およびclose(CtrlX

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

そして、それだけです!

2
Banny

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

ルート(I.E. 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秒のスリープでは、すべてのマウントの準備が整うのに十分な時間を確保できます。

2
Stephen

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

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

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

クリーンなマウント-重複したディレクトリや「自動マウント」の必要なし-systemdの mount および automount ディレクティブを使用する必要があります。これを行うには、/usr/lib/systemd/system/に目的のマウントポイントにちなんで名前を付けた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を使用して適切にエスケープされた名前を見つけてください。

2
Pierz

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

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

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

1- VirtualBox UIで共有フォルダーを作成し、Mac OSでVMSharesという名前のフォルダーをポイントし、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ダイアログボックスで割り当てた任意の名前ではなく、実際の(ホスト)フォルダー名を取得する必要がありました。

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

0
Farshid

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

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

0
Cranky

Ubuntu LTS-18にアップデートした後(そしてVirtualBoxに何も変更を加えず、拡張機能とblah-de-blahを再インストールした後)、自動マウントが機能しなくなりました。 sf_xxxディレクトリは/media/にありましたが、実際にはマウントされていませんでした。

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

didが最終的に機能するのは-私はそれを臭いハックと見なしていますが-上記のcrontabトリックです。

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

0
Mike Robinson

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

うまくいったのは、supervisorをインストールして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
Eugene Gekhter