WSL2的安装与使用

WSL2的安装与使用

什么是 WSL?

WSL (Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统)是微软在 Windows 10/11 中内置的 Linux 兼容层,让你无需虚拟机或双系统,直接在 Windows 上运行 Linux 环境。

目前有两个版本:

版本 架构 Linux 内核 Docker 支持 文件系统性能 兼容性
WSL1 系统调用翻译层 无(转译为 Windows 调用) ❌ 不支持 Windows 文件快 部分软件不兼容
WSL2 轻量级虚拟机 ✅ 完整 Linux 内核 ✅ 原生支持 Linux 文件快 接近 100%

WSL2 vs WSL1:为什么选 WSL2?

WSL2 全面优于 WSL1,日常使用务必选 WSL2:

  1. 完整 Linux 内核:WSL2 运行真正的 Linux 内核(微软维护),几乎所有 Linux 软件都能跑
  2. 原生 Docker 支持:WSL1 跑不了 Docker,WSL2 可以直接安装 Linux 版 Docker
  3. systemd 支持 :Win11 上的 WSL2 支持 systemd,可以用 systemctl 管理服务
  4. 性能更好 :在 Linux 文件系统(/home/)下 I/O 性能远超 WSL1

⚠️ 唯一例外 :如果你的项目文件放在 Windows 盘(/mnt/c/)下且需要频繁读写,WSL1 的跨文件系统性能反而更好。但一般建议把项目放在 WSL 内部(~/projects/),用 WSL2。

WSL1 和 WSL2 的关系

WSL1 和 WSL2 共用同一套安装机制 ,不需要分别安装。区别只在于版本切换:

  • wsl --install 在新系统上默认安装 WSL2
  • WSL1 通过 wsl --set-version 命令切换即可,无需单独安装
powershell 复制代码
# 把某个发行版降级为 WSL1
wsl --set-version Ubuntu-22.04 1

# 升回 WSL2
wsl --set-version Ubuntu-22.04 2

# 设置以后新安装的发行版默认用哪个版本
wsl --set-default-version 1   # 默认 WSL1
wsl --set-default-version 2   # 默认 WSL2(推荐)

⚠️ 老版本 Windows 10 (内部版本 19041 之前)只支持 WSL1,没有 WSL2。这种系统上 wsl --install 装的就是 WSL1。建议升级 Windows 到较新版本以使用 WSL2。


安装 WSL2

前置要求

  • Windows 10 版本 2004+ (内部版本 19041+)或 Windows 11
  • BIOS 中已开启虚拟化(Intel VT-x / AMD-V),一般默认开启
  • 查看系统版本:Win + R → winver

方式一:一键安装(推荐,Win11 / 较新 Win10)

以管理员身份打开 PowerShell(右键开始菜单 → "终端(管理员)"),执行:

powershell 复制代码
wsl --install

这条命令会自动完成:

  1. 启用 Virtual Machine Platform 和 WSL 功能
  2. 下载并安装 WSL2 Linux 内核
  3. 设置 WSL2 为默认版本
  4. 安装默认发行版(Ubuntu)

安装完成后重启电脑。

⚠️ 注意 :在某些 Windows 版本上,wsl --install 只会启用功能并安装内核,不会自动安装发行版 。重启后执行 wsl -l -v 如果提示"没有已安装的分发",需手动安装发行版:

powershell 复制代码
# 查看可用发行版
wsl --list --online

# 安装 Ubuntu 22.04
wsl --install -d Ubuntu-22.04

也可以打开 Microsoft Store 搜索 "Ubuntu 22.04 LTS" 安装(通常比命令行下载快)。

方式二:手动安装(老版本 Win10 或一键安装失败)

步骤 1:启用 WSL 和虚拟机平台功能

powershell 复制代码
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重启电脑。

步骤 2:下载并安装 WSL2 Linux 内核更新包

步骤 3:设置 WSL2 为默认版本

powershell 复制代码
wsl --set-default-version 2

步骤 4:安装 Linux 发行版

  • 打开 Microsoft Store ,搜索 "Ubuntu 22.04 LTS",点击安装
  • 或命令行安装:wsl --install -d Ubuntu-22.04

初始化 Ubuntu

首次启动 Ubuntu(开始菜单 → Ubuntu),会要求设置:

