如何在VirtualBox中访问共享文件夹?

我按照在VirtualBox中共享Windows 7和Ubuntu文件夹的步骤进行操作。 尽管如此,该文件夹显示为带有X标志,并且当我尝试打开它时出现以下消息: “无法显示文件夹内容。” 当我从VirtualBox的“设备”菜单中选择“共享文件夹”时,会显示以下警告: “在系统页面上,您已将超过50%(2.93 GB)的计算机内存分配给虚拟机...” 我应该如何成功地在Windows和Ubuntu之间使用VirtualBox共享文件夹?

请注意,您不能共享符号链接! - Joel Sjögren
10个回答

在Virtual Box中访问共享文件夹

命令行

默认情况下,VirtualBox共享文件夹对客户机具有读写权限。可以通过主机上的命令行来完成此操作:

VBoxManage sharedfolder add "VM name" --name sharename --hostpath "C:\test"
通过添加选项--readonly,我们可以限制只能以只读方式访问这些共享文件夹。如果您只希望在当前会话中显示这些共享文件夹,但不希望它们在后续会话中保持持久性,请使用--transient选项。对于共享文件夹存在一些限制(有关详细信息,请参见this question)。如果满足先决条件,我们可以通过在虚拟机中运行以下命令手动挂载这些共享文件夹:
mkdir /home/<user>/vboxshare
sudo mount -t vboxsf -o uid=1000,gid=1000 sharename /home/<user>/vboxshare  
当然,我们也可以使用不同的挂载选项来以只读方式挂载,或者仅将根目录设置为具有读取权限的方式进行挂载。 通过Virtual Box Manager自动挂载 如果我们在Virtual Box Manager中启用了自动挂载功能,并从中创建了共享文件夹,这些共享文件夹将自动在客户机中挂载,挂载点为/media/sf_<name_of_folder>。要访问这些文件夹,客户机中的用户需要成为vboxsf组的成员。
sudo usermod -aG vboxsf $USER
客人需要重新启动才能添加新的组。 来源和进一步阅读:Virtual Box 用户手册

19我在GUI中设置了一个共享文件夹,并设置了自动挂载。重启虚拟机后,进入/media目录,但仍然没有看到任何内容。 - amphibient
2@amphibient @laike9m 我不得不重新启动虚拟机才能在/media/目录下看到文件夹。 - David_G
9这个命令是在这里的另一个答案中提出的建议,看起来更清晰,并且输出效果更好:sudo adduser your_username vboxsf - Jordan Brough
1@JordanBrough:完全正确 - 所有的方法都通向罗马。你甚至可以使用一个图形化前端users-admin。该命令被另一个用户编辑过。 - Takkat
谢谢你的回答。在你上面提到的命令中 sudo mount -t vboxsf -o uid=1000,gid=1000 share /home/<user>/vboxshare,我没有看到 sharename 的提及,而在使用 VBoxManage sharedfolder add "VM name" --name "sharename" --hostpath "C:\test" 创建共享文件夹时是需要用到的。如果有多个共享文件夹,VirtualBox 如何知道将 vboxshare 文件夹与哪个 sharename 关联起来?或者你是指 sharename 应该与 vboxshare 相同吗? - alpha_989
@alpha_989: share"sharename"是一样的,但你应该为挂载点~/vboxshare选择一个不同的名称。不同的共享需要不同的挂载点。 - Takkat
啊..我也是这么想的..也许..在上面的回答中,share 应该改成 sharename,以保持命名的一致性。 - alpha_989
请注意,在虚拟机的情况下,您需要重新启动客户系统。仅仅注销并重新登录是不够的。 - Jan Kalfus
使用Vbox,您可以选择从共享文件夹菜单中自动挂载。 唯一剩下的需要是 sudo usermod -aG vboxsf 用户名 然后重新启动用户以便能够访问它。 - montss
当文件夹/文件是为根目录时,我遇到了一些问题。 - Yakob Ubaidi
@Yakob 这是设计的目标和预期行为。共享文件夹应该可以被运行虚拟机的用户访问,最好放在HOME目录下或者挂载在那里的分区中。 - Takkat
错误的文件系统类型,错误的选项,在<共享名称>上的坏超级块,缺少代码页或辅助程序,或其他错误。真糟糕:在Linux上总是出问题。那句话说得对:“如果你的时间不值钱,Linux就是免费的”。 - Jeroen van Langen

实际上有一个简单的方法来做到这一点:
  1. 安装VirtualBox的扩展包。
  2. 重新启动您的虚拟机
  3. 在您的客户机Ubuntu中安装Guest Additions
  • 您可以挂载位于/media目录下的ISO文件,或按下左Ctrl+D
