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

2021-08-02 00:10:28 +08:00
 iyaozhen

一般来说我们还是希望 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

9001 次点击
所在节点    程序员
45 条回复
mason961125
2021-08-02 11:27:17 +08:00
> 万一不小心把环境删了,代码啥的都没了。

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

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

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

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

看了完了,这就是我的疑惑呀。既然是 Remote target,那就是 WSL 上的 Go 编译器呀,对于它来说路径怎么会有 \wsl$ 这个 Windows 网络路径呢?它获得路径参数应该直接就是 Linux 的路径呀。
iyaozhen
2021-08-02 13:58:25 +08:00
@ikas
@smallthing 感谢 我试试挂载 ext4 的方式
iyaozhen
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
2021-08-02 14:02:13 +08:00
@Smash 唉 Mac 在公司,天天背来背去不方便。而且 Windows 这不得打游戏嘛 哈哈哈
iyaozhen
2021-08-02 14:04:16 +08:00
@binbinyouliiii 嗯嗯 wsl 里面装桌面端 Linux,但不太喜欢这样的方式,Windows 、Mac 都用习惯了,不想倒腾第三个
binbinyouliiii
2021-08-02 14:09:56 +08:00
@iyaozhen #32 直接运行程序啊,不运行桌面,我就是在 WSL2 下直接用 CLion 的
iyaozhen
2021-08-02 14:12:06 +08:00
@binbinyouliiii 嗯嗯 明白,其实就是在 WSL2 中使用 IDE
zxCoder
2021-08-02 15:29:41 +08:00
jetbrains ide 大部分还无法很好支持 wsl2

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

vscode 的远程开发很好,但还是不够智能,当个编辑器还行
wowbaby
2021-08-02 15:57:16 +08:00
为什么要用 wsl ?太难用了,windows 我装了 git https://git-scm.com ,一样可以用 Linux 命令,感觉很好啊
lingxi27
2021-08-02 16:44:46 +08:00
我选 fedora
tianxin8431
2021-08-02 19:42:44 +08:00
@iyaozhen 我理解是你可以直接把 WSL 当成一台远程的 Linux 服务器,然后直接用 remote 调试的方法,走 ssh 连,这样不会涉及到\wsl 这个目录吧
iyaozhen
2021-08-02 20:09:54 +08:00
@tianxin8431 嗯嗯 了解,\wsl 只是表象,问题就是 goland 的 remote 能力很弱,WebStorm 还好点
iyaozhen
2021-08-02 20:11:35 +08:00
@wowbaby 其实不只是命令行,主要是 Linux 环境。有个 js 项目,Windows 上 npm build 老是失败(当然也能解决),想在 Linux 下 build

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/793055

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX