win11结合wsl2搭建开发环境之一:win11使用wsl将Ubuntu24.04到D盘

1. 电脑设置

1.1 虚拟化设置

如果没有开启的话,需要到BIOS里面设置的。具体根据自己电脑网上打一下怎么开启虚拟化(为什么主板出厂的时候,不默认根据CPU开启呢?)
image

1.2 系统设置

控制面板->程序->启用或关闭 windows 功能,开启 Windows 虚拟化和 Linux 子系统(WSL2)以及Hyper-V
勾选完成后,Windows11 会自己下载些东西,并提示你重启。等电脑彻底重启完以后,进行后续操作
image

重启完之后,打开Power Shell 以管理员命令输入下方代码

bcdedit /set hypervisorlaunchtype auto

然后将wsl升级到最新版

wsl --update

2. 系统安装

2.1 手动安装

2.1.1 在微软这个wiki中下载发行版,下载你所需要的发行版文件。

我选择的是Ubuntu 24.04
image

2.1.2 下载好是一个AppxBundle文件来的

image

2.1.3 将文件后缀由AppxBundle改成zip

image

2.1.4选择对应的平台,改后缀解压

image

2.1.5 解压后,双击运行

image
随后该目录下会出现一个ext4.vhdx。这里一个磁盘镜像文件存储数据

3.导出虚拟机

主要是为了安装后,改为其他盘符存放,所以接下来导出导入方式迁移!

3.1 查看虚拟机

安装好并初始化设置了用户后,在PowerShell中查询有哪些虚拟机

wsl -l --all -v

image

3.2 关闭WSL虚拟机

关闭WSL虚拟机(一定要关闭虚拟机之后再导出! 否则数据可能丢失!)

wsl -t Ubuntu-24.04

3.3 导出虚拟机文件

一定要关闭虚拟机之后再导出! 否则数据可能丢失!

wsl --export Ubuntu-24.04 D:\wsl\Ubuntu-24.04.tar

然后新建一个文件夹用于一会导入虚拟机存放数据使用。这里新建的目录是D:\wsl\Ubuntu-24.04

3.4 卸载原虚拟机

现在我们可以把原来C盘的虚拟机卸载了(WSL2卸载同时会删除原虚拟机数据!)
注意:高危操作! 请确保已完整导出虚拟机文件!

wsl --unregister Ubuntu-24.04

4.导入虚拟机

4.1 导入

# wsl --import <虚拟机名称> <新数据镜像文件的存放文件夹路径> <导出的备份文件路径>
wsl --import Ubuntu-24.04 D:\wsl\Ubuntu-24.04 D:\wsl\Ubuntu-24.04.tar

4.2 查看虚拟机

wsl -l --all -v

4.3 修改默认子系统虚拟机

# wslconfig /setdefault <选定的虚拟机名称>
wslconfig /setdefault Ubuntu-24.04

4.4 修改默认登录用户

迁移后登录可能会发现使用的是root登录,而非安装时设置的用户
这里我们需要设置wsl.conf文件,一般存储在/etc/wsl.conf,具体可看官方wiki WSL中的高级设置配置

sudo vim /etc/wsl.conf

添加以下内容

[user]
default = 你安装设置的普通用户名

保存配置并退出。
重启wsl

wsl --list --running
wsl --shutdown
wsl

便会发现默认用户已经修改了

需要注意的是 wsl.conf 配置优先级要高于Ubuntu2404.exe config --default-user,因此如果两个都配置了的话,会以 wsl.conf 中的配置优先。
(但是使用导入方式的虚拟机子系统无法使用Ubuntu2404.exe config --default-user方式设置用户,故无需考虑)

5. 内部网络ip

这个不用自己操作的,系统自动生成的
宿主机(win11)内部ip: 172.22.240.1
image
wsl(Ubuntu)内部ip: 172.22.254.13
image

6. 其它一些杂基

启动报错: wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理

解决方案

在Windows中的C:\Users<your_username>目录下创建一个.wslconfig文件,然后在文件中写入如下内容

[experimental]
autoMemoryReclaim=gradual  
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

然后用wsl --shutdown关闭WSL,之后再启动,提示就消失了。

posted @ 2024-12-28 16:03  DavidHHuan  阅读(3357)  评论(0)    收藏  举报