如何在启动时挂载VirtualBox共享文件夹?
我在Virtualbox中安装了Ubuntu。 我想在登录Ubuntu时自动在Ubuntu中挂载我的VirtualBox共享文件夹。 我把以下行放在~./bashrc和〜/ .bash_profile中:
sudo mount -t vboxsf windows_share /media/windows_share
其中windows_share是我用Virtualbox创建的名称。 但每次我启动我的Ubuntu时,它都要求我输入passwd,因为它需要sudo。 无论如何我每次登录时都会自动挂载Windows共享而不输入密码?
要在启动Ubuntu guest虚拟机时始终安装Virtual Box“共享文件夹”,我们有两个选项。 个人偏好取决于我们的设置中哪个选项效果最佳。
1.用fstab安装
要使用随Guest Additions提供的vboxsf
文件系统挂载共享文件夹,我们首先需要确保满足先决条件 。 然后我们可以在etc/fstab
文件中放入以下行:
/path/to/mountpoint vboxsf 0 0
将name_of_share
和/path/to/mountpoint
替换/path/to/mountpoint
与您的个人设置(必须首先创建mountpoint的目录)。 请参阅mount
的联机帮助页。 一种可能性是使用defaults
挂载,或者提供特定的挂载选项(例如rw, suid, exec, auto, users
)。
在某些系统上,在启动时读取fstab
尚未加载vboxsf
内核模块。 然后,它可以帮助将vboxsf
内核模块附加到/etc/modules
。
某些系统可能在其fstab条目( 源 )中需要选项comment=systemd.automount
。
2.使用Virtual Box“自动安装”安装:
在Virtual Box的最新版本中,我们还可以在创建时自动挂载共享文件夹:
重新启动guest /media/
后,此共享文件夹将挂载到guest /media/
目录/media/
,这些用户可以访问已成为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
的条目
经过一个疲惫的早晨,尝试在Uboxntu 16.04中运行Virtualbox 5.0.20的所有内容都失败了(特别感到失望的是rc.local解决方案无效),它的工作原理是:
-
从Virtualbox GUI的“共享文件夹”菜单注册所需的目录,但不自动挂载或从Virtualbox永久挂载。 否则,主机目录是以root身份挂载的,即使是来自管理员组的非root用户也很难访问。
-
在fstab中添加简单条目:
[VirtuablBoxNameOfMount] /media/[guestOSuser]/[mountSubdir] vboxsf rw, noauto 0 1
注意
noauto
选项 – 否则引导加载程序会失败,如上所述。 -
通过在来宾操作系统中使用命令visudo,将相应的行添加到
/etc/sudoers
,如下所示:ALL ALL = NOPASSWD: /bin/mount /media/[guestOSuser]/[mountSubdir]/
这将允许非root进程专门安装它(因为fstab无法使用’user’选项安装…)
-
将相应的行添加到用户的.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 <...>" 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
。
确保可以运行此function。 在shell类型上:
sudo chmod a+x /opt/.scripts/VBoxShared.sh
现在,我们在rc.local
上添加一行运行此脚本:
sudo nano /etc/rc.local
然后我们在最后一行( exit 0
)之前添加这些行:
. /opt/.scripts/VBoxShared.sh --mount [ ...]
保存( Ctrl O )并关闭它( Ctrl X )
此时,我们会在启动时自动挂载
上列出的所有共享文件夹。
要卸载它,我们只需要输入:
sudo nano /etc/rc6.d/K99-vboxsf-umount.sh
#!/bin/bash . /opt/.scripts/VBoxShared --umount [ ...] exit 0
保存( Ctrl O )并关闭( Ctrl X )
sudo chmod a+x /etc/rc6.d/K99-vboxsf-auto.sh
就这样!
这是一个有效的解决方案。
作为root(IE sudo su)转到主文件夹(cd~)并创建一个cron文件:
vi cronjobs
添加以下内容
@reboot sleep 15; mount -t vboxsf app / mnt / app
保存存档
注意:将app替换为您要共享的共享文件夹名称和/ mnt / app。 在这种情况下,我首先在mount(mkdir app)下创建了文件夹app。
以root身份启用cron(对于上面的文件名)
crontab cronjobs
确保cron处于活动状态:
crontab -l
重启,它将被挂载。 15秒睡眠允许足够的时间让一切准备就绪。
我最近在更新到Ubuntu LTS-18之后遇到了这个线程(并且没有对VirtualBox进行任何更改,并且在重新安装扩展和blah-de-blah之后),自动挂载停止工作。 sf_xxx
目录存在于/media/
但实际上并未安装它们。
尝试将它们安装在/etc/fstab
(如VirtualBox自己的文档所示)不起作用:启动失败进入“紧急模式”,即使我修改了/etc/modules
文件。
最终工作的是什么 – 虽然我认为它是一个臭名昭着的黑客 – 是上面描述的crontab
技巧。
直到今天,我还不知道“什么破了”。
我遇到了一个问题,我可以看到共享文件夹,但其中没有文件。 所以我做了类似于上面显示的hack:
我确保我的用户位于正确的组中,并且fstab中有一个用于挂载共享的条目,并且权限设置正确,并且在VirtualBox设置中启用了自动挂载,但仍然没有要看的文件。
所以我在Ubuntu 18.04 GUI中打开了启动应用程序应用程序并创建了一个在启动时只运行“sudo mount -a”的任务。 无论出于何种原因,在启动时自动解析fstab时,共享文件夹未正确安装,因此重新安装所有内容似乎可以解决问题。 现在我可以看到共享中的文件。