当前位置: 首页>>技术教程>>正文


如何在启动时挂载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 “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的最新版本中,我们还可以在创建时自动挂载共享文件夹:

mount,virtualbox,ubuntu

重新启动guest虚拟机后,此共享文件夹将挂载到guest虚拟机目录/media/<username>/sf_<name_of_share>,该目录可供所有已成为vboxsf组成员的用户访问。

次佳解决方法

  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中的条目

第三种解决方法

经过一个疲惫的早晨,尝试在Uboxntu 16.04中运行Virtualbox 5.0.20的所有内容都失败了(特别感到失望的是rc.local解决方案无效),它的工作原理是:

  1. 从Virtualbox GUI的“共享文件夹”菜单注册所需的目录,但不自动挂载或从Virtualbox永久挂载。否则主机目录由root挂载,即使是来自管理员组,non-root用户也很难访问。

  2. 在fstab中添加简单条目:

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

    注意noauto选项 – 否则引导加载程序会失败,如上所述。

  3. 通过在来宾操作系统中使用命令visudo,将相应的行添加到/etc/sudoers

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

这将允许non-root进程专门安装它(因为fstab无法使用’user’选项安装…)

  1. 将相应的行添加到用户的.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秒睡眠允许足够的时间让一切准备就绪。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1063.html,未经允许,请勿转载。