复制代码
Installing, this may take a few minutes...
Please create a default UNIX user account.
The username only needs to match the name of a Linux user, not your Windows user.

Enter new UNIX username: cmty          ← 输入用户名(小写字母)
New password: 123456                 ← 输入密码(不显示字符,正常现象)
Retype new password: 123456          ← 再次输入确认

设置完成后进入 shell,安装成功。

验证安装

PowerShell 执行:

powershell 复制代码
wsl -l -v

正常输出:

复制代码
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

⚠️ VERSION 列必须是 2 。如果是 1,手动转换:

powershell 复制代码
wsl --set-version Ubuntu-22.04 2

安装其他发行版

查看可用发行版:

powershell 复制代码
wsl --list --online

安装指定发行版:

powershell 复制代码
wsl --install -d Debian
wsl --install -d openSUSE-Tumbleweed

基础配置

1. 换国内软件源(加速 apt)

Ubuntu 默认使用国外源,下载慢。进入 Ubuntu shell 执行:

bash 复制代码
# Ubuntu 22.04 及更早版本
sudo sed -i 's|http://archive.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list
sudo sed -i 's|http://security.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list
sudo apt update && sudo apt upgrade -y

ℹ️ Ubuntu 24.04 源文件路径改为 /etc/apt/sources.list.d/ubuntu.sources,需手动编辑该文件替换 URL。

2. 启用 systemd(Win11 推荐)

systemd 是 Linux 的初始化系统和服务管理器。启用后可以用 systemctl 管理 Docker、MySQL 等服务,和真实 Linux 体验一致。

bash 复制代码
sudo tee /etc/wsl.conf <<EOF
[boot]
systemd=true
EOF

PowerShell 执行 wsl --shutdown,重新进入 Ubuntu,验证:

bash 复制代码
systemctl status

3. 限制 WSL2 内存占用

可选,WSL2 自带 WSL Settings 可以进行图形化配置

WSL2 默认最多占用一半物理内存,且不主动释放。在 Windows 用户目录 创建 C:\Users\你的用户名\.wslconfig:

ini 复制代码
[wsl2]
memory=8GB
processors=4
swap=2GB

按你电脑配置调整。修改后 PowerShell 执行 wsl --shutdown 重启生效。

4. 配置默认用户

如果安装时设置了用户名,但想切换默认登录用户为 root 或其他用户:

bash 复制代码
# 在 /etc/wsl.conf 中添加
sudo tee -a /etc/wsl.conf <<EOF

[user]
default=cmty
EOF

# 检查一下
cat /etc/wsl.conf

PowerShell 执行 wsl --shutdown 后重新进入生效。


日常使用

进入 WSL

方式 操作
开始菜单 搜索 "Ubuntu" → 点击打开
命令行 PowerShell / CMD 输入 wsl
Windows Terminal 推荐,支持多标签页(Win11 自带,Win10 从 Store 安装)
VS Code 安装 WSL 扩展,在 WSL shell 中执行 code . 打开项目

常用 WSL 命令(在 PowerShell / CMD 中执行)

powershell 复制代码
wsl                          # 进入默认 WSL 实例
wsl -d Ubuntu-22.04          # 进入指定发行版
wsl -l -v                    # 查看所有发行版及版本
wsl --shutdown               # 关闭所有 WSL 实例(释放内存)
wsl --update                 # 更新 WSL 内核
wsl --unregister Ubuntu-22.04  # 卸载指定发行版(⚠️ 会删除所有数据)
wsl --export Ubuntu-22.04 D:\ubuntu-backup.tar   # 导出备份
wsl --import Ubuntu-22.04 D:\wsl\ubuntu D:\ubuntu-backup.tar  # 导入恢复

文件互访

方向 路径
Windows 访问 WSL 文件 资源管理器输入 \\wsl$\Ubuntu-22.04\home\cmty
WSL 访问 Windows 文件 /mnt/c/Users/你的用户名/(C 盘)、/mnt/d/(D 盘)

💡 性能建议 :项目文件放在 WSL 内部(如 ~/projects/),I/O 性能比放在 Windows 盘(/mnt/c/)好 10 倍以上。用 VS Code WSL 模式编辑即可。

