如何在QEMU Linux客户机中挂载Mac主机文件夹并解决挂载后仅root可访问且只读的问题
如何在QEMU Linux客户机中挂载Mac主机文件夹并解决挂载后仅root可访问且只读的问题
首先先梳理下你的操作流程:你已经重新编译Debian内核并开启了9p协议所需的必要选项,用Homebrew安装了QEMU 8.2.1,启动虚拟机的命令如下:
/usr/local/bin/qemu-system-x86_64 \ -M accel=hvf \ --cpu host \ -hda /Users/lucas/.debian/debian.img \ -m 8G \ -smp 4 \ -nographic \ -net nic \ -net user,hostfwd=tcp::3000-:3000,hostfwd=tcp::2222-:22 \ -virtfs local,path="$HOME",mount_tag=host0,security_model=passthrough,id=host0
但你执行挂载命令后遇到了两个棘手的问题:只有root用户能访问挂载的/mnt文件夹,而且文件夹处于只读状态,你使用的挂载命令是:
mount -t 9p -o trans=virtio,version=9p2000.L host0 /mnt/
针对这两个问题,我给你整理了具体的解决方案:
一、解决只读问题
检查Mac系统权限:
打开Mac的「系统偏好设置」→「隐私与安全性」→「文件和文件夹」,确认QEMU已经被授予访问你$HOME文件夹的权限。如果没授权,QEMU只能以只读模式访问主机文件系统,勾选权限后重启QEMU即可。调整QEMU的virtfs安全模型:
你当前用的security_model=passthrough在Mac上可能因为系统权限管控导致只读问题,建议换成mapped-xattr或者mapped-file,这两个模型更适配Mac的文件系统权限。修改后的QEMU启动参数片段:-virtfs local,path="$HOME",mount_tag=host0,security_model=mapped-xattr,id=host0挂载时明确指定读写模式:
在挂载命令里加上rw选项,强制开启读写权限:mount -t 9p -o trans=virtio,version=9p2000.L,rw host0 /mnt/
二、解决普通用户无法访问的问题
问题根源是挂载后的文件权限默认属于root,你可以在挂载时指定uid和gid,映射到客户机里你的普通用户ID:
- 先在客户机里用
id -u和id -g命令查看你的普通用户ID(通常普通用户的ID是1000:1000); - 修改挂载命令,加入
uid和gid参数:
这样挂载后的mount -t 9p -o trans=virtio,version=9p2000.L,rw,uid=1000,gid=1000 host0 /mnt//mnt文件夹就会属于你的普通用户,不需要切换到root就能正常读写。
可选:设置开机自动挂载
如果想让这个挂载在虚拟机开机时自动生效,可以把配置添加到/etc/fstab文件里:
host0 /mnt 9p trans=virtio,version=9p2000.L,rw,uid=1000,gid=1000 0 0
备注:内容来源于stack exchange,提问作者Lucas Martins Soares




