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

如何通过WSL让Windows访问Ubuntu中的FUSE挂载目录

如何通过WSL让Windows访问Ubuntu中的FUSE挂载目录

我之前也碰到过一模一样的问题!WSL2的9P文件共享默认对FUSE挂载目录的支持不太友好,核心是权限和服务访问限制的问题,咱们一步步来解决:

  • 首先,调整sshfs的挂载参数,这是最关键的一步。你之前加了allow_otherdefault_permissions,但还差指定用户ID的参数——因为9P服务是以系统用户身份运行的,得让它能识别挂载目录的所有者。用这个命令重新挂载试试:

    sshfs 你的远程用户@远程主机:/远程目录路径 /media/remote1 -o allow_other,default_permissions,uid=$(id -u),gid=$(id -g)
    

    给你拆解下关键参数的作用:

    • allow_other:打破FUSE默认的“仅挂载用户可访问”限制,让WSL的系统服务用户也能访问这个挂载点
    • default_permissions:交给Linux内核处理权限检查,而不是让sshfs自行处理,这样9P服务能正确识别权限规则
    • uid=$(id -u)gid=$(id -g):把挂载目录的所有者绑定到你的当前Ubuntu用户,避免跨用户的权限不匹配
  • 然后,配置WSL的9P共享参数。咱们需要修改WSL的全局配置,让它能正确处理FUSE挂载的文件元数据。打开Ubuntu终端,创建或编辑/etc/wsl.conf文件:

    sudo nano /etc/wsl.conf
    

    把下面的内容粘贴进去(如果已有部分配置,补充缺失项即可):

    [automount]
    enabled = true
    options = "metadata,umask=0077,uid=1000,gid=1000"
    mountFsTab = true
    
    [interop]
    enabled = true
    appendWindowsPath = true
    

    重点是automount段里的metadata参数,它能让9P服务正确读取文件的权限、所有者等元数据,这是Windows能正常访问的核心前提。

  • 接下来,重启WSL让配置生效。打开Windows的PowerShell或CMD,运行这条命令关闭所有WSL实例:

    wsl --shutdown
    

    之后重新打开Ubuntu终端,用刚才的sshfs命令重新挂载远程目录。

  • 最后,验证挂载目录的权限。在Ubuntu里运行:

    ls -ld /media/remote1
    

    确保输出里的所有者是你的用户名,权限至少是rwxr-xr-x(也就是755),这样9P服务才有足够权限访问并共享给Windows。

如果还是不行,先执行fusermount -u /media/remote1卸载挂载,再重新挂载一次确认参数没加错。另外也可以尝试更新WSL到最新版本(Windows里运行wsl --update),旧版本的WSL2可能存在9P和FUSE的兼容性bug。

备注:内容来源于stack exchange,提问作者Brian H.

火山引擎 最新活动