WSL2中设置DNS后重启终端又失效的解决方法

本文介绍如何在WSL2中永久设置自定义DNS,避免每次重启后配置丢失的问题。通过修改`/etc/wsl.conf`文件禁用自动生成`/etc/resolv.conf`,并手动设置所需的DNS服务器。

转载地址:https://www.xieshasha.love/wsldns.iiMemory
WSL2 用着是挺好的,就是发现了一个问题,郁闷了好久,修改/etc/resolv.conf可以自己设置 dns,但重启 WSL 以后,手动设置的 DNS 就会被重置为默认的,细心看了一下默认的文件以后发现了问题的关键。WSL 自动在启动时自动根据系统的虚拟交换机WSL生成 /etc/resolv.conf文件。如下为默认的/etc/resolv.conf文件的内容

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.27.96.1

根据默认文件的描述,首先sudo vim /etc/wsl.conf添加etc/wsl.conf 文件,文件内容为:

[network]
generateResolvConf = false

保存以后 Powershell 或 Windows Terminal 内wsl --shutdown 关机 WSL,然后重新打开 WSL

手动编辑 /etc/resolv.conf文件,手动设置新的 DNS 即可,例如:

nameserver 8.8.8.8

重启试一下,手动设置的 DNS 已经生效

<think>嗯,用户这次聚焦在WSL重启失效的问题上,结合之前的引用内容来看,核心矛盾点在于WSL的磁盘挂载配置无法持久化。用户可能是个开发者,经常需要重启系统或WSL环境,但每次重启都要重新配置磁盘,显然很影响工作效率。 从引用[1]能明确看出问题本质:WSL被完全终止时(比如执行wsl --shutdown或重启Windows),手动挂载的磁盘就会失效。这里的关键词是“附加磁盘映像的操作也会失效”,说明用户可能在处理跨磁盘的开发环境。引用[2][3]补充了其他WSL常见问题,虽然不直接相关,但提到LxssManager服务重启的方案值得参考。 用户的需求表面是解决重启失效,深层需求其实是实现开发环境的持久化配置。ta可能尝试过临时挂载方案,发现不可靠才来寻求系统级解决方法。考虑到用户之前接触过wsl --shutdown命令,应该具备一定命令行基础,但可能不熟悉Windows任务计划程序这类系统工具。 解决方案需要同时满足两个条件:一是自动化(避免每次手动操作),二是兼容WSL生命周期(在WSL完全启动后执行)。引用[1]末尾提到“只有Windows启动时需要进行磁盘附加操作”,暗示了开机自启动的思路。不过要注意,直接往Windows启动文件夹放脚本是不够的,因为WSL子系统启动时间晚于Windows服务。 准备给出三阶方案:先用最简单的/etc/fstab方案试水(用户可能不知道WSL支持fstab),再用rc.local解决自动化问题(需要教用户创建这个传统Linux文件),最后提供Windows任务计划作为保底方案——虽然步骤稍多,但能100%确保挂载时机正确。每个方案都强调验证步骤,因为磁盘操作有风险。 特别要警告用户避免两种常见错误:在/etc/fstab里直接写/dev/sdc(设备名可能变),以及使用mount命令不检查磁盘是否存在。用户之前遇到的“重启失效”可能正是因为用了临时设备名挂载。 </think>根据引用内容和WSL机制分析,解决WSL磁盘挂载重启失效问题的核心方法是**实现磁盘自动挂载**。以下是具体解决方案: --- ### 解决方法 #### 1. 配置 `/etc/fstab` 永久挂载(推荐) ```bash # 在WSL终端执行 sudo bash -c "echo '/dev/sdc /mnt/d auto defaults 0 0' >> /etc/fstab" ``` - **原理**:Linux系统启动时会自动读取此配置文件挂载磁盘 - **验证**:执行 `sudo mount -a` 测试配置是否正确 - **注意**:需将 `/dev/sdc` 替换为实际磁盘标识符,可通过 `lsblk` 查看 #### 2. 创建启动脚本(兼容旧版WSL) ```bash # 创建服务文件 sudo tee /etc/systemd/system/mount_disks.service > /dev/null <<EOF [Unit] Description=Mount persistent disks [Service] Type=oneshot ExecStart=/bin/mount /dev/sdc /mnt/d [Install] WantedBy=multi-user.target EOF # 启用服务 sudo systemctl enable mount_disks.service ``` #### 3. Windows任务计划(终极方案) 1. 创建 `mount_wsl_disks.bat` 文件: ```bat wsl -u root mount /dev/sdc /mnt/d ``` 2. 设置任务计划: - 触发器:`Windows启动时` - 操作:运行上述bat文件 - 勾选 **"使用最高权限运行"** --- ### 关键要点总结 1. **失效原因**(引用[1]): - WSL完全终止时(如 `wsl --shutdown` 或重启Windows)会卸载所有磁盘 - 默认仅Windows开机时需手动挂载 ✅ 2. **防终止建议**: - 避免使用 `wsl --shutdown`(引用[2]) - 改用 `wsl -t <发行版名>` 终止单个实例 - 关闭窗口不会终止WSL后台进程 ✅ 3. **磁盘选择建议**: - 优先使用 `ext4` 格式磁盘(NTFS性能差,引用[2]) - 项目文件建议存放在WSL原生目录 `~/` 而非 `/mnt/` --- ### 验证步骤 ```bash # 查看磁盘挂载状态 lsblk -f # 检查启动日志 journalctl -b | grep mount ``` > ⚠️ **注意**:若仍遇到问题,可能是虚拟磁盘路径变更(如`/dev/sdc`变为`/dev/sdd`),建议使用磁盘UUID代替设备号: > ```bash > sudo blkid /dev/sdc # 获取UUID > sudo nano /etc/fstab # 替换为 UUID=xxxx > ```
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值