4. 重新启动 5. 尝试访问 /media/sf_your_shared_folder_name。如果仍然无法访问,这意味着您不属于 vboxsf 组。在虚拟机中运行以下命令: sudo adduser your_vm_username vboxsf 6. 注销并重新登录以应用 adduser 的更改。如果仍然无法访问文件夹,请尝试重新启动。 7. 如果仍然无法看到共享文件夹,则需要挂载它。您可以在 VirtualBox 管理器的选项中激活共享文件夹的自动挂载。 8. 再次重启。

9这个。我不是在用户组里。看起来这应该通过最新的添加自动化完成,或者至少要明确说明。 - AwokeKnowing
1对我来说,问题似乎是我的用户名不是root。这应该在某个地方提到过。 - AwokeKnowing
24重要提示:在调用adduser命令后,您必须重新启动计算机。 - kol
5@kol 不,您只需要退出并重新登录。 - Atcold
@Atcold 登出并重新登录会将该组添加到当前用户(会话)中,但在我的情况下并没有触发共享文件夹的自动挂载。只有重启才能实现。 - scai
在我的情况下,不需要安装VirtualBox扩展包。 - SilverCorvus
谢谢,adduser命令解决了我的问题(无法在没有root权限的情况下访问/media/中的共享文件夹)。不需要扩展包。 - Juhele
一旦按照上述步骤正确设置共享文件夹,它也会出现在来宾的Nautilus文件浏览器中。 - ntc2
sudo adduser your_username vboxsf 是我通过VirtualBox界面添加的共享目录访问命令。 - apaderno
退出并重新登录以应用adduser的更改:对我来说,只需打开一个新终端就足够了,这意味着不需要注销。 - Fabio says Reinstate Monica
为了访问SF文件夹,我不得不成为root用户来获取mint。 - Climbs_lika_Spyder

首先,请确保您已安装了Guest Additions。
  1. 启动虚拟机
  2. 设备 > 插入Guest Additions CD映像... 插入Guest Additions CD映像...
  3. 挂载CD:
  4. sudo mount /dev/cdrom /media/cdrom
    
  5. 安装必要的软件包:
  6. sudo apt-get install make gcc linux-headers-$(uname -r)
    
  7. 安装:
  8. sudo /media/cdrom/VBoxLinuxAdditions.run
    
第二步,将您的用户添加到'vboxsf'组中:
~$ echo $USER; 
ahmed
~$ sudo usermod -a -G vboxsf ahmed

重新启动

请知道你共享文件夹的标签是lpi(例如):

Edit shared folder

在标签前加上sf_。然后,你会在/media/sf_lpi下找到你的共享文件夹。 最后,你还可以创建一个指向你的主页的链接。例如:
ln -s /media/sf_lpi /home/ahmed/lpi

:)


我能在没有硬盘映像的情况下,只使用Ubuntu Live CD映像来使用共享文件夹吗?基本上,我想要添加两个光驱,一个放置Ubuntu Live CD,另一个放置VBGuestAdditions.iso,并启动虚拟机,然后在回环根目录中安装VBGuestAdditions,最后我希望能够访问共享文件夹。 - Sorin Postelnicu
还有,有没有办法在挂载之前查看共享文件夹,比如使用类似lsblk的命令? - Sorin Postelnicu
每当我尝试执行"sudo mount -t vboxsf mysharename mysharemountpoint"命令时,总是会出现以下错误信息:"/sbin/mount.vboxsf: 挂载失败,错误为:没有此设备"。 - Sorin Postelnicu

使用vBox图形界面将共享文件夹添加到虚拟机中 确保选择自动挂载永久保存

使用root账户登录虚拟机

检查vboxsf组是否存在

~$ grep vboxsf /etc/group
vboxsf:x:125:
检查用户是否已经在vboxsf组中。
~$ id nilo
uid=1000(nilo) gid=1000(nilo) groups=1000(nilo),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare)
将用户nilo添加到vboxsf组中。
~$ sudo usermod -a -G vboxsf nilo
请再次检查用户组。
~$ id nilo
uid=1000(nilo) gid=1000(nilo) groups=1000(nilo),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare),125(vboxsf)
重新启动并登录为nilo。 共享文件夹现在可以在/media/sf_dropbox中访问(dropbox是我给共享命名的名称)。

重启对我有效! - Tarik

在主机操作系统(Windows)和客户操作系统(Ubuntu,虚拟机)之间共享文件夹

步骤1 从VirtualBox菜单中安装Guest Additions,进入Devices->Install Guest Additions 这将在/media/cdrom上挂载一个虚拟CD。以root用户身份使用“Open with terminal”选项打开此/media/cdrom添加的文件夹(右键点击)。

步骤2 运行程序VBoxLinuxAdditions.run。当程序完成后重新启动VirtualBox。

