- 了解其作用范围:.wslconfig 是全局的(WSL 2),而 wsl.conf 是每个发行版的。
- 请正确重启 WSL(8 秒规则)以应用更改。
- 优化资源和 I/O:内存、交换空间、文件系统 Linux 以及 DrvFs。
- 利用 Intune、GPO 和适当的网络模式加强安全性和管理。
如果你在 Windows 系统中使用 Linux,那么最大限度提高性能和稳定性的关键在于两个配置文件: .wslconfig 和 wsl.conf通过这些设置,您可以调整 WSL 2 虚拟机使用的内存大小、驱动器的挂载方式、使用的 DNS 服务器,以及是否在您的发行版中启用 systemd 等所有内容。您可以在这里找到…… WSL2 和 Docker 环境创建指南实用且详尽,助您掌握这些选项,而不会让您的生活变得复杂。
在开始之前,首先需要明确两个概念: .wslconfig 文件应用全局 WSL 设置(仅限 WSL 2) y wsl.conf 定义了每个发行版的行为此外,还有一条不成文的规定:每次更改设置后,都必须正确重启 WSL 才能使更改生效。接下来,我们将通过实际示例,讲解您需要了解和执行的所有操作。 comandos 和良好做法。
.wslconfig 和 wsl.conf 的主要区别
这两个文件之间有非常清晰的界限: .wslconfig 文件是全局的,存在于 Linux 系统之外。 (在 Windows 系统上),而 wsl.conf 文件是每个发行版本地的。 它存储在 Linux 系统内部。了解这一点可以帮你省去调试问题时的很多麻烦。
总之: .wslconfig 文件位于 %UserProfile%\\.wslconfig。 (默认情况下不存在;您需要创建它)并控制 WSL 2 虚拟机(内存、CPU、内核、网络等)。就其本身而言, wsl.conf 文件位于 /etc/wsl.conf。 在分发过程中,它管理自动组装、内部网络选项、与 Windows 的互操作性以及默认用户。 引导 等等。
重要事项: .wslconfig 选项仅影响 WSL 2。如果您使用的是运行 WSL 1 的发行版,则这些全局选项将不适用。
“8 秒规则”以及如何正确重启 WSL
当您更改任何参数时 .wslconfig 或 wsl.conf仅仅关闭窗口是不够的。 终端您必须等待 WSL 虚拟机完全停止,这通常需要大约 8秒 关闭所有会话后。
如果您想强制执行干净重启,请参阅 重启 WSL 的命令 和用途 PowerShell的 使用以下命令: wsl --list --running (检查哪些发行版仍然活跃) wsl --shutdown (全部关闭)。您也可以使用以下命令终止特定的发行版。 wsl --terminate <NombreDistro>这一步骤至关重要 更改已正确应用.
wsl.conf:按发行版配置(WSL 1 和 WSL 2)
文件 /etc/wsl.conf 它允许您在分发级别调整行为。它支持 INI 类型的节: , , , ,加上 , y 在最新的系统中,它非常适合用于决定如何挂载驱动器、是否添加 Windows PATH 或默认使用哪个用户。
你可以用你喜欢的编辑器打开它,例如 根: sudo nano /etc/wsl.conf如果不存在,请创建它。编辑完成后,记得应用 WSL 关闭规则,以便…… 更改生效.
在你的发行版上启用 systemd
WSL 包含对以下内容的支持: systemd 在最新版本(WSL 0.67.6 或更高版本)中,如果您的工作流程需要此功能(例如,通过 systemd 启动的服务),您可以使用两行代码启用它。 wsl.conf:
systemd=true
使用以下命令检查您的版本: wsl --version 编辑完成后,运行 wsl.exe --shutdown要进行验证,请使用 systemctl list-unit-files --type=service 您将看到服务的状态。此功能使 WSL 更接近真正的 Linux 体验。如果您需要更深入的管理信息,请参阅如何操作。 使用 systemd 管理服务 查看实际案例。
Windows 驱动器自动挂载 (DrvFs)
本节介绍如何使用 DrvFs 在 Linux 系统中挂载 C 盘或 D 盘等驱动器。您可以启用或禁用 DrvFs,更改其根目录,或添加权限选项。
- 启用 (布尔值):默认为 true,将 C:/ 或 D:/ 挂载到
/mnt. - 挂载文件系统选项卡 (布尔值):默认为 true,表示 WSL 正在处理
/etc/fstab一开始。 - 根 (字符串):默认值
/mnt/你可以把它改成/windir/你会看到/windir/c. - 选项: 以逗号分隔的 DrvFs 特定列表(权限和元数据)。
有用的DrvFs选项: uid、gid、umask、fmask、dmask、metadata 和 case. 如果您激活 metadata你可以使用口罩,例如 umask=022 o dmask=000 并像在“纯”Linux 系统中一样微调权限。如果您的工作流程需要 从 Windows 访问 Linux 分区本部分和 DrvFs 是调整权限和程序集的关键。
DrvFs究竟是什么?
DrvFs 是 WSL 中 Windows 和 Linux 之间的文件系统桥接器。它允许您在 WSL 中挂载 Windows 驱动器。 /mnt/c, /月/日等等,并定义权限、大小写敏感性和元数据的管理方式。如果您需要更类似 Linux 的行为, 活动元数据 并根据您的喜好调整权限掩码。
网络、互操作性、默认用户和启动
您可以控制主机名,以及 WSL 是否自动生成主机名。 /etc/hosts y /etc/resolv.conf如果您更喜欢手动管理 DNS 以实现以下目标,则调整此设置很有用: 更稳定或更快的分辨率.
本节定义了是否可以从 Linux 启动 Windows 进程(例如, notepad.exe)并且如果将 Windows PATH 添加到 $PATH如果您正在寻找一个更加“隔离”的Linux环境, 禁用这些选项 以避免干扰。
在这里,您可以选择发行版启动时使用的默认用户。出于安全考虑,最好将其设置为您的普通用户帐户,而不是 root 用户,尽管您偶尔也可以使用 root 用户登录。 wsl -u root.
这样,你就可以在 WSL 启动时触发一个命令(例如, service docker start如果您使用了 systemd,还可以保护 binfmt 文件的自动生成。这是一种实用的方法。 在创业初期实现服务自动化.
GPU 和时间同步
本部分允许您决定是否 应用 Linux 可以通过半虚拟化技术访问 Windows GPU。默认情况下,它自带此功能。 启用=真非常适合以下工作负载 IA 或图形。
您可以让 WSL 使用并同步 Windows 时区。 useWindowsTimezone=true这是一个简单的辅助工具 避免差异和不匹配 更改时区或让计算机进入睡眠状态时。如果您的目标是使用 GPU 进行计算,请检查如何操作。 在 WSL 上安装 CUDA 并留下 驱动程序 以及更新的工具包。
wsl.conf 的完整示例
这个例子展示了几个有用的选项: 程序集的根更改DrvFs 权限, 拥有自己的 DNS 以及默认用户。注意:请记得重启 WSL 以查看效果。如果您已设置开发环境,可以按照以下步骤操作。 使用 WSL 配置开发环境 整合这些选项。
# /etc/wsl.conf
enabled=true
root=/
options="metadata,uid=1003,gid=1003,umask=077,fmask=011,case=off"
mountFsTab=true
hostname=DemoHost
generateHosts=false
generateResolvConf=false
enabled=false
appendWindowsPath=false
default=DemoUser
command=service docker start
.wslconfig:WSL 2 虚拟机全局设置
在这里,您可以决定虚拟机拥有多少内存、CPU 或交换空间,是否使用自定义内核,以及网络行为方式。请在以下位置创建该文件: %UserProfile%\\.wslconfig要从 PowerShell 打开文件夹,请使用 cd ~ 或者直接在资源管理器中输入路径 % 用户资料%.
本节的关键参数:
- 核心:Windows 系统中自定义 Linux 内核的绝对路径。
- 内核模块:带有自定义内核模块的 VHD。
- 记忆:内存限制(默认为 Windows 内存的 50%)。
- 处理器:WSL 2 虚拟机的逻辑核心。
- 本地主机转发:暴露 WSL 端口
localhost:puerto的主人。 - 内核命令行:额外的内核参数(例如,
vsyscall=emulate). - 安全模式: 安全模式 恢复有问题的发行版(Windows 11).
- 交换 y 交换文件交换磁盘的大小和路径。
- 页面报告:自动将未使用的内存返还给主机。
- gui应用程序- 启用或禁用 WSLg(Linux GUI 应用程序)。
- 调试控制台, 最大崩溃转储计数调试和转储管理。
- 嵌套虚拟化嵌套式开/关虚拟化。
- vmIdleTimeout:虚拟机关闭前无活动毫秒数。
- dnsProxy, 网络模式, 火墙, DNS隧道, 自动代理高级网络和代理控制。
- 默认Vhd大小:发行版 VHD 的最大大小(例如,1 TB)。
格式说明:条目类型 径 他们必须使用 Windows 路由 双反斜杠,例如: C:\\Temp\\myCustomKernel大小参数接受单位(MB/GB);如果省略单位,则默认以字节为单位。某些选项需要指定单位。 Windows 11 以及最新版本的 WSL。
网络:NAT、镜像、virtio 等
连接器 网络模式 您选择网络模式: NAT (默认), mirrored, virtioproxy, bridged (已过时)或 none在 NAT 模式下,WSL 位于内部 NAT 之后;在镜像配置中,网络堆栈会被镜像,从而简化从 LAN 到 WSL 服务的访问;使用 virtioProxy 时,则使用备用后端。如果您使用 镜像您可以通过以下方式进行微调 忽略的端口 允许 Linux 绑定端口,即使 Windows 已经占用了这些端口。
要使用镜像在本地网络上公开服务,请添加以下内容: .wslconfig:
networkingMode=mirrored
后 wsl --shutdown您可以使用 PowerShell(管理员权限)调整 Hyper-V 防火墙:
New-NetFirewallHyperVRule -DisplayName WSLPrivateInboundRule -Profiles Private -Direction Inbound -Action Allow -VMCreatorId ((Get-NetFirewallHyperVVMCreator).VMCreatorId)
# (Menos seguro) Desactivar la protección de Hyper-V por completo:
# Set-NetFirewallHyperVVMSetting -Name ((Get-NetFirewallHyperVVMCreator).VMCreatorId) -Enabled False
保持 公共网络上的活动防火墙 并限制接触。如果您需要生产,请考虑 反向代理和TLS.
实验装置
此部分允许您激活预览功能。其中包括: 自动内存回收 (disabled, gradual, dropCache), 稀疏VHD (分散的VHD), 尽力而为 DNS 解析, DNS隧道IP地址, 初始自动代理超时, 忽略的端口 y 主机地址环回部分产品需要 Windows 11 22H2 或更高版本,并且是为……设计的。 优化内存和网络 在特定情况下。
带注释的 .wslconfig 文件示例
此示例限制了资源,使用了自定义内核,调整了交换空间,并启用了调试功能。非常适合 标准化环境 在开发团队中。
# %UserProfile%\\.wslconfig
memory=4GB
processors=2
kernel=C:\\temp\\myCustomKernel
kernelModules=C:\\temp\\modules.vhdx
kernelCommandLine=vsyscall=emulate
swap=8GB
swapFile=C:\\temp\\wsl-swap.vhdx
pageReporting=false
localhostForwarding=true
nestedVirtualization=false
debugConsole=true
maxCrashDumpCount=10
sparseVhd=true
优化 I/O 和内存性能
对于高强度工作(例如, 处理数百张 20 万像素图像 (使用 ODM 时),建议调整全局资源并在原生 Linux 文件系统中工作,以避免 I/O 性能损失。 /mnt/c设置足够的内存和交换空间限制 .wslconfig 并用以下方式检查实际使用情况 htop o free -h.
实用建议:将您的项目保存到 /家/如果不需要自动挂载,请禁用它;如果进程仍然出现内存不足的情况, 互换增加 (例如,16 GB)和分配的 RAM(例如,8-12 GB,具体取决于您的机器)。如果您创建 .wslconfig 如果是第一次尝试并且“不起作用”,请确保它已正确设置。 % 用户资料%,这个名字是字面意思。 .wslconfig (无隐藏扩展名)和 重启 WSL 完全。
DNS 和名称解析
默认情况下,WSL 使用主机的 DNS 服务器,但您可以选择不自动生成它们。 resolv.conf 并将您的服务器(Cloudflare、Google、企业服务器)部署到位以实现 更可预测的分辨率。 在 /etc/wsl.conf:
generateResolvConf=false
然后创建或编辑 /etc/resolv.conf 输入所需内容:
nameserver 1.1.1.1
nameserver 8.8.8.8
如果您使用类似这样的模式 dnsProxy o DNS隧道 从 .wslconfig同时检查其参数,如有必要,进行调整 DNS隧道IP地址 或活跃 尽力而为 DNS 解析 忽略未知记录来解析请求。
安装和初始步骤
WSL随Windows一起提供,但您必须…… 启用它并安装发行版在现代版本(20262+)中,只需从 PowerShell 运行即可。 CMD: wsl --install此命令启用 WSL 和 VM 平台组件,下载内核,将 WSL 2 设置为默认值,并安装 Ubuntu(可能需要重新启动)。
首次从“开始”菜单打开发行版时,系统会提示您创建 Linux 用户名和密码它们与您的 Windows 帐户无关,默认情况下将使用该帐户登录。要更改密码,请使用 passwd如果你忘记了,请以 root 用户身份打开发行版。 wsl -u root o wsl -d <Distro> -u root 并运行 passwd <usuario>.
更新软件包并选择项目保存位置
请及时更新您的包裹信息 sudo apt update && sudo apt upgrade (Ubuntu/Debian)。请记住这条黄金法则: 在工具所在的FS区域工作如果您使用 Linux 工具编译和运行,请保存到 \\wsl$\\<Distro>\\home\\<Usuario>如果您使用 Windows 工具,请将文件保存在…… C:\\Users\\<Usuario>.
要在资源管理器中打开当前 WSL 目录,请运行 explorer.exe .您还可以导航至类似这样的路线 \\wsl$\\Debian\\home\\tu-usuario 在 Windows 系统中,如果文件夹显示为空,请打开 WSL 终端以激活虚拟机。
Windows终端和代码编辑器
体验得到了极大的改善 Windows终端 (标签页、面板、GPU渲染、主题……)。每个已安装的发行版都会显示为一个可配置的配置文件。对于开发而言,最方便的选项通常是…… Visual Studio代码 使用远程开发支持 (WSL) 扩展。从发行版启动 code . 这样,你就能在 WSL 中拥有一个完整的编辑环境。
如果您使用 C++ 工作,Visual Studio 2022 集成了对以下功能的原生支持: 面向 WSL 的 CMake 项目 o SSH的这样,您就可以在 Linux 系统上使用同一个 VS 实例进行编译和调试。
Git、容器和数据库
提供配置 WSL 中的 Git 如果需要,还可以使用凭据管理器,这样就不用手动输入密码了。检查行尾符和文件。 .gitignore 为了避免平台特定的问题,VS Code 集成了与 WSL 无缝协作的 Git 命令。
连接器 Docker桌面 借助 WSL 2,您可以以敏捷的方式使用容器,如果您有兴趣,还可以将您的项目连接到远程开发容器。 数据库WSL 可以毫无问题地支持它。 MySQL、PostgreSQL、MongoDB、Redis、SQL Server 或 SQLite它是跨平台本地开发的理想环境。
GPU加速和图形应用程序
WSL 允许您利用以下优势: 团队的GPU 对于繁重的工作负载(AI、CUDA 等),实际上,只需确保您拥有最新的驱动程序和工具包,并在必要时使用容器进行验证即可。 nvidia/cuda. 此外,与 工作组 你可以跑 Linux GUI 应用程序 无需设置外部 X 服务器。
有用的互操作性命令
这两个世界之间存在着非常实际的共存关系。来自 Windows: wsl ls -la 列出 Linux 工具并进行筛选 findstr 反之亦然(混合) dir y grep从 Linux 系统中启动 任何带有 .exe 文件的 Windows 应用程序, 例如 notepad.exe .bashrc。 你也有 wslpath 转换系统间的路由: wslpath RUTA_WINDOWS o wslpath -w RUTA_LINUX.
挂载磁盘和使用外部驱动器
如果您需要访问物理磁盘或内存 USB 从 WSL 2 开始,您可以使用以下方式进行设置: wsl --mount 并像在 Linux 系统中一样进行管理。请记住检查文件系统以及是否需要 root 权限,以避免挂载错误。
企业安全与管理(Intune 和 GPO)
现在您可以使用诸如此类的工具来管理 WSL。 Microsoft Intune从门户网站创建配置目录配置文件,然后搜索“适用于 Linux 的 Windows 子系统”以查看所有可用选项。这非常适合强制执行诸如独占使用之类的策略。 WSL商店禁用 WSL 1 或阻止自定义内核和网络配置。
企业环境强化建议:禁用 AllowInboxWSL (强制商店版本), 允许 WSL1中, 调试 shell内核/命令行配置、自定义网络、通过 .wslconfig 配置防火墙、嵌套虚拟化或内核调试。这些 GPO 使用以下方式定义: WSL ADMX可在 GitHub 上获取,并可导入进行本地管理。
访问控制和命令
政治 允许WSL, AllowInboxWSL y 允许 WSL1 他们控制着谁可以使用 WSL 以及使用哪个版本。您也可以允许或阻止用户使用。 wsl --debug-shell y wsl --mount 根据您的安全需求。这是额外的安全层。 避免不必要的配置 在管理团队中。
故障排除:创建 .wslconfig 和内存问题
如果 .wslconfig 文件“没有任何作用”,请验证该文件是否存在。 %UserProfile%\\.wslconfig没有隐藏扩展名或奇怪的 BOM,并且其语法有效(第 1 节) 以及键值对)。创建或修改后,运行 wsl --shutdown 并打开发行版。
对于内存密集型负载(例如 一批共 470 张 20MP 图片),增加分配的 RAM 和交换空间。示例起始点:
memory=12GB
processors=8
swap=16GB
swapFile=C:\\WSL\\swap.vhdx
pageReporting=true
还要检查项目是否在…… Linux 文件系统如果持续收到“内存不足”消息,请检查工具自身的限制(ODM 参数),并激活 自动内存回收 如果您有兴趣快速恢复缓存并监控使用情况, top/ htop别忘了Windows也需要足够的可用内存。
额外的良好实践和资源
在进行网络镜像实验时,请仔细调整防火墙设置;如果 您禁用了规则 要进行测试,请稍后重新激活它们。如果您需要更多文档或示例,可以参考外部资源,例如: 这个PDF如果您正在使用 GPU,请在开始之前验证您的堆栈(驱动程序、CUDA/工具包、版本)。
对于那些管理车队的人来说,这种组合 Intune + ADMX 它能够精细控制 .wslconfig 文件中哪些内容可以修改、允许哪些命令以及是否接受 WSL 1 发行版。这有助于…… 标准化环境减少事故发生,提高安全级别。
有了这些设置,您就可以获得一套完整的 WSL 专业设置指南: 使用 wsl.conf 文件来分析每个发行版的性能。, .wslconfig 用于管理全局虚拟机明智地重启 WSL,利用 Linux 的原生文件系统提升性能,发挥 GPU 和高级网络技术的优势,如果你在公司工作,则要依靠策略来控制一切。
对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。
