UbuntuをVirtualboxにインストールしています。 Ubuntuにログインしたときに、UbuntuでVirtualBox共有フォルダーを自動的にマウントしたい。 〜。/ bashrcおよび〜/ .bash_profileに次の行を追加します。
Sudo mount -t vboxsf windows_share /media/windows_share
ここで、windows_shareはVirtualboxで作成した名前です。しかし、Ubuntuを起動するたびに、sudoが必要なのでpasswdを要求されます。とにかく、ログインするたびにパスワードを入力せずにWindows共有を自動的にマウントする方法はありますか?
Ubuntuゲストの起動時にVirtual Boxの「共有フォルダー」を常にマウントするには、2つのオプションがあります。私たちの設定でどのオプションが最適に機能するかは、個人の好み次第です。
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 )。
Virtual Boxの最近のリリースでは、作成時に共有フォルダーを自動的にマウントすることもできます。
ゲストの再起動後、この共有フォルダはゲストディレクトリにマウントされます/media/<username>/sf_<name_of_share>
グループのメンバーにされたすべてのユーザーがアクセス可能vboxsf
。
編集/etc/rc.local
Sudo -H gedit /etc/rc.local
exit 0
タイプの前:
mount.vboxsf windows_share /media/windows_share vboxsf
セーブ
(オプション)デスクトップまたはホームフォルダーへのショートカットを作成します。
ln -s /media/windows_share /home/freddy/Desktop
Sを押してマウントをスキップする、またはMを押して手動で修復するなどのエラーなしで起動するには、fstab
のエントリを削除する必要があります。
Virtualbox 5.0.20で実行されているUbutntu 16.04で上記のすべてを試してみて疲れた朝(特にrc.localソリューションが機能しなかったことに失望しました)は、次のように機能しました。
Virtualbox GUIの[共有フォルダー]メニューから必要なディレクトリを登録しますが、自動マウントまたはVirtualboxからの永続的なマウントは行いません。それ以外の場合、ホストディレクトリはルートによってマウントされ、管理者グループからでも非ルートユーザーがアクセスするのは苦痛です。
fstabに簡単なエントリを追加します。
[VirtuablBoxNameOfMount] /media/[guestOSuser]/[mountSubdir] vboxsf rw, noauto 0 1
注noauto
オプション-さもなければ、前述のようにブートローダーが失敗します。
ゲストOS内からコマンドvisudoを使用して、次のように/etc/sudoers
に対応する行を追加します。
ALL ALL = NOPASSWD: /bin/mount /media/[guestOSuser]/[mountSubdir]/
これにより、非ルートプロセスがこれを具体的にマウントできるようになります(fstabは「ユーザー」オプションでマウントできないため...)
ユーザーの.profileに対応する行を追加します。
Sudo mount /media/[guestOSuser]/[mountSubdir]/
これで、選択したホストのサブディレクトリが、ログイン時に選択したユーザーに対してすぐにマウントできるようになりました!
Rc.localソリューションを試しましたが、動作しませんでした。
しかし、問題の原因はコマンドを実行したフォルダーにあるようです(理由はわかりません)。そこで、mountコマンドの前にディレクトリをホームフォルダーに変更する行を追加しましたが、現在は機能しています。
したがって、私のWindows共有はDropbox
と呼ばれ、私のマウントポイントは/home/jamie/Dropbox
、私のユーザー名はjamie
です。これがrc.localにあるものです:
cd /home/jamie
mount.vboxsf /home/jamie/Dropbox Dropbox vboxsf
exit 0
上記で提案された非常に類似したモードでそれを行いますが、これらのスクリプトは必要なものを作成し、次のスクリプトで共有フォルダーをマウントまたはアンマウントします:
#!/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
そして、それだけです!
これが実用的なソリューションです。
ルート(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秒のスリープでは、すべてのマウントの準備が整うのに十分な時間を確保できます。
より新しい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
を使用して適切にエスケープされた名前を見つけてください。
(私の場合、ホスト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ダイアログボックスで割り当てた任意の名前ではなく、実際の(ホスト)フォルダー名を取得する必要がありました。
上記の手順により、私の問題は解決しました。
共有フォルダーが表示される問題が発生していましたが、ファイルがありませんでした。そこで、上記のようなハックを行いました。
ユーザーが正しいグループに属していること、共有をマウントするためのエントリがfstabにあること、パーミッションが正しく設定されていること、VirtualBox設定で自動マウントがオンになっていることを確認しましたが、見られるファイル。
だから、Ubuntu 18.04 GUIでStartup Applicationsアプリを開き、起動時に「Sudo mount -a」を実行するだけのタスクを作成しました。何らかの理由で、ブート時にfstabが自動的に解析されたときに共有フォルダーが正しくマウントされていなかったため、すべてを再マウントすると問題が解決したようです。これで、共有内のファイルを確認できます。
Ubuntu LTS-18にアップデートした後(そしてVirtualBoxに何も変更を加えず、拡張機能とblah-de-blahを再インストールした後)、自動マウントが機能しなくなりました。 sf_xxx
ディレクトリは/media/
にありましたが、実際にはマウントされていませんでした。
それらを/etc/fstab
(VirtualBoxのドキュメントで示唆されているように)にマウントしようとしても機能しませんでした。/etc/modules
ファイルを変更した場合でも、ブートが「緊急モード」に失敗しました。
didが最終的に機能するのは-私はそれを臭いハックと見なしていますが-上記のcrontab
トリックです。
今日まで、私は「何が壊れたのか」は知りません。
ここですべてのソリューションを試しましたが、どれも機能しませんでした。
うまくいったのは、supervisorをインストールしてpythonスクリプトを実行することでした。
apt-get install supervisor
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
Sudo supervisorctl
reread
add shared_folders