问题描述
我在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 “shared folder”,我们有两个选择。个人偏好取决于我们的设置中哪个选项效果最佳。
1.用fstab安装
要使用随Guest Additions提供的vboxsf
文件系统安装共享文件夹,我们首先需要确保在Ubuntu guest虚拟机中挂载VirtualBox共享文件夹时出错。然后我们可以在etc/fstab
文件中放入以下行:
<name_of_share> /path/to/mountpoint vboxsf <options> 0 0
将name_of_share
和/path/to/mountpoint
替换为您的个人设置(必须首先创建安装点的目录)。请参阅安装<options>
的联机帮助页。一种可能性是使用defaults
进行安装,或者提供特定的安装选项(例如rw, suid, exec, auto, users
)。
在某些系统上,vboxsf
内核模块在引导时读取fstab
时尚未加载。然后,可以将vboxsf
内核模块附加到/etc/modules
。
某些系统可能在其fstab条目(source)中需要选项comment=systemd.automount
。
2.使用Virtual Box “automatic mounting”安装:
在Virtual Box的最新版本中,我们还可以在创建时自动挂载共享文件夹:
重新启动guest虚拟机后,此共享文件夹将挂载到guest虚拟机目录/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
中的条目
第三种解决方法
经过一个疲惫的早晨,尝试在Uboxntu 16.04中运行Virtualbox 5.0.20的所有内容都失败了(特别感到失望的是rc.local解决方案无效),它的工作原理是:
-
从Virtualbox GUI的“共享文件夹”菜单注册所需的目录,但不自动挂载或从Virtualbox永久挂载。否则主机目录由root挂载,即使是来自管理员组,non-root用户也很难访问。
-
在fstab中添加简单条目:
[VirtuablBoxNameOfMount] /media/[guestOSuser]/[mountSubdir] vboxsf rw, noauto 0 1
注意
noauto
选项 – 否则引导加载程序会失败,如上所述。 -
通过在来宾操作系统中使用命令visudo,将相应的行添加到
/etc/sudoers
:ALL ALL = NOPASSWD: /bin/mount /media/[guestOSuser]/[mountSubdir]/
这将允许non-root进程专门安装它(因为fstab无法使用’user’选项安装…)
-
将相应的行添加到用户的.profile:
sudo mount /media/[guestOSuser]/[mountSubdir]/
现在,登录后所选用户的所选主机子目录为ready-mounted!
第四种方法
我尝试了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
。
确保可以运行此功能。在shell类型上:
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> ...]
保存(Ctrl
O
)并关闭它(Ctrl
X
)
此时,我们会在启动时自动挂载<SharedFolder>
上列出的所有共享文件夹。
要卸载它,我们只需要输入:
sudo nano /etc/rc6.d/K99-vboxsf-umount.sh
#!/bin/bash
. /opt/.scripts/VBoxShared --umount <SharedFolder1> [<SharedFolder2> <SharedFolder3> ...]
exit 0
保存(Ctrl
O
)并关闭(Ctrl
X
)
sudo chmod a+x /etc/rc6.d/K99-vboxsf-auto.sh
就这样!
第六种方法
这是一个有效的解决方案。
作为root(I.E. sudo su)转到home文件夹(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秒睡眠允许足够的时间让一切准备就绪。
参考资料