Linux——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 组后面添加自己的用户名
我实际操作一番,证实可行:
或者:
然后以普通用户身份访问:
成功。
参考资料:
- https://www.cnblogs.com/xing901022/p/5774677.html
- https://blog.csdn.net/xubaiquan/article/details/54879619
- https://www.cnblogs.com/kerrycode/p/5715642.html
- https://blog.csdn.net/caoleiwe/article/details/78583676
- https://jingyan.baidu.com/article/647f0115ab16f17f2048a861.html