VS Code 集成(推荐开发方式)

  1. Windows 安装 VS Code

  2. 安装扩展 WSL(微软官方)

  3. 在 WSL shell 中进入项目目录:

    bash 复制代码
    cd ~/projects/my-app
    code .
  4. VS Code 会以 WSL 环境打开,左下角显示 WSL: Ubuntu-22.04,此时所有终端、调试、扩展都在 Linux 环境运行


在 WSL2 中安装 Docker

⚠️ 强烈建议:不要装 Docker Desktop(占内存大、启动慢、商用收费),直接在 WSL2 里装 Linux 版 Docker。

安装 Docker

bash 复制代码
# 一键安装(使用阿里云镜像加速)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 将当前用户加入 docker 组(免 sudo 运行 docker)
sudo usermod -aG docker $USER

# 启动 docker
# 未启用 systemd 时:
sudo service docker start

# 启用 systemd 后:
sudo systemctl enable docker
sudo systemctl start docker

# 验证安装
docker run hello-world

ℹ️ 加入 docker 组后需要重新登录 或执行 newgrp docker 才能免 sudo。

配置 Docker 镜像加速

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com"
  ]
}
EOF

# 启用 systemd 时(设置自动启动):
sudo systemctl daemon-reload
sudo systemctl restart docker

# 未启用 systemd 时:
sudo service docker restart

Docker Compose

Docker 20.10+ 已内置 docker compose 子命令(V2 版本),无需单独安装 docker-compose。

bash 复制代码
docker compose version   # 验证

网络与端口

WSL2 访问 Windows 服务

WSL2 中可以直接用 localhost 访问 Windows 上运行的服务:

bash 复制代码
# Windows 上跑了一个服务在 8080 端口
curl http://localhost:8080

Windows 访问 WSL2 服务

WSL2 的端口会自动转发 到 Windows,直接用 localhost 即可:

bash 复制代码
# WSL 中启动一个服务
python3 -m http.server 8000

Windows 浏览器访问 http://localhost:8000 即可。

获取 WSL2 的 IP 地址

WSL2 每次重启 IP 可能变化(172.x.x.x 网段):

bash 复制代码
# 在 WSL 中执行
hostname -I
# 输出示例(可能返回多个 IP,用空格分隔):
# 172.20.123.45 172.17.0.1

# 或查看指定网卡
ip addr show eth0

💡 为什么会有多个 IP?

hostname -I 会返回所有网卡的 IP,常见的两个来源:

IP 来源 说明
172.20.123.45 WSL2 虚拟网卡(eth0) WSL2 实例本身的 IP,Windows 通过它和 WSL2 通信
172.17.0.1 Docker 的 docker0 网桥 安装 Docker 后自动创建,所有容器默认走这个网段(172.17.0.x)

日常开发基本不用关心这些 IP ,因为 Windows 访问 WSL2/Docker 服务都可以直接用 localhost(自动端口转发)。只有在需要从局域网其他设备访问、或某些工具不支持 localhost 时才需要用真实 IP。

固定 WSL2 IP(可选)

如果需要固定 IP,可以在 Windows 的 hosts 文件中添加:

复制代码
# C:\Windows\System32\drivers\etc\hosts
172.20.123.45  wsl.local

IP 用 wsl hostname -I 获取(取 eth0 对应的那个,即第一个 IP)。但更推荐用 localhost 或 Docker 端口映射,不需要固定 IP。


常见问题

Q1: WSL2 占用内存越来越大?

WSL2 不用时不主动释放内存。解决方法:

powershell 复制代码
# 方法 1:手动关闭释放
wsl --shutdown

# 方法 2:配置内存上限(C:\Users\你的用户名\.wslconfig)
[wsl2]
memory=8GB
swap=2GB

Q2: Windows 重启后 WSL 里的 Docker 没启动?

  • 启用 systemd 时 :执行过 sudo systemctl enable docker 会自动启动
  • 未启用 systemd 时 :需手动执行 sudo service docker start

Q3: wsl --install 下载很慢?

  • 使用手机热点临时加速
  • 等网络空闲时段重试
  • 改用手动安装方式,从 Microsoft Store 安装 Ubuntu(通常更快)

Q4: 报错 WslRegisterDistribution failed with error: 0x800701bc?

WSL2 内核未更新。解决:

  1. 下载 https://aka.ms/wsl2kernel 的 wsl_update_x64.msi 并安装
  2. 或 PowerShell 执行 wsl --update

Q5: 报错 0x80370102(虚拟机无法启动)?

