V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iyaozhen
V2EX  ›  程序员

某些场景下 wsl2 的文件系统简直蛋疼的不行

  •  
  •   iyaozhen ·
    iyaozhen · 2021-08-02 00:10:28 +08:00 · 8861 次点击
    这是一个创建于 969 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般来说我们还是希望 IDE 运行在 windows,但是引用环境在 linux 。所以使用 wsl2 有个绕不过的问题,把文件放 windows 还是 linux 里

    放 windows 里(/mnt/c ),先不论跨文件系统的性能,npm build 能卡个好几分钟不说,最主要是失去了文件监控的功能,修改文件后,不会自动化重新编译,极大影响了效率

    放 linux 里(\wsl$),npm build的问题倒是没了,但是又有个 go: RLock \wsl$\Ubuntu\……\go.mod: Incorrect function. 的问题。

    goland 还不支持直接使用 wsl 里面的 go 环境,所以还需要在 windows 上安装 go 环境,访问 wsl 中的文件,wsl2 本质上还是个虚拟机,windows 访问 linux 是通过网络文件系统( 9P ),然而 go 加锁不支持 9P,所以无法在 windows 上编译、运行了,IDE 上的很多功能用不了,需要进 wsl 命令行操作。

    不过好在可以配置 Build on remote target,也勉强能用,但是整体操作上还是很割裂。

    还有一个就是文件放 linux,万一不小心把环境删了,代码啥的都没了。

    注:Mac 有,只是有时候用下 windows

    相关资料:

    https://docs.microsoft.com/zh-cn/windows/wsl/compare-versions

    https://github.com/microsoft/WSL/issues/6255

    https://www.jetbrains.com/help/go/how-to-use-wsl-development-environment-in-product.html#local_project

    https://stackoverflow.com/questions/62837419/how-can-i-set-up-goroot-in-wsl2-goland

    https://youtrack.jetbrains.com/issue/GO-10618

    https://github.com/golang/go/issues/37461

    第 1 条附言  ·  2021-08-02 14:10:57 +08:00
    比较好的解决方案:
    1. vscode remote
    2. 等 goland remote 功能完善,直接支持使用 wsl2 中的 go 环境
    3. 挂一快 ext4 分区,两个系统都能使用
    4. 使用 Linux 桌面端,在 wsl 里面运行 IDE,配合 vlc 、X11

    加个关键词:wsl2 npm start build 慢
    45 条回复    2023-03-31 23:44:04 +08:00
    VZXXBACQ
        1
    VZXXBACQ  
       2021-08-02 00:24:45 +08:00   ❤️ 6
    既然放在了 WSL 里面,何必用 Windows 下的环境来编译呢?

    如果用 Windows 的环境编译,为什么要使用 WSL ?

    我使用 IDE 配合 WSL 的时候都是用远程模式调用 WSL 上的编译 /解释器,这样路径就是纯 linux 的路径。

    Go 我用的不多,Google 了一下,Goland 应该是支持的 [官方文档]( https://www.jetbrains.com/help/go/how-to-use-wsl-development-environment-in-product.html#open-a-project-in-wsl)
    Corua
        2
    Corua  
       2021-08-02 00:26:41 +08:00 via Android   ❤️ 1
    大部分情况下 wsl2 应该会优先用 win 中 path 的二进制文件,这就导致文件路径拐了大弯,参考这个禁用 http://www.cxyzjd.com/article/u013566243/110592547
    也许能管用(
    Dragonphy
        3
    Dragonphy  
       2021-08-02 01:23:39 +08:00
    jetbrains 想要在 WSL 环境下开发,最好使用 WSL1,localhost,内存占用都还可以。想要纯粹的远程开发,还得 VS Code 。另外,jetbrains 有个 https://lp.jetbrains.com/projector/的网页 IDE,但是目前体验很差
    halfer53
        4
    halfer53  
       2021-08-02 06:24:50 +08:00
    用 vs code remote
    rioshikelong121
        5
    rioshikelong121  
       2021-08-02 08:19:54 +08:00
    用 vscode 没这个问题。
    Rheinmetal
        6
    Rheinmetal  
       2021-08-02 08:34:52 +08:00
    clion 的 remote 处理 cmake 工程有奇奇怪怪的问题 本地修改不同步啦 就一个 main.cpp 也偶发链接失败 有时重启能好 有时候不行
    连 wsl 还好暂时没有太多问题只不过是拿来写算法题玩的 没有搞过项目
    alexkkaa
        7
    alexkkaa  
       2021-08-02 08:54:13 +08:00 via Android
    所以我已经使用 manjaro 作为主力三年了,win 丢在虚拟机里, 日常一些国产软件和一些 win 独占的放在里面。 而且还安装了双系统,以满足我一年都打不了几次的 lol 需求
    linhongye
        8
    linhongye  
       2021-08-02 09:24:41 +08:00
    全部装 wsl 里面....
    liuhuansir
        9
    liuhuansir  
       2021-08-02 09:27:17 +08:00
    idea 的 remote 太垃圾了,vscode 的完爆
    arischow
        10
    arischow  
       2021-08-02 09:36:59 +08:00 via iPhone
    我最后选择装 Ubuntu 和 Win10 dual boot,对 Windows 生态兴趣不是很大
    ikas
        11
    ikas  
       2021-08-02 09:43:44 +08:00
    目前我是创建一个 ext4 的 vhd,然后挂载到 wsl2,这样代码工具都直接放到这个 vhd.
    如果有闲置的硬盘,也可以直接创建,然后挂载到 wsl2..
    这样代码就安全了
    binbinyouliiii
        12
    binbinyouliiii  
       2021-08-02 09:47:51 +08:00   ❤️ 1
    直接在 WSL2 运行 IDE 不就完了
    ysc3839
        13
    ysc3839  
       2021-08-02 09:51:34 +08:00
    我选择不用 WSL2,只用 WSL1,有 WSL1 满足不了的需求,直接用个完整的 Linux 虚拟机感觉问题也不大。
    chihiro2014
        14
    chihiro2014  
       2021-08-02 09:51:42 +08:00
    之前试过用 idea 去编辑 wsl 的 spring boot 项目,但是始终卡在项目 jdk 版本设置上,手动在 idea 里面指定 wsl 中已安装的 jdk 版本,就会导致 idea 卡死。如果指定 windows 上的 jdk 版本给 wsl 中的项目用,始终无法选择
    gravitybox
        15
    gravitybox  
       2021-08-02 10:21:05 +08:00
    专门买了一年的 goland,结果遇到同样的问题:go: RLock \wsl$\Ubuntu\……\go.mod
    gravitybox
        16
    gravitybox  
       2021-08-02 10:23:43 +08:00
    换成 vscode 后就不会遇到这些奇怪的问题了。。
    Osk
        17
    Osk  
       2021-08-02 10:35:35 +08:00
    所以我感觉 WSL2 除了 MS 魔改支持 GUI 以外, 没啥吸引人的.

    日常 WSL1 + Linux 虚拟机.


    为啥用虚拟机:
    一些东西需要用到 systemd 这一套, WSL2 还得自己去魔改.
    主机和 Guest 可以有固定的 IP.
    WSL2 也是 Hyper-V, 性能差不多.
    9p 给我留下的印象不好, 性能很糟, 还不如 smb, 性能不如 smb 时我万万没想到的.
    VHDX 自己好控制一些, 随时的快照等功能也挺好的.


    希望微软把 WSLg 的一些功能移植给 Hyper-V Linux Guest, 比如很期待的 RAIL 跑 GUI 程序.
    pkoukk
        18
    pkoukk  
       2021-08-02 10:37:41 +08:00
    用的 vscode remote,没这种问题。
    windows 只是个壳,所有开发都在 wsl 下
    jingslunt
        19
    jingslunt  
       2021-08-02 11:20:53 +08:00
    同上,为什么使用 goland
    微软自家的 vscode 就没问题,或者建议在 wsl2 上部署 code-server
    bashbot
        20
    bashbot  
       2021-08-02 11:26:04 +08:00
    WSL2 环境开发文件放在 windows 下的话,webpack 开 watch/poll 选项,就可以监控文件变化自动编译了,VUE 也支持类似选项。最终实现都是调用 HMR 插件实现的,只要用了这个就可以支持。
    https://webpack.js.org/concepts/hot-module-replacement/
    mason961125
        21
    mason961125  
       2021-08-02 11:27:17 +08:00
    > 万一不小心把环境删了,代码啥的都没了。

    你这个万一到底要多么的无脑才能发生。
    smallthing
        22
    smallthing  
       2021-08-02 11:37:37 +08:00
    你可以自己挂 ext4 分区。
    Smash
        23
    Smash  
       2021-08-02 11:40:16 +08:00
    所以我不用 Windows 做开发,mac 下没这些问题...
    smilingsun
        24
    smilingsun  
       2021-08-02 12:37:47 +08:00
    WSL2 真的用 VSCode + Windows Terminal (Preview) 更香,

    Goland 可以在 macOS 上用,不慌。
    iyaozhen
        25
    iyaozhen  
    OP
       2021-08-02 13:48:51 +08:00
    @VZXXBACQ 额,你有看完吗?
    「 goland 还不支持直接使用 wsl 里面的 go 环境」
    「不过好在可以配置 Build on remote target,也勉强能用」
    哪里有提到到 Windows 环境里面编译?而且因为远程文件的原因,Windows 上压根就编译不了

    你发的那个我已经在参考资料里附上了
    iyaozhen
        26
    iyaozhen  
    OP
       2021-08-02 13:52:14 +08:00
    @bashbot 感谢,这样也是解决思路。

    不过跨文件系统性能真的堪忧,编译真的太慢了,特别是前端项目再大点
    iyaozhen
        27
    iyaozhen  
    OP
       2021-08-02 13:56:10 +08:00
    @mason961125 这个主要是指可能没意识到文件在哪儿的问题(意识到了就明白了)。而且可能微软应用商店里操作了 wsl 换个系统啥的。最后 wsl 没有像 Windows 系统中的文件还能 onedrive (当然可以定时 rsync )。
    VZXXBACQ
        28
    VZXXBACQ  
       2021-08-02 13:58:03 +08:00
    @iyaozhen

    看了完了,这就是我的疑惑呀。既然是 Remote target,那就是 WSL 上的 Go 编译器呀,对于它来说路径怎么会有 \wsl$ 这个 Windows 网络路径呢?它获得路径参数应该直接就是 Linux 的路径呀。
    iyaozhen
        29
    iyaozhen  
    OP
       2021-08-02 13:58:25 +08:00
    @ikas
    @smallthing 感谢 我试试挂载 ext4 的方式
    iyaozhen
        30
    iyaozhen  
    OP
       2021-08-02 14:01:32 +08:00
    @VZXXBACQ 哦哦 我 IDE 是在 Windows 上运行的,Windows 上访问 wsl2 中的文件就是 \wsl$网络路径,wsl2 就是这样和 wsl1 不一样
    https://docs.microsoft.com/zh-cn/windows/wsl/compare-versions#performance-across-os-file-systems
    iyaozhen
        31
    iyaozhen  
    OP
       2021-08-02 14:02:13 +08:00
    @Smash 唉 Mac 在公司,天天背来背去不方便。而且 Windows 这不得打游戏嘛 哈哈哈
    iyaozhen
        32
    iyaozhen  
    OP
       2021-08-02 14:04:16 +08:00
    @binbinyouliiii 嗯嗯 wsl 里面装桌面端 Linux,但不太喜欢这样的方式,Windows 、Mac 都用习惯了,不想倒腾第三个
    binbinyouliiii
        33
    binbinyouliiii  
       2021-08-02 14:09:56 +08:00
    @iyaozhen #32 直接运行程序啊,不运行桌面,我就是在 WSL2 下直接用 CLion 的
    iyaozhen
        34
    iyaozhen  
    OP
       2021-08-02 14:12:06 +08:00
    @binbinyouliiii 嗯嗯 明白,其实就是在 WSL2 中使用 IDE
    zxCoder
        35
    zxCoder  
       2021-08-02 15:29:41 +08:00   ❤️ 1
    jetbrains ide 大部分还无法很好支持 wsl2

    我是 ide 装 windows 环境装 wsl2,目前用起来 webstorm 和 idea 支持还行,其他就比较坑

    vscode 的远程开发很好,但还是不够智能,当个编辑器还行
    wowbaby
        36
    wowbaby  
       2021-08-02 15:57:16 +08:00
    为什么要用 wsl ?太难用了,windows 我装了 git https://git-scm.com ,一样可以用 Linux 命令,感觉很好啊
    lingxi27
        37
    lingxi27  
       2021-08-02 16:44:46 +08:00
    我选 fedora
    tianxin8431
        38
    tianxin8431  
       2021-08-02 19:42:44 +08:00
    @iyaozhen 我理解是你可以直接把 WSL 当成一台远程的 Linux 服务器,然后直接用 remote 调试的方法,走 ssh 连,这样不会涉及到\wsl 这个目录吧
    iyaozhen
        39
    iyaozhen  
    OP
       2021-08-02 20:09:54 +08:00
    @tianxin8431 嗯嗯 了解,\wsl 只是表象,问题就是 goland 的 remote 能力很弱,WebStorm 还好点
    iyaozhen
        40
    iyaozhen  
    OP
       2021-08-02 20:11:35 +08:00
    @wowbaby 其实不只是命令行,主要是 Linux 环境。有个 js 项目,Windows 上 npm build 老是失败(当然也能解决),想在 Linux 下 build
    lujiaosama
        41
    lujiaosama  
       2021-08-02 20:32:03 +08:00   ❤️ 1
    @iyaozhen 一模一样. win 游戏机, mac 办公机. 但是 mac 又不想天天背来背去. 回来就在折腾 windows 环境了, wsl/wsl2, 虚拟机, docker 都折腾了一遍了.
    BeautifulSoap
        42
    BeautifulSoap  
       2021-08-02 20:41:02 +08:00   ❤️ 1
    不在 wsl2 里安装 ide 的话,lz 的问题永远解决不了

    本身跨虚拟机宿主机之间的文件交互性能就很差,你一定要在 Windows 下读 WSL2 的文件或 WSL2 读 Windows 都不会有好体验的

    vscode 的远程开发支持很好,没有这方面问题,但是作为 IDE 还是不行。GoLand(或 IDEA 装 Go 插件)的话作为 IDE 功能够了,但是远程支持差得一批。所以直接在 wsl2 里装 IDE,使用 wsl2 内的所有文件和环境是最好的解决办法( wsl2 别装桌面只装个 GUI 就行)

    lz 你不想在 wsl2 里装 ide 结果就是反倒这是最麻烦的解决办法。而且在 wsl2 里装 IDE 的话,你将能解锁一键完整迁移掉脑上的快发环境到别的电脑的隐藏优点。
    iyaozhen
        43
    iyaozhen  
    OP
       2021-08-02 23:40:39 +08:00
    @BeautifulSoap 感谢,也是的,这样 wsl2 也方便迁移了
    ly879
        44
    ly879  
       363 天前
    @chihiro2014
    请问现在解决了吗?
    chihiro2014
        45
    chihiro2014  
       362 天前
    @ly879 直接买了一台 1U 的服务器摆在家里
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3257 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:52 · PVG 19:52 · LAX 04:52 · JFK 07:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.