You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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/

针对这两个问题,我给你整理了具体的解决方案:

一、解决只读问题

  1. 检查Mac系统权限
    打开Mac的「系统偏好设置」→「隐私与安全性」→「文件和文件夹」,确认QEMU已经被授予访问你$HOME文件夹的权限。如果没授权,QEMU只能以只读模式访问主机文件系统,勾选权限后重启QEMU即可。

  2. 调整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
    
  3. 挂载时明确指定读写模式
    在挂载命令里加上rw选项,强制开启读写权限:

    mount -t 9p -o trans=virtio,version=9p2000.L,rw host0 /mnt/
    

二、解决普通用户无法访问的问题

问题根源是挂载后的文件权限默认属于root,你可以在挂载时指定uidgid,映射到客户机里你的普通用户ID:

  1. 先在客户机里用id -uid -g命令查看你的普通用户ID(通常普通用户的ID是1000:1000);
  2. 修改挂载命令,加入uidgid参数:
    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

火山引擎 最新活动