BIOS 虚拟化未开启。解决:

  1. 重启电脑进入 BIOS
  2. 找到 Intel VT-x / AMD-V / Virtualization Technology 选项,设为 Enabled
  3. 保存重启

Q6: 如何迁移 WSL2 到其他磁盘?

powershell 复制代码
# 1. 关闭 WSL
wsl --shutdown

# 2. 导出
wsl --export Ubuntu-22.04 D:\ubuntu-backup.tar

# 3. 注销原实例
wsl --unregister Ubuntu-22.04

# 4. 导入到新位置
wsl --import Ubuntu-22.04 D:\wsl\ubuntu D:\ubuntu-backup.tar

# 5. 设置默认用户(导入后默认是 root)
ubuntu2204.exe config --default-user cmty

Q7: 如何在多个 WSL 发行版之间切换?

powershell 复制代码
wsl -d Ubuntu-22.04     # 进入指定发行版
wsl --setdefault Ubuntu-22.04  # 设置默认发行版

实用配置示例:Docker Compose 部署开发环境

在 WSL2 中创建 ~/docker-compose.yml,一键部署 MySQL + Redis + MinIO:

bash 复制代码
# 创建文件
touch docker-compose.yml
# 或使用 nano 编辑器
nano ~/docker-compose.yml

💡 端口加前缀避免冲突 :Windows 本地可能已装了 MySQL(3306)、Redis(6379)等服务。建议把容器映射到 Windows 的端口加个前缀(如 1),即 13306:3306,避免和本地服务冲突。容器内部端口保持不变(3306/6379),只是映射到 Windows 的端口变了。

yaml 复制代码
services:
  mysql:
    image: mysql:8.0
    ports: ["13306:3306"]        # Windows 用 13306 连接,容器内仍是 3306
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_DATABASE: "mydb"
    volumes: ["mysql_data:/var/lib/mysql"]
    restart: unless-stopped

  redis:
    image: redis:7
    ports: ["16379:6379"]        # Windows 用 16379 连接,容器内仍是 6379
    command: redis-server --requirepass 123321
    volumes: ["redis_data:/data"]
    restart: unless-stopped

  minio:
    image: minio/minio
    ports: ["19000:9000", "19001:9001"]   # API 用 19000,控制台用 19001
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    command: server /data --console-address ":9001"
    volumes: ["minio_data:/data"]
    restart: unless-stopped

volumes:
  mysql_data:
  redis_data:
  minio_data:

启动:

bash 复制代码
docker compose up -d        # 后台启动所有服务
docker compose ps           # 查看运行状态
docker compose down         # 停止并移除容器

Windows 连接地址(WSL2 端口自动转发):

服务 连接地址 说明
MySQL localhost:13306 用 Navicat/DataGrip 等客户端连接
Redis localhost:16379 用 RedisInsight/RDM 等客户端连接
MinIO API http://localhost:19000 项目代码里配置的 endpoint
MinIO 控制台 http://localhost:19001 浏览器访问,账号 minioadmin/minioadmin

restart 重启策略说明

restart 字段决定容器退出后是否自动重启,常用取值:

策略 含义 适用场景
no 默认值,容器退出后不重启 一次性任务
always 总是 重启(手动 docker stop 后,重启 Docker 也会拉起) 生产环境关键服务
unless-stopped 除非手动停止,否则自动重启(手动 stop 后,重启 Docker 不会拉起) 推荐,日常开发/生产
on-failure 仅在非零退出码时重启,可加最大次数 on-failure:3 可能异常退出的服务

💡 推荐用 unless-stopped:日常崩溃/重启电脑会自动恢复,但你手动 stop 后不会偷偷拉起来,方便维护。

部署项目:复用组件还是新建?

推荐复用 ,把项目服务加到同一个 docker-compose.yml 里。原因:

  • 网络互通 :同一 compose 文件的服务自动在一个网络里,项目容器可以用服务名直接连 mysql:3306、redis:6379,不用配 IP
  • 统一管理 :一条 docker compose up -d 全部启动,docker compose down 全部停止
  • 依赖顺序 :depends_on 保证 MySQL 先启动,项目后启动
