WSL2中Docker(Compose)挂载/mnt/d读写性能异常问题咨询
WSL2下/mnt盘符写入性能远低于读取的问题分析
是的,WSL2中对/mnt/<盘符>(挂载的Windows文件系统)的写入性能确实远慢于读取性能,这是由WSL2与Windows文件系统的交互机制决定的,你的案例完全符合这个特性:
现象拆解
- Laravel项目在/mnt/d性能极差:Laravel安装过程会生成大量小文件(依赖包、配置文件、缓存文件),框架启动时也会频繁读写缓存、日志等小文件,而WSL2对Windows文件系统的小文件写入效率极低,直接导致安装耗时暴增、TTFB大幅延长;MySQL持续重启则是因为数据库文件放在/mnt下,频繁的写入操作触发IO瓶颈,容器健康检查超时导致重启。
- 项目放在WSL内部目录正常:
~/projects属于WSL2自己的虚拟磁盘(ext4格式),IO性能和原生Linux环境接近,能满足PHP-FPM、MySQL这类服务的读写需求。 - 视频读取性能优异:WSL2对Windows文件系统的大文件读取做了针对性优化,大文件连续读取的损耗远小于小文件频繁写入,所以视频加载速度不受影响。
解决方案
- 优先使用WSL内部目录存放项目:将项目放在
~/projects这类WSL原生目录下,既保证性能,又能通过Windows资源管理器访问(路径为\\wsl$\<你的发行版名称>\home\<用户名>\projects)。 - 调整WSL挂载参数优化写入:如果必须使用Windows盘符,编辑
/etc/wsl.conf添加以下配置:
[automount] options = "metadata,umask=0000,case=off" mountFsTab = false
执行wsl --shutdown重启WSL后生效,能小幅提升写入性能,但仍无法达到WSL内部目录的水平。
3. IO敏感服务数据目录单独存放:MySQL、Redis这类频繁读写的服务,务必将数据目录放在WSL内部,不要挂载Windows盘符,避免IO瓶颈导致服务异常。
内容的提问来源于stack exchange,提问作者degebine
相关产品推荐
相关产品推荐