$ sudo ./VBoxLinuxAdditions.run
第三步 创建一个共享文件夹。在虚拟菜单中转到设备->共享文件夹,然后在列表中添加一个新的文件夹,此文件夹应该是您希望与Ubuntu(Guest OS)共享的Windows文件夹。 将创建的文件夹设置为自动挂载。 示例:在桌面上创建一个名为Ubuntushare的文件夹,并将其添加到这个文件夹中。 第四步 完成共享文件夹规格后,我们从Ubuntu(Guest OS)中挂载文件夹。 创建一个挂载点,在Ubuntu中这是一个与Windows共享文件夹共享文件的目录。 运行以下命令在Ubuntu中创建一个目录。
$ sudo mkdir ~/Desktop/windowsshare
第五步 创建了挂载点后,您现在可以挂载共享文件夹。 运行以下命令来共享文件夹:
$ sudo mount -t vboxsf Ubuntushare ~/Desktop/windowsshare
Ubuntushare是我们在VirtualBox设备部分添加的文件夹名称,该文件夹位于Windows(主机操作系统)中。 ~/Desktop/windowsshare是Ubuntu(客户操作系统)中的目录。 恭喜! 现在您可以在Windows和Ubuntu之间共享文件。尝试在Windows(主机操作系统)的Ubuntu共享文件夹中添加任何文件,然后检查Ubuntu(客户操作系统)的windowsshare目录,文件将会反映出来。 我的文章 {{link1:Windows和Ubuntu之间的共享文件夹}}

截至目前(VirtualBox的版本为6.0.10),共享文件夹有“make permanent”和“auto-mount”选项,还有VirtualBox图形用户界面中的“mount point”(在GUI中称为“At”)。对我来说,以下操作有效: 1. 在Ubuntu虚拟机上执行命令:sudo apt-get install virtualbox-guest-utils 2. 在VirtualBox的图形用户界面中添加共享文件夹。 3. 重新启动虚拟机操作系统。 在GUI中指定的挂载点上会自动创建文件夹,并且ls命令会显示位于Windows主机上的文件。

1在我的Virtualbox中运行sudo命令创建了vboxsf! - Climbs_lika_Spyder
谢谢。在更新Ubuntu后,我的共享文件夹显示为空。安装了这个软件包并重新添加它们后,它们显示了它们应该有的内容。 - Arthur Bowers

晚到派对,但这是对我很有效的解决方案: 确保您已安装了Guest Additions
  • 以及所有必要的软件包:linux-headersbuild-essentialgccmake...
添加共享文件夹
  • 在VirtualBox管理器中选择您的虚拟机(VM)
  • 设置 >> 共享文件夹 >> 添加新的共享文件夹
  • 文件夹路径:与您的VM共享的文件夹的路径
  • 文件夹名称:在您的VM中显示的共享文件夹的名称
  • 选中自动挂载选项,这样它会在VM启动时自动挂载该文件夹
添加共享文件夹后,您的文件夹将在VM中显示为sf_<folder_name>
  • 问题是,除非您以root用户登录,否则无法访问它
给共享文件夹授权。打开终端(Ctrl+Alt+T)并输入以下命令:
sudo usermod -a -G vboxsf <username>
sudo chown -R <username>:users /media/sf_<folder_name>
  • 其中<username>是您的用户名,<folder_name>是共享文件夹的名称
  • 这些命令的作用是:
    1. 将用户添加到vboxsf
    2. 更改共享文件夹(包括所有文件和子目录)的所有权为该用户
重新启动您的VM

1这在VirtualBox 6.1.32上与Ubuntu 20.04.3 LTS的虚拟机客户端完美运行。 - dan

  1. 从软件中心安装名为“程序和组”的程序
  2. 选择当前用户,点击“管理组”
  3. 选择vboxsf并点击“添加”
  4. 重新启动

无法在软件中心找到Mint 17.1,但菜单中有用户和组,是这个吗? - russ_hensel
@russ_hensel Mint不是官方的Ubuntu版本。请到Unix & Linux上提问。 - wjandrea

  1. 创建一个目录,用于挂载这个文件夹,比如 mkdir docs

  2. 将Guest Additions安装到Ubuntu虚拟机中。

  3. 关闭Ubuntu虚拟机,然后进行配置。

  4. 在存储中设置共享文件夹,并记下你在第二个字段中设置的名称。例如,“crazy”。勾选“自动挂载”选项。

  5. 启动Ubuntu虚拟机。

  6. 就像你说的那样,它实际上是无法访问的。(这是你问题的关键部分。)相反,你会发现它存在于/media/sf_crazy,其中'crazy'是你给它的名称。而且,它也会存在于你的主目录下的~/crazy

  7. 现在你需要再进行一步来实际挂载它:

    sudo mount -o uid=1000,gid=1000 -t vboxsf ~/crazy ~/docs
    

安装完“增强功能”后,请执行以下步骤。对于Windows 10主机环境,在Windows机器上,我需要共享文件夹。
  1. 右键点击要共享的文件夹
  2. 选择“共享给”
  3. 选择“特定的人”
  4. 选择“所有人”,读/写选项
  5. 在客户端Ubuntu机器上运行命令:sudo adduser xxxxxxx vboxsf

其中xxxxxx是您的用户帐户名称。注销并重新登录到Ubuntu。