示例:若依项目部署
yaml 复制代码
services:
  # ===== 基础组件 =====
  mysql:
    image: mysql:8.0
    ports: ["13306:3306"]        # Windows 用 13306 连接,容器内仍是 3306
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_DATABASE: "ry-vue"   # 若依默认库名
    volumes:
      - mysql_data:/var/lib/mysql
      - ./sql/ry_20240629.sql:/docker-entrypoint-initdb.d/ry_20240629.sql   # 初始化 SQL
      - ./sql/ry_config_20240629.sql:/docker-entrypoint-initdb.d/ry_config_20240629.sql
    restart: unless-stopped

  redis:
    image: redis:7
    ports: ["16379:6379"]        # Windows 用 16379 连接,容器内仍是 6379
    command: redis-server --requirepass 123321
    volumes: ["redis_data:/data"]
    restart: unless-stopped

  # ===== 若依后端(Spring Boot)=====
  ruoyi-admin:
    build: ./ruoyi-admin         # 后端 Dockerfile 所在目录
    ports: ["18080:8080"]        # Windows 用 18080 访问,容器内仍是 8080
    # environment 是可选的:如果 application.yml 里的配置和 compose 服务名/端口/密码一致,就不用写
    # 这里用 environment 覆盖,是因为若依默认 yml 里写的是 localhost,容器内连不到
    environment:
      # MySQL:容器间用服务名 + 容器内端口
      SPRING_DATASOURCE_DRUID_MASTER_URL: jdbc:mysql://mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
      SPRING_DATASOURCE_DRUID_MASTER_USERNAME: root
      SPRING_DATASOURCE_DRUID_MASTER_PASSWORD: "123456"
      # Redis:容器间用服务名 + 容器内端口
      SPRING_DATA_REDIS_HOST: redis
      SPRING_DATA_REDIS_PORT: "6379"
      SPRING_DATA_REDIS_PASSWORD: "123321"
    depends_on:
      - mysql
      - redis
    restart: unless-stopped

  # ===== 若依前端(Vue3 + Nginx)=====
  ruoyi-ui:
    build: ./ruoyi-ui            # 前端 Dockerfile 所在目录
    ports: ["180:80"]            # Windows 用 180 访问,容器内仍是 80
    depends_on:
      - ruoyi-admin
    restart: unless-stopped

volumes:
  mysql_data:
  redis_data:

💡 说明:

  • 后端 :若依 ruoyi-admin 模块打包成 jar,用 Dockerfile 构建。环境变量覆盖 application.yml 中的数据库/Redis 配置(Spring Boot 自动绑定)
  • 前端 :ruoyi-ui 构建后用 Nginx 托管静态文件,并反向代理 /prod-api 到后端 ruoyi-admin:8080(容器间通信用服务名)
  • MySQL 初始化 :把若依的 SQL 文件挂载到 /docker-entrypoint-initdb.d/,MySQL 首次启动会自动执行
  • MinIO:若依默认配置已支持 OSS,如需本地文件存储再加 minio 服务
environment 是可选的

environment 字段不是必须的 ,取决于 application.yml 的配置情况:

情况 是否需要 environment 说明
application.yml 里写的是 localhost:3306 ✅ 需要 容器内 localhost 是容器自己,连不到 MySQL,必须用 environment 覆盖成服务名 mysql
application.yml 里已改成 mysql:3306(服务名) ❌ 不需要 yml 配置和 compose 服务名一致,直接用 yml 即可
用 Spring Profile 区分环境(application-docker.yml) ❌ 不需要 打包时指定 --spring.profiles.active=docker,用专门的 docker 配置文件

两种配置方式对比:

yaml 复制代码
# 方式 1:用 environment 覆盖(不改 yml,推荐)
# 优点:yml 保持默认值,方便本地 IDE 调试;docker 部署时用环境变量覆盖
ruoyi-admin:
  environment:
    SPRING_DATASOURCE_DRUID_MASTER_URL: jdbc:mysql://mysql:3306/ry-vue

# 方式 2:直接改 application.yml(不用 environment)
# 优点:compose 文件更简洁
# 缺点:yml 改成服务名后,本地 IDE 跑项目就连不上 docker 里的 MySQL 了,需要再改回来
# application-druid.yml:
# url: jdbc:mysql://mysql:3306/ry-vue   ← 改成服务名

💡 推荐方式 1 :保持 application.yml 用 localhost(方便本地 IDE 调试连 Windows 上的 MySQL),docker 部署时用 environment 覆盖成服务名。这样一套代码既能本地跑,也能 docker 部署,不用改来改去。

