Answers:
为了在启动Ubuntu客户机时始终挂载Virtual Box“共享文件夹”,我们有两个选择。根据个人喜好,哪种选择最适合我们的环境。
要使用Guest Additionsvboxsf
随附的文件系统挂载共享文件夹,我们首先需要确保满足先决条件。然后,我们可以将以下行放入文件中: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
时fstab
读取内核模块时尚未加载。然后,可能有助于将vboxsf
内核模块附加到/etc/modules
。
某些系统comment=systemd.automount
的fstab条目(源)中可能需要选择。
在最新版本的Virtual Box中,我们还可以在创建时自动挂载共享文件夹:
来宾重新启动后,此共享文件夹将被安装到来宾目录中/media/<username>/sf_<name_of_share>
,所有已成为该组成员的用户都可以访问该目录vboxsf
。
noauto
fstab选项,然后通常在启动脚本中安装(例如)。配置文件),选项2)的主要问题是vboxsf在fstab运行之前未加载,请追加vboxsf
到文件中/etc/modules
,要求内核在fstab运行之前加载模块。也许这会帮助别人。
编辑 /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
/etc/rc.local
对此进行了编辑mount -t vboxsf [-o OPTIONS] sharename mountpoint
。
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_point
dev是我的用户,FYI / etc / fstab也起作用!
mount
命令rc.local
脚本,包括我的用户ID( )。2000
mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf
PS如果有人正在寻找关于如何打开一个教程rc.local
在Ubuntu 17.04 这个一直为我工作。PPS我不需要在中包含vboxsf /etc/modules
。
经过一个筋疲力尽的早晨,尝试在Virtualbox 5.0.20中运行的Ubutntu 16.04中的所有上述操作均未成功(尤其令rc.local解决方案无法正常工作的情况),它的工作方式是:
从Virtualbox GUI的“共享文件夹”菜单注册所需目录,但不能自动挂载该目录,也不能从Virtualbox永久挂载。否则,主机目录是由root挂载的,非root用户甚至从admin组都很难访问。
在fstab中添加简单条目:
[VirtuablBoxNameOfMount] /media/[guestOSuser]/[mountSubdir] vboxsf rw, noauto 0 1
注意noauto
选项-否则引导加载程序将失败。
/etc/sudoers
在来宾操作系统中使用命令visudo 将相应的行添加如下:
ALL ALL = NOPASSWD: /bin/mount /media/[guestOSuser]/[mountSubdir]/
这将允许非root用户进程专门挂载此文件(因为fstab无法使用'user'选项挂载...)
在用户的.profile中添加相应的行:
sudo mount /media/[guestOSuser]/[mountSubdir]/
现在,选定的用户子目录在登录时已为选定的用户准备就绪!
noauto
?
对于较新的基于systemd的系统,您需要替代方法-最简单的方法是在另一个问题的另一个答案中提到的方法- 基本上说您需要comment
在/etc/fstab
条目中添加特殊选项:
src /my_mount/src_host vboxsf auto,rw,comment=systemd.automount 0 0
但是,要使上述方法在某些系统上起作用,您需要在VirtualBox的“共享文件夹”->“添加”对话框中选中“自动安装”框,这意味着您可能会在目录中多次重复安装。
对于更干净的安装-没有重复的目录,也不需要“自动安装”-您需要使用systemd的mount和automount指令。为此,/usr/lib/systemd/system/
在所需的挂载点之后在named中创建两个条目,例如,与上面的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
该名称查找适当的转义名称。
comment=systemd.automount
没有选中自动安装VBox的第一个带选项的解决方案也可以工作。在寻找解决方案之前,我奋斗了几天,谢谢!
我尝试了rc.local解决方案,但无法正常工作。
但是我发现问题似乎与您从中运行命令的文件夹有关(不知道为什么)。所以我在挂载命令之前添加了一行更改目录到我的主文件夹,现在它可以工作了。
因此,我的Windows共享名为Dropbox
,我的挂载点为/home/jamie/Dropbox
,我的用户名为jamie
,这是我在rc.local中输入的内容:
cd /home/jamie
mount.vboxsf /home/jamie/Dropbox Dropbox vboxsf
exit 0
sleep 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
就这样!
这是一个可行的解决方案。
以root用户身份(IE sudo su)转到主文件夹(
cd〜)并创建一个cron文件:vi cronjobs
添加以下
@reboot sleep 15; 挂载-t vboxsf应用程序/ mnt / app
保存存档
注意:将应用替换为共享文件夹名称,并将/ mnt / app替换为您要挂载的位置。在这种情况下,我首先在mount下创建了文件夹应用程序(mkdir app)。
要将cron作为root启用(对于上述文件名),
crontab cronjobs
确保cron处于活动状态:
crontab -l
重新启动,它将被安装。15秒的睡眠时间足以让一切准备就绪。
我在这里尝试了所有解决方案,但都没有成功。
起作用的是安装主管并运行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
(就我而言,我的主机操作系统是Mac OS X,而来宾操作系统是ubuntu)
以上解决方案都没有,这里和这里提到的解决方案都对我有用。他们所有人都有问题。
这是我最终为解决此问题所做的事情:
1-我在VirtualBox UI中创建了一个共享文件夹,指向VMShares
我的Mac OS中命名的文件夹,并将其命名wd
2-然后我安装了Ubuntu Guest Addition工具(需要重新启动)
3-然后我在来宾操作系统中创建了一个文件夹作为挂载点(在我的情况下,名称为/home/fashid/host
)
4-然后我跑了:
sudo VBoxControl sharedfolder list
这是要确保该共享对来宾OS可用的命令,同时您仍需要将其安装在来宾OS中以使其实际可用。
它将显示如下内容:
Shared Folder mappings (1):
01 - VMShares
这是把戏!它显示了您需要在下面的命令中放入的实际名称,以实际安装它并使它在来宾操作系统中可用:
sudo mount -t vboxsf VMShares /home/farshid/myshares
您知道这一点了吗?我以后没有在任何地方使用wd。在第3步中,我需要提取实际的(主机)文件夹名称,而不是我在GUI对话框中分配的任意名称。
通过上述步骤,我的问题得以解决。