Win10下Ubuntu16.04虚拟机共享文件夹编译ONOS报Permission denied如何解决
问题根因
本次报错和vboxsf用户组权限无关,核心原因是VirtualBox共享文件系统(vboxsf)默认禁止Guest虚拟机内创建软链接,报错日志中create_symlink对应的Operation not permitted正是该限制触发的。
解决方案
方案一:启用共享文件夹软链接创建权限(可直接在共享文件夹内完整编译)
- 关闭运行中的Ubuntu16.04虚拟机
- 在Windows宿主机打开cmd/PowerShell,进入VirtualBox安装目录(默认路径为
C:\Program Files\Oracle\VirtualBox),执行以下命令:
示例:如果虚拟机命名为VBoxManage setextradata "你的虚拟机名称" VBoxInternal2/SharedFoldersEnableSymlinksCreate/你的共享文件夹名称 1Ubuntu16.04,共享文件夹的名称为EC,命令对应为:VBoxManage setextradata "Ubuntu16.04" VBoxInternal2/SharedFoldersEnableSymlinksCreate/EC 1 - 调整Windows宿主机权限:
- 方案A:每次启动VirtualBox时右键选择「以管理员身份运行」
- 方案B:打开Windows本地安全策略,在「本地策略→用户权限分配→创建符号链接」中添加你的Windows当前用户,配置完成后重启Windows生效
- 启动虚拟机,进入共享文件夹执行
ln -s test.txt test.link测试软链接创建,无报错即可正常执行ONOS编译命令。
方案二:编译输出重定向(无需修改宿主机配置,源代码仍保留在共享文件夹同步)
如果不想调整宿主机配置,可将编译生成的文件全部写入虚拟机本地磁盘,仅保留源代码在共享文件夹:
- 在虚拟机本地磁盘创建编译输出目录:
mkdir -p ~/onos_build/buck-out - 进入ONOS源码目录,将编译输出目录软链接到本地路径:
cd $ONOS_ROOT ln -s ~/onos_build/buck-out buck-out - 正常执行原编译命令即可,所有编译过程生成的临时文件、软链接都会写入虚拟机本地磁盘,不会触发共享文件夹的权限限制。
额外验证项
如果配置后仍有问题,可检查共享文件夹挂载参数,编辑/etc/fstab添加如下挂载规则:
sf_EC /media/sf_EC vboxsf defaults,uid=1000,gid=999,symlink 0 0
其中uid=1000为用户jack的用户ID(可执行id jack查询确认),gid=999为你已确认的vboxsf组ID。
内容的提问来源于stack exchange,提问作者Batterie
相关产品推荐
相关产品推荐