什么时候分开?
场景 建议 原因
开发环境 基础组件单独一个 compose 常驻,项目用 IDE 跑 方便调试,不用每次重启数据库
生产/演示环境 全部合并到一个 compose,一键部署 统一管理,依赖有序
项目容器内如何连接 MySQL/Redis?

⚠️ 关键 :用服务名 作为主机名,不要写 localhost!

yaml 复制代码
# ❌ 错误:容器内的 localhost 是容器自己,连不到 MySQL
SPRING_DATASOURCE_DRUID_MASTER_URL: jdbc:mysql://localhost:3306/ry-vue

# ✅ 正确:用 compose 里的服务名
SPRING_DATASOURCE_DRUID_MASTER_URL: jdbc:mysql://mysql:3306/ry-vue

Docker Compose 会自动为同一网络内的服务做 DNS 解析,mysql、redis、minio 这些服务名可以直接当主机名用。

端口映射易错点:容器内端口 vs Windows 访问端口

⚠️ 关键区分 :ports: ["13306:3306"] 中,左边 13306 是 Windows 访问端口,右边 3306 是容器内端口。两者不要搞混!

场景 用哪个端口 示例
容器之间互相连接(ruoyi-admin 连 mysql) 用容器内端口(右边) jdbc:mysql://mysql:3306/ry-vue
Windows 客户端连接(Navicat 连 MySQL) 用映射端口(左边) localhost:13306
项目代码跑在 Windows 本地(IDE 调试若依) 用映射端口(左边) jdbc:mysql://localhost:13306/ry-vue
yaml 复制代码
# ❌ 错误:容器间通信用了 Windows 映射端口
SPRING_DATASOURCE_DRUID_MASTER_URL: jdbc:mysql://mysql:13306/ry-vue   # 容器内没有 13306 端口

# ✅ 正确:容器间通信用容器内端口
SPRING_DATASOURCE_DRUID_MASTER_URL: jdbc:mysql://mysql:3306/ry-vue

WSL2 架构简述

复制代码
┌─────────────────────────────────────────┐
│              Windows 主机                │
│  ┌─────────────┐   ┌─────────────────┐  │
│  │  Windows 应用 │   │   WSL 管理服务   │  │
│  │  (浏览器等)   │   │  (wslservice)   │  │
│  └─────────────┘   └────────┬────────┘  │
│                             │            │
│  ┌──────────────────────────▼─────────┐  │
│  │      轻量级 Hyper-V 虚拟机          │  │
│  │  ┌───────────────────────────────┐ │  │
│  │  │     完整 Linux 内核 (微软维护)  │ │  │
│  │  │  ┌──────┐  ┌──────┐  ┌──────┐ │ │  │
│  │  │  │Ubuntu│  │Debian│  │ ...  │ │ │  │
│  │  │  └──────┘  └──────┘  └──────┘ │ │  │
│  │  │     ext4 文件系统 (vhdx)       │ │  │
│  │  └───────────────────────────────┘ │  │
│  └────────────────────────────────────┘  │
└─────────────────────────────────────────┘
  • WSL 管理服务:负责启动/停止虚拟机,管理发行版
  • 轻量级虚拟机:启动极快(约 1-2 秒),资源按需分配
  • Linux 内核:微软维护的开源内核(https://github.com/microsoft/WSL2-Linux-Kernel),完整支持 Linux 系统调用
  • vhdx 虚拟磁盘 :每个发行版的文件系统存储在一个 .vhdx 文件中,动态扩展

学习参考

相关推荐
微小的鱼21 分钟前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng42 分钟前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
Linux-lucky13 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
禁默13 小时前
启元 Q1 二次开发实践:Ubuntu 部署与仿真验证,从 PrimeConsole 到 ROS 2 Humble + RViz
linux·运维·ubuntu
skywalk816314 小时前
把 去也网站 从 Ubuntu 搬到 FreeBSD:一次 Service Jail + nginx 的部署实录
linux·运维·nginx·ubuntu·freebsd
爱莉希雅&&&16 小时前
GitLab 完整学习笔记
linux·运维·服务器
风笙97816 小时前
[文件系统]文件系统挂载与卸载详解
linux
GeW16 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux·数据库