Linux——VirtualBox宿主机与虚拟机文件夹共享

 版权声明:原创文章,转载请注明出处。

 

VirtualBox主机与虚拟机文件夹共享

1. VirtualBox简介:

VirtualBox是一款开源虚拟机软件,可在Linux、Mac和Windows主机中运行。

 

2. 文件夹共享:

有时我们需要在宿主机和虚拟机之间共享文件及,VirtualBox允许我们将宿主机文件夹以共享的方式供虚拟机访问。

本文针对VirtualBox中主机与虚拟机的文件夹共享问题,给出详细的解决步骤。

 

3. 环境

  • 主机为Mac OS X 10.13.6操作系统;
  • VirtualBox 5.2.18版本;
  • 虚拟机为Ubuntu 18.04.1 LTS操作系统

 

4. 方法/步骤

1. 设置共享文件夹

打开VirtualBox和虚拟机,在VirtualBox主界面选择「设置」:

单击「设置」后在弹出的对话框中选择「共享文件夹」,然后点击右侧「+」号选择添加共享文件夹:

在弹出的对话框中选择「其他」:

然后在弹出的文件浏览器内选择自己想要共享的文件夹,单击「打开」:

确认文件夹装载配置,默认「只读分配」、「自动挂载」、「固定分配」都未选中:

将「自动挂载」、「固定分配」选中:

点击「OK」:

应用设置,单击「OK」:

此时宿主机的共享文件夹已经在VirtualBox中设置好了。

 

2. 安装增强功能

利用VirtualBox的增强功能,我们可以将第一步中设置为共享的文件夹以挂载(mount)的方式添加到虚拟机(Ubuntu)的文件系统。但是VirtualBox的增强功能需要自己启用才能使用。

如下:

进入虚拟机,可以看到VirtualBox VM的菜单栏,其中有一项「Devices」:

点击「Devices」,选择「Insert Guest Addtions CD image」:

按照教程:https://blog.csdn.net/caoleiwe/article/details/78583676,此时如果插入「CD image」正常,之后按部就班,就会有文件夹被挂载到/media下,进入该文件夹下,输入 ls -al ,可以看到有 VBoxLinuxAdditions.run 这一脚本:

进入root,运行:

sudo ./VBoxLinuxAdditions.run

等待安装完成:

之后进入 /media 文件夹,可以看到之前设置共享的文件夹已经出现在了 /media 之下,并且文件夹名称以 sf_ 为前缀:

此时利用VirtualBox的增强功能共享宿主机的文件夹到虚拟机的 /media 文件夹下就完成了。

 

3. 异常

但是我的 VBoxGuestAddtions.iso 并为如预期成功插入,如图:

网上找了各种教程,然而并未搜索到适用于这种情况的解决方案,头疼了两天,突然顿悟,只要能将VBoxGuestAddtions.iso成功传入虚拟机,能够运行其中的 VBoxLinuxAdditions.run 脚本应该能行。

于是在mac系统中按照:

「Finder」——> 「应用程序」——> 「VirtualBox」 ——> 「右键」——> 「显示包内容」

在路径:

/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAddtions.iso

找到 VBoxGuestAddtions.iso ,将其利用scp命令传入虚拟机(Ubuntu),前提是宿主机和虚拟机开通了scp服务,且有可供登陆的账号。

 

具体操作如下:

1)先上传:

利用scp命令传输文件: scp -P 1111 VBoxGuestAdditions.iso laughing@127.0.0.1:/home/laughing/ 

ssh登陆设置可见:https://www.cnblogs.com/oddcat/articles/9676817.html,

scp命令使用可见:http://www.runoob.com/linux/linux-comm-scp.html

2)挂载

上传成功后,利用 mount 命令将 VBoxGuestAddtions.iso 挂载:

首先在 /mnt 文件夹下新建 /cdrom 文件夹,用以存放 VBoxGuestAddtions.iso 的挂载文件:

cd /mnt
sudo mkdir cdrom

然后执行挂载命令:

sudo mount -o loop /xx/xx/VBoxGuestAddtions.iso /mnt/cdrom

#/xx/xx/VBoxGuestAddtions.iso是之前将VBoxGuestAddtions.iso上传到虚拟机所在的路径

3)执行脚本

进入 /mnt/cdrom 文件夹可以看到所需的脚本已经包含其中:

进入 sudo 模式:

执行脚本:

4)共享成功

进入 /media 文件夹可以看到文件夹共享成功:

(2018-10-16)在Ubuntu发行版中此步以上设置完毕后共享成功,但是用自己编译的内核4.19.0-rc7中,最后一步会失败。

5)直接挂载

我们已经说过,在 /media 中共享的文件夹都以 sf_ 作为前缀,我们可以直接利用挂载命令自定义文件夹名称:

执行完脚本 sudo ./VBoxLinuxAddtion.run 后,先在/media下新建共享文件夹,如:

sudo mkdir /mnt/Shared

切换到 root 用户输入挂载命令:

sudo mount -t vboxsf Shared /mnt/Shared

然后进入 /mnt/Shared 文件夹即可看到宿主机共享文件夹内的文件。

注意上述 mount 命令格式为:

sudo mount -t vboxsf 共享文件夹名称(在设置页面设置的) 挂载的目录(可为任意目录)

 

 5. 问题反馈

 

【问题描述】:

一开始在设置共享文件夹阶段,我一共共享了两个文件夹,分别通过安装增强功能和用mount直接挂载,最终在 /media 文件夹下得到了四个文件夹:

但是有同学向我反馈以sf_开头的文件夹在普通用户模式下不能打开:

通过查看文件夹读写权限:

发现在普通模式下普通用户没有读写执行(rwx)的权限,但是进入root模式是可以进入并访问内部文件的:

我们想到只要修改权限,在普通用户模式下也应该可以访问:

但是还是失败了:似乎我们即使是在root模式下也不能修改sf_文件夹的权限。

那么通过mount命令挂载得到的共享文件夹呢,

可以看到普通用户对它们是有读(即访问)权限的,然而遗憾的是,我们得到的也不过是个 fake ,因为我在其中放的文件无法访问:

但是其中是有内容的:

 

【问题总结】:

1. 设置可以真正共享文件的文件夹需要通过安装增强功能来实现;

2. 共享成功的文件夹只能在root模式下访问。

 

【其他】:

当然可能是我自己依旧知识浅薄,没找到好的解决方法。

上面的问题来自于本科课程群里的一位同学的反馈,在此感谢这位同学!

如果大家有其他的解决方式,欢迎向我反馈!

 

 


 

 

(2018-9-24日更新) 

【解决方法】

 

援引tisonkun的评论:

最后权限的问题是可解的,问题点在于 virtual box 的共享文件夹权限设死了用户组是 vboxsf,所以只要你把自己的用户名加入到组里就可以了

比如  sudo adduser <username> vboxsf 
或者修改  /etc/group  文件,在 vboxsf 组后面添加自己的用户名

我实际操作一番,证实可行:

或者:

 然后以普通用户身份访问:

成功。

 

参考资料:

  1. https://www.cnblogs.com/xing901022/p/5774677.html
  2. https://blog.csdn.net/xubaiquan/article/details/54879619
  3. https://www.cnblogs.com/kerrycode/p/5715642.html
  4. https://blog.csdn.net/caoleiwe/article/details/78583676
  5. https://jingyan.baidu.com/article/647f0115ab16f17f2048a861.html
posted @ 2018-09-21 09:57  怪猫佐良  阅读(4563)  评论(2编辑  收藏  举报