跳转至

WSL 安装与使用教程:生信工程师的 Windows+Linux 双系统方案

1. 一句话说明

WSL(Windows Subsystem for Linux)让你在 Windows 上直接运行 Linux 命令行环境,无需装虚拟机或双系统,conda 环境、生信工具链、Shell 脚本全部原生可用——Windows 做日常 + Linux 做分析,一台电脑搞定。


2. WSL 是什么

2.1 白话解释

WSL = 在 Windows 里开了一扇通往 Linux 的门。

想象你的电脑是一栋房子: - 双系统(装 Windows + Ubuntu)= 把房子隔成两间,同一时间只能待在一间里,想去另一间得出门换房间(重启电脑) - 虚拟机(VMware / VirtualBox)= 在你房间里搭了一个"小帐篷"——能用,但帐篷占空间、闷热(吃内存/CPU),进出不方便 - WSL = 在墙上开了一扇门——你人还在 Windows 房间里,推门就到 Linux 那边了,文件互通、网络共享,几乎感觉不到隔阂

2.2 对生信的意义

生信工具链(fastp、samtools、BLAST、Kraken2、MetaPhlAn 等)绑定 Linux 生态。以前在 Windows 上做生信只有三条路:

方案优点缺点
双系统性能最好切换要重启,文件互通麻烦
虚拟机隔离好吃资源严重(至少分 4GB 内存),I/O 慢
WSL2启动秒开、资源动态分配、文件互通图形界面不如原生

结论:对于日常开发和学习场景,WSL2 是 Windows 用户做生信分析的最优方案。


3. WSL1 vs WSL2 的区别

对比项WSL1WSL2
内核翻译层(把 Linux 调用翻译成 Windows 调用)真正的 Linux 内核(微软维护的 6.6 LTS)
白话类比像用翻译软件实时翻译外语——有些话翻不出来像直接请了个母语外教——什么都能说
文件系统性能访问 Windows 文件快,Linux 文件系统慢Linux 文件系统很快(ext4 原生),跨系统访问稍慢
兼容性部分 Linux 程序跑不了(如 Docker)几乎 100% 兼容(Docker、systemd 全支持)
启动速度秒开秒开(< 2 秒,2026 年版本更快)
网络与 Windows 共享 IP默认有独立虚拟网卡(可配置为镜像模式)
推荐度不推荐(已过时)强烈推荐

白话总结:WSL1 像"翻译器",WSL2 像"真 Linux"。做生信请直接用 WSL2。


4. 安装前提条件

4.1 Windows 版本要求

最低要求:
- Windows 10 版本 2004(Build 19041)或更高
- Windows 11 任何版本(推荐)
- Home / Pro / Enterprise 版均可

查看你的版本:
Win+R → 输入 winver → 回车

白话:基本上 2020 年后买的电脑、正常更新了系统的都满足。

4.2 BIOS 虚拟化

WSL2 需要 CPU 虚拟化支持(Intel VT-x 或 AMD-V),大多数电脑默认开启。

检查方法: 1. 按 Ctrl + Shift + Esc 打开任务管理器 2. 点 "性能" 标签 → "CPU" 3. 右下角看 "虚拟化" 是否显示 "已启用"

如果显示 "已禁用": 1. 重启电脑,开机时按 F2 / Del / F12(不同品牌按键不同)进 BIOS 2. 找到 Intel Virtualization TechnologySVM Mode,改为 Enabled 3. 保存退出

4.3 磁盘空间

  • 最少需要 8GB 可用空间
  • 推荐 20GB+(生信工具 + 数据库会占不少空间)

5. 完整安装步骤

5.1 一条命令安装(推荐)

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

# 这一条命令会自动完成以下所有操作:
# 1. 启用 WSL 功能
# 2. 启用虚拟机平台
# 3. 下载最新 WSL 内核
# 4. 设置 WSL2 为默认版本
# 5. 安装 Ubuntu(默认安装 Ubuntu 24.04)
wsl --install

安装完成后重启电脑

重启后会自动弹出 Ubuntu 终端窗口,提示你创建用户名和密码(见第 6 节)。

5.2 指定安装 Ubuntu 22.04

如果你想安装特定版本的 Ubuntu:

# 先查看可用的发行版列表
wsl --list --online

# 安装 Ubuntu 22.04(推荐生信使用)
wsl --install -d Ubuntu-22.04

5.3 手动安装步骤(备用方案)

如果 wsl --install 失败(比如公司网络限制),手动安装:

# 步骤1:启用 WSL 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 步骤2:启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 步骤3:重启电脑(必须!)
# --- 重启后继续 ---

# 步骤4:设置 WSL2 为默认版本
wsl --set-default-version 2

# 步骤5:从 Microsoft Store 搜索 "Ubuntu 22.04" 安装
# 或者用命令行:
wsl --install -d Ubuntu-22.04 --web-download
# --web-download 表示直接从网络下载,跳过 Store(解决有些电脑 Store 连不上的问题)

5.4 确认安装成功

# 查看 WSL 版本信息
wsl --version

# 示例输出:
# WSL 版本:2.7.0.0
# 内核版本:6.6.114.1
# WSLg 版本:1.0.68
# ......

# 查看已安装的发行版
wsl --list --verbose
# 或简写
wsl -l -v

# 示例输出:
#   NAME            STATE           VERSION
# * Ubuntu-22.04    Running         2

确认 VERSION 列显示 2,说明是 WSL2。


6. 初始配置

6.1 创建用户名和密码

首次启动 Ubuntu 会提示:

Enter new UNIX username: user
# 输入你的用户名(建议小写英文,不要中文)

New password:
# 输入密码(输入时不会显示任何字符,这是 Linux 的安全设计,正常输入即可)

Retype new password:
# 再输一次确认

6.2 更换 apt 软件源(换成国内镜像,下载更快)

# 先备份原始源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 用清华镜像替换(Ubuntu 22.04 代号是 jammy)
# 如果是 Ubuntu 24.04 代号是 noble,替换下面的 jammy 为 noble
sudo tee /etc/apt/sources.list << 'EOF'
# 清华大学 Ubuntu 镜像源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
EOF

# 更新软件包列表
sudo apt update

# 升级已安装的软件包
sudo apt upgrade -y

6.3 安装常用基础工具

# 这些工具在后续生信分析和日常使用中经常用到
sudo apt install -y \
    build-essential \    # 编译工具(gcc、make 等,安装一些软件需要)
    curl \               # 下载工具(类似 wget,但功能更多)
    wget \               # 下载工具
    git \                # 版本控制
    unzip \              # 解压 zip 文件
    tree \               # 树状显示目录结构
    htop \               # 增强版系统监控(比 top 好看好用)
    vim \                # 文本编辑器
    nano                 # 另一个文本编辑器(更简单,适合新手)

7. 启动和进入 WSL 的多种方式

7.1 从 Windows 进入 WSL

方式1:在开始菜单搜索 "Ubuntu" 点击打开

方式2:打开 Windows Terminal,点击下拉箭头选择 "Ubuntu"

方式3:在任意终端(PowerShell / CMD)输入:
  wsl                    # 进入默认发行版
  wsl -d Ubuntu-22.04    # 进入指定发行版

方式4:在文件资源管理器地址栏输入 wsl 回车

方式5:在 VS Code 里用 Remote-WSL 插件直接连接

7.2 退出 WSL

exit          # 退出当前 WSL 终端
# 或者按 Ctrl+D

7.3 关闭和重启 WSL

# 在 PowerShell 中执行:

wsl --shutdown          # 关闭所有 WSL 实例(修改配置后需要执行这个)
wsl --terminate Ubuntu-22.04   # 关闭指定发行版

8. Windows 和 WSL 之间的文件互访

8.1 核心规则

从 WSL 访问 Windows 文件:/mnt/c/  /mnt/d/  ...
从 Windows 访问 WSL 文件:\\wsl$\Ubuntu-22.04\home\user\

白话:Windows 的 C 盘在 WSL 里变成了 /mnt/c/,D 盘变成 /mnt/d/。反过来,WSL 的文件在 Windows 的文件资源管理器地址栏输入 \\wsl$\ 就能看到。

8.2 在 WSL 中访问 Windows 文件

# 进入 Windows 桌面
cd /mnt/c/Users/你的Windows用户名/Desktop/

# 把 Windows 上的数据复制到 WSL 的 home 目录
cp /mnt/c/Users/user/Downloads/sample.fastq.gz ~/data/

# 列出 D 盘的内容
ls /mnt/d/

8.3 在 Windows 中访问 WSL 文件

  1. 打开文件资源管理器
  2. 在地址栏输入 \\wsl$\ 回车
  3. 选择你的发行版(如 Ubuntu-22.04)
  4. 就能像操作普通文件一样浏览 Linux 文件

也可以在 WSL 终端中直接用 Windows 资源管理器打开当前目录:

explorer.exe .    # 注意最后有个点(表示当前目录)

8.4 性能关键提示(重要!)

=== 黄金法则 ===
生信数据和分析脚本放在 Linux 文件系统(~/)里,不要放在 /mnt/c/ 下!

原因:
- Linux 文件系统(~/data/):读写速度接近原生 Linux,快
- 跨系统访问(/mnt/c/):要经过 9P 协议翻译,慢 5-10 倍

错误做法:在 /mnt/c/Users/user/bioinformatics/ 下跑 fastp
正确做法:把数据 cp 到 ~/data/ 再跑分析

9. 常用 Linux 命令速查

详细内容参见 20_Linux命令行进阶.md,这里只列最高频命令。

9.1 目录和文件操作

pwd                 # 显示当前在哪个目录(Print Working Directory)
ls -la              # 列出所有文件(含隐藏文件)的详细信息
cd ~/data           # 进入 home 目录下的 data 文件夹
mkdir -p results/qc # 创建多层目录(-p 表示自动创建父目录)
cp -r dir1/ dir2/   # 复制整个目录(-r 递归复制)
mv old.txt new.txt  # 重命名 / 移动文件
rm -rf temp/        # 删除目录和里面所有内容(谨慎使用!rm 删了就没了)

9.2 文件查看和搜索

cat file.txt           # 查看文件全部内容
head -20 file.fastq    # 看前 20 行
tail -20 file.fastq    # 看后 20 行
less file.txt          # 翻页查看(按 q 退出)
wc -l file.txt         # 统计行数
grep "gene" result.tsv # 搜索含 "gene" 的行
find . -name "*.fastq" # 在当前目录下找所有 .fastq 文件

9.3 系统信息

df -h              # 查看磁盘使用情况(-h 人类可读格式)
free -h            # 查看内存使用情况
htop               # 交互式查看 CPU/内存/进程(按 q 退出)
uname -a           # 查看系统内核信息

9.4 权限和进程

chmod +x script.sh    # 给脚本加执行权限
sudo command          # 以管理员身份执行命令
nohup ./run.sh &      # 后台运行,关闭终端也不会停
kill PID              # 终止指定进程

10. 包管理(apt)

apt 是 Ubuntu 的包管理器,类比手机上的"应用商店"。

# === 搜索软件 ===
apt search samtools       # 搜索 apt 仓库里有没有 samtools

# === 安装软件 ===
sudo apt install -y tree  # 安装 tree 命令
# sudo = 以管理员身份执行(类似 Windows 的"以管理员身份运行")
# -y   = 自动确认,不用手动输入 yes

# === 更新软件 ===
sudo apt update           # 更新软件列表(相当于刷新应用商店)
sudo apt upgrade -y       # 升级已安装的所有软件

# === 卸载软件 ===
sudo apt remove tree      # 卸载 tree
sudo apt autoremove -y    # 清理不再需要的依赖包

# === 清理缓存(释放磁盘空间) ===
sudo apt clean            # 清理下载缓存

注意:生信工具建议用 conda 安装(见下一节),而不是 apt。因为 conda 能管理独立环境,避免版本冲突。apt 适合装系统级工具(如 git、curl、gcc)。


11. 在 WSL 中安装 conda / Miniforge

11.1 为什么用 Miniforge 而不是 Anaconda

对比AnacondaMiniforge
体积~3GB(预装几百个包)~100MB(最小安装)
默认频道defaults(商业限制)conda-forge(社区维护,生信工具全)
速度较慢mamba 求解器,很快
推荐度不推荐推荐

11.2 安装 Miniforge

# 下载 Miniforge 安装脚本
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh

# 运行安装脚本
bash Miniforge3-Linux-x86_64.sh
# 安装过程中:
# - 按 Enter 查看许可协议,按 q 跳过
# - 输入 yes 接受协议
# - 默认安装路径 ~/miniforge3,直接回车
# - 问是否初始化 conda,输入 yes

# 安装完成后,重新加载 shell 配置
source ~/.bashrc

# 验证安装
conda --version
# 应该显示类似:conda 24.x.x

11.3 创建生信分析环境

# 创建名为 bioinfo 的环境(生信常用工具)
conda create -n bioinfo python=3.10 -y

# 激活环境
conda activate bioinfo

# 安装生信工具(按需选择)
conda install -y \
    fastqc \         # 测序质量评估
    fastp \          # 测序数据质控和过滤
    samtools \       # SAM/BAM 文件处理
    bwa \            # 短序列比对
    bedtools \       # BED 文件操作
    multiqc          # 汇总多个质控报告

# 创建机器学习环境
conda create -n ml_env python=3.10 -y
conda activate ml_env
conda install -y scikit-learn pandas matplotlib seaborn jupyter

# 创建质控专用环境
conda create -n qc_env python=3.10 -y
conda activate qc_env
conda install -y fastqc fastp trimmomatic multiqc

11.4 conda 环境日常操作

conda activate bioinfo       # 激活环境(切换到 bioinfo)
conda deactivate             # 退出当前环境(回到 base)
conda env list               # 列出所有环境
conda list                   # 列出当前环境的所有包
conda install -n bioinfo samtools   # 往指定环境装包
conda remove -n qc_env --all     # 删除整个环境

12. 在 WSL 中使用 VS Code

12.1 安装 Remote-WSL 扩展

  1. 在 Windows 上打开 VS Code
  2. Ctrl + Shift + X 打开扩展商店
  3. 搜索 WSL(微软官方扩展,全名 "WSL")
  4. 点击安装

12.2 从 WSL 终端启动 VS Code

# 在 WSL 终端中,进入该项目目录
cd ~/projects/t2d_analysis

# 用 VS Code 打开当前目录
code .
# 第一次执行会自动下载 VS Code Server 到 WSL 里
# 之后 VS Code 会在 Windows 上打开,但后端连接的是 WSL

# 也可以直接打开某个文件
code ~/scripts/run_fastp.sh

12.3 工作原理

VS Code 在 WSL 模式下的架构:

Windows 端(你看到的界面)
    ↕  通信
WSL 端(实际的代码编辑、运行、终端)

好处:
- 编辑器界面流畅(Windows 原生渲染)
- 终端、文件操作都在 Linux 里执行(生信工具直接可用)
- VS Code 左下角会显示 "WSL: Ubuntu-22.04",表示已连接

13. 配置文件详解:.wslconfig 和 wsl.conf

WSL 有两个配置文件,一个管"全局设置",一个管"单个发行版设置"。

13.1 .wslconfig(全局配置,在 Windows 侧)

文件位置C:\Users\你的用户名\.wslconfig(如果没有就新建一个)

# .wslconfig 控制所有 WSL2 发行版的全局行为
# 修改后需要执行 wsl --shutdown 才能生效

[wsl2]
# === 内存限制 ===
# 默认 WSL2 会占用物理内存的 50%,如果你电脑只有 16GB,建议限制
memory=8GB                    # 最多使用 8GB 内存
# 白话:相当于给 WSL 设了一个内存"上限",防止它把电脑内存吃光

# === CPU 核心数 ===
processors=4                  # 最多使用 4 个 CPU 核心

# === 交换空间(虚拟内存) ===
swap=8GB                      # 交换文件大小

# === 网络模式 ===
networkingMode=mirrored       # 镜像模式(推荐,见第14节详解)

# === 自动代理 ===
autoProxy=true                # 自动使用 Windows 的代理设置

# === DNS 隧道 ===
dnsTunneling=true             # 通过 Windows 解析 DNS(解决 DNS 问题)

[experimental]
# === 自动回收内存 ===
autoMemoryReclaim=gradual     # 空闲时逐步释放缓存内存给 Windows
# 白话:WSL 用完内存后不会一直占着,会慢慢还给 Windows

13.2 wsl.conf(单发行版配置,在 Linux 侧)

文件位置/etc/wsl.conf(在 WSL 里面编辑)

# 用 nano 编辑(需要 sudo 权限)
sudo nano /etc/wsl.conf
# wsl.conf 只影响当前这个发行版

[boot]
# 启用 systemd(后台服务管理器)
systemd=true
# 白话:打开这个后,Docker、MySQL 等服务可以用 systemctl 管理

# 启动时自动执行的命令(可选)
# command=service docker start

[automount]
# 自动挂载 Windows 磁盘
enabled=true
# 挂载点路径
root=/mnt/
# 挂载选项(metadata 支持 Linux 文件权限)
options="metadata,umask=22,fmask=11"

[network]
# 自动生成 /etc/resolv.conf(DNS 配置)
generateResolvConf=true
# 自动设置主机名
generateHosts=true

[interop]
# 允许在 WSL 里运行 Windows 程序(如 code.exe、explorer.exe)
enabled=true
# 把 Windows PATH 追加到 WSL 的 PATH
appendWindowsPath=true

13.3 修改配置后生效

# 在 PowerShell 中执行
wsl --shutdown

# 然后重新打开 WSL
wsl

注意.wslconfig 必须放在 Windows 用户目录下(C:\Users\你的用户名\),不要放在 WSL 里。wsl.conf 必须放在 WSL 的 /etc/ 下,不要放在 Windows 侧。搞反了不会生效!


14. WSL 网络模式

14.1 NAT 模式(默认)

NAT 模式的网络结构:

互联网 ←→ Windows 主机(真实 IP)←→ NAT 网关 ←→ WSL(虚拟 IP:172.x.x.x)

白话:WSL 在一个"小局域网"里,通过 Windows 上网。
WSL 能访问外网,但外网不能直接访问 WSL。

特点: - WSL 每次启动 IP 地址可能变化 - WSL 能访问 Windows 的 localhost,但不太直观 - 需要用 cat /etc/resolv.conf | grep nameserver 获取 Windows 的 IP

14.2 Mirrored 模式(镜像模式,推荐)

Mirrored 模式的网络结构:

互联网 ←→ Windows 主机 ←→ WSL(共享 Windows 的网络接口)

白话:WSL 和 Windows 共用同一个网络,IP 一样。
localhost 在两边完全互通。

启用方法:在 .wslconfig 中设置 networkingMode=mirrored

优点: - localhost 两边完全互通 - 不用再找 Windows 的 IP 地址 - VPN、代理自动共享 - 适合需要频繁网络交互的开发场景

要求:Windows 11 22H2 或更高版本

14.3 网络模式与代理的关系

NAT 模式 + 代理:
  WSL 需要手动配置代理,且每次重启 IP 可能变
  需要用脚本动态获取 Windows IP

Mirrored 模式 + 代理:
  WSL 自动共享 Windows 的网络设置
  配合 autoProxy=true,代理几乎零配置

15. 在 WSL 中配置代理

15.1 最简方案:mirrored + autoProxy(推荐)

如果所用的是 Windows 11 22H2+:

# .wslconfig(放在 C:\Users\你的用户名\ 下)
[wsl2]
networkingMode=mirrored
autoProxy=true

这样 WSL 会自动使用 Windows 的代理设置,无需额外配置。

15.2 手动配置:proxy_on / proxy_off

如果 autoProxy 不好用,或者所用的是老版本 Windows,可以手动配置:

# 编辑 ~/.bashrc,在文件末尾加入以下内容
nano ~/.bashrc
# === 代理开关函数 ===
# 用法:在终端输入 proxy_on 开启代理,proxy_off 关闭代理

function proxy_on() {
    # 如果是 mirrored 模式,Windows IP 就是 127.0.0.1
    # 如果是 NAT 模式,需要动态获取 Windows IP
    if grep -q "nameserver 127.0.0.1" /etc/resolv.conf 2>/dev/null; then
        HOST_IP="127.0.0.1"
    else
        HOST_IP=$(grep nameserver /etc/resolv.conf | awk '{print $2}')
    fi

    # 设置代理端口(改成你的代理软件实际端口)
    # Clash 默认 7890,V2Ray 默认 10809
    local PORT=7890

    export http_proxy="http://${HOST_IP}:${PORT}"
    export https_proxy="http://${HOST_IP}:${PORT}"
    export all_proxy="socks5://${HOST_IP}:${PORT}"
    export no_proxy="localhost,127.0.0.1,::1"

    # 同时设置 git 代理
    git config --global http.proxy "http://${HOST_IP}:${PORT}"
    git config --global https.proxy "http://${HOST_IP}:${PORT}"

    echo "代理已开启:${HOST_IP}:${PORT}"
    # 测试连接
    curl -s --connect-timeout 5 https://www.google.com > /dev/null && echo "连接测试:成功" || echo "连接测试:失败"
}

function proxy_off() {
    unset http_proxy https_proxy all_proxy no_proxy
    git config --global --unset http.proxy
    git config --global --unset https.proxy
    echo "代理已关闭"
}
# 保存后重新加载
source ~/.bashrc

# 使用
proxy_on      # 开启代理
proxy_off     # 关闭代理

重要:如果所用的是 NAT 模式,还需要确保你的代理软件(如 Clash)开启了"允许局域网连接"(Allow LAN)选项。


16. systemd 支持

16.1 什么是 systemd

白话:systemd 是 Linux 的"服务管家"——帮你启动、停止、管理后台服务(如 Docker、MySQL、SSH 等)。没有 systemd 的话,很多需要后台运行的程序就没法正常管理。

16.2 启用 systemd

# 编辑 WSL 配置文件
sudo nano /etc/wsl.conf

# 添加以下内容:
# [boot]
# systemd=true
# 在 PowerShell 中重启 WSL
wsl --shutdown
wsl
# 验证 systemd 是否启用
systemctl status
# 如果看到 "State: running" 就说明成功了

16.3 systemd 常用操作

# 查看某个服务的状态
systemctl status docker

# 启动服务
sudo systemctl start docker

# 停止服务
sudo systemctl stop docker

# 设置开机自启
sudo systemctl enable docker

# 关闭开机自启
sudo systemctl disable docker

# 查看所有运行中的服务
systemctl list-units --type=service --state=running

16.4 排查启动慢的问题

# 如果启用 systemd 后 WSL 启动变慢(超过 5 秒)
# 查看哪些服务启动最耗时
systemd-analyze blame

# 禁用不需要的耗时服务
# 例如:systemd-networkd-wait-online.service 经常超时
sudo systemctl mask systemd-networkd-wait-online.service

17. GPU 直通(CUDA)

17.1 什么是 GPU 直通

白话:让 WSL 里的程序能用你电脑上的 NVIDIA 显卡来加速计算。做深度学习(如 PyTorch 跑模型)、某些生信工具(如 GPU 版 BLAST)都需要 GPU 支持。

WSL2 通过 GPU-PV(GPU 半虚拟化)技术实现了显卡直通——WSL 里的程序可以直接调用 Windows 上安装的 NVIDIA 驱动,不需要在 Linux 里单独装驱动。

17.2 设置步骤

步骤1:在 Windows 上安装最新的 NVIDIA 显卡驱动
  → 去 https://www.nvidia.com/download/ 下载
  → 或者用 GeForce Experience 更新驱动
  → 驱动版本建议 536.123 或更新

步骤2:不要在 WSL 里安装 Linux 版 NVIDIA 驱动!!!
  → 这是最常见的错误
  → WSL 会自动通过 /usr/lib/wsl/lib/ 下的 stub 文件连接 Windows 驱动
  → 自己装 Linux 驱动会覆盖这些 stub,导致 GPU 失效
# 步骤3:验证 GPU 是否可用
nvidia-smi
# 如果看到你的显卡型号和驱动版本,说明 GPU 直通成功
# 示例输出:
# +-------------------------------+
# | NVIDIA-SMI 560.xx             |
# | Driver Version: 560.xx        |
# | CUDA Version: 12.x            |
# | GPU Name: NVIDIA GeForce RTX  |
# +-------------------------------+

17.3 安装 CUDA Toolkit(可选,做深度学习才需要)

# 如果只是用 PyTorch/TensorFlow,conda 装的版本自带 CUDA
# 只有需要编译 CUDA 代码时才需要装 CUDA Toolkit

# 通过 conda 安装 PyTorch(推荐方式,自动处理 CUDA 依赖)
conda activate ml_env
conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia

# 验证 PyTorch GPU 可用
python -c "import torch; print('CUDA可用:', torch.cuda.is_available()); print('GPU:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else '无')"

17.4 生信场景

# GPU 加速的生信工具示例:
# - Parabricks(NVIDIA 出的 GPU 版 BWA/GATK)
# - DIAMOND(GPU 加速的蛋白质比对)
# - Clara Parabricks(宏基因组分析加速)

# 但大多数常规生信工具(fastp、samtools、kraken2)用 CPU 就够了
# GPU 主要用于:机器学习模型训练、深度学习、大规模序列比对

18. 多发行版管理

WSL 支持同时安装多个 Linux 发行版(相当于多个独立的 Linux 环境)。

18.1 安装多个发行版

# 查看可安装的发行版
wsl --list --online

# 安装额外的发行版
wsl --install -d Debian
wsl --install -d Ubuntu-24.04

# 查看已安装的发行版
wsl -l -v
# 示例输出:
#   NAME            STATE           VERSION
# * Ubuntu-22.04    Stopped         2      ← * 号表示默认发行版
#   Debian          Running         2
#   Ubuntu-24.04    Stopped         2

18.2 切换默认发行版

# 设置默认发行版(输入 wsl 时进入的那个)
wsl --set-default Ubuntu-22.04

18.3 进入指定发行版

# 进入指定发行版
wsl -d Debian

# 以指定用户身份进入
wsl -d Ubuntu-22.04 -u root

18.4 导出和导入(备份/迁移)

# 导出(备份)一个发行版为 tar 文件
wsl --export Ubuntu-22.04 D:\backup\ubuntu-22.04-backup.tar

# 导入(恢复/克隆)到新位置
wsl --import Ubuntu-22.04-copy D:\wsl\ubuntu-copy D:\backup\ubuntu-22.04-backup.tar

# 卸载某个发行版(注意:会删除所有数据!)
wsl --unregister Debian

18.5 使用场景

为什么要多个发行版?
- Ubuntu-22.04:日常生信分析(bioinfo 环境)
- Ubuntu-24.04:测试新版本工具
- Debian:轻量级用途
- Kali Linux:网络安全学习

但对于生信面试准备,一个 Ubuntu 22.04 就够了。

19. 在 WSL 中搭建生信环境

19.1 推荐环境架构

WSL2 Ubuntu 22.04
├── Miniforge3(conda 包管理器)
│   ├── base 环境(尽量保持干净,不装分析工具)
│   ├── bioinfo 环境(日常生信分析)
│   │   ├── fastqc, fastp, multiqc
│   │   ├── samtools, bedtools, bwa
│   │   ├── kraken2, metaphlan
│   │   └── seqkit, csvtk
│   ├── ml_env 环境(机器学习)
│   │   ├── scikit-learn, xgboost
│   │   ├── pandas, numpy, scipy
│   │   ├── matplotlib, seaborn
│   │   └── jupyter notebook
│   └── qc_env 环境(质控专用)
│       ├── fastqc, fastp
│       ├── trimmomatic
│       └── multiqc
├── ~/data/(原始数据存放)
├── ~/projects/(分析项目)
│   └── t2d_analysis/(该 T2D 项目)
│       ├── scripts/
│       ├── data/
│       └── results/
└── ~/software/(手动安装的软件)

19.2 一键搭建脚本

#!/bin/bash
# 文件名:setup_bioinfo.sh
# 用途:在 WSL 中一键搭建生信分析环境
# 用法:bash setup_bioinfo.sh

echo "=== 开始搭建生信环境 ==="

# 创建目录结构
mkdir -p ~/data ~/projects ~/software ~/results

# --- 创建 bioinfo 环境 ---
echo ">>> 创建 bioinfo 环境..."
conda create -n bioinfo python=3.10 -y
conda activate bioinfo || source activate bioinfo

# 安装宏基因组分析常用工具
conda install -y -c bioconda -c conda-forge \
    fastqc \
    fastp \
    multiqc \
    samtools \
    bedtools \
    bwa \
    seqkit \
    csvtk

echo ">>> bioinfo 环境创建完成"

# --- 创建 ml_env 环境 ---
echo ">>> 创建 ml_env 环境..."
conda create -n ml_env python=3.10 -y
conda run -n ml_env conda install -y \
    scikit-learn \
    xgboost \
    pandas \
    numpy \
    scipy \
    matplotlib \
    seaborn \
    jupyter

echo ">>> ml_env 环境创建完成"

# --- 创建 qc_env 环境 ---
echo ">>> 创建 qc_env 环境..."
conda create -n qc_env python=3.10 -y
conda run -n qc_env conda install -y -c bioconda -c conda-forge \
    fastqc \
    fastp \
    trimmomatic \
    multiqc

echo ">>> qc_env 环境创建完成"

echo "=== 所有环境搭建完成!==="
echo "用 conda env list 查看所有环境"
echo "用 conda activate <环境名> 切换环境"

19.3 数据存放建议

# 原始测序数据(只读,不要修改原始数据!)
~/data/raw/
    ├── sample1_R1.fastq.gz
    ├── sample1_R2.fastq.gz
    └── ...

# 分析结果(按项目组织)
~/projects/t2d_analysis/
    ├── scripts/          # 分析脚本
    ├── data/             # 处理后的数据(链接或拷贝)
    ├── results/          # 分析结果
       ├── 01_qc/
       ├── 02_trim/
       ├── 03_assembly/
       └── ...
    └── README.md         # 项目说明

20. WSL 性能优化

20.1 文件系统性能(最重要!)

关键原则:生信数据一定要放在 Linux 原生文件系统里!

性能对比:
┌─────────────────────┬───────────┬──────────┐
│ 操作                 │ ~/data/   │ /mnt/c/  │
├─────────────────────┼───────────┼──────────┤
│ 读取 1GB fastq       │ ~2 秒     │ ~15 秒   │
│ fastp 处理 10GB 数据  │ ~5 分钟   │ ~30 分钟 │
│ 编译安装软件          │ ~1 分钟   │ ~8 分钟  │
└─────────────────────┴───────────┴──────────┘

原因:/mnt/c/ 需要通过 9P 协议在 Linux 和 Windows 文件系统之间翻译,
      就像每句话都要翻译一遍,自然慢很多。

20.2 内存优化

# .wslconfig 配置(Windows 侧)
[wsl2]
memory=8GB                     # 根据你的物理内存调整
swap=8GB                       # 虚拟内存

[experimental]
autoMemoryReclaim=gradual      # 空闲时自动释放内存

20.3 I/O 优化

# 在 /etc/wsl.conf 中添加
[automount]
options="metadata,umask=22,fmask=11"
# metadata 选项让 Linux 文件权限信息在跨系统访问时保留

20.4 日常维护

# 定期清理 apt 缓存
sudo apt clean
sudo apt autoremove -y

# 清理 conda 缓存
conda clean --all -y

# 查看磁盘使用情况
df -h /
du -sh ~/data ~/miniforge3 ~/projects

21. 远程服务器 SSH 连接

21.1 基本 SSH 连接

# 连接远程服务器
ssh username@server_ip
# 例如:ssh user@192.168.1.100

# 指定端口(默认 22)
ssh -p 2222 username@server_ip

# 首次连接会问是否信任,输入 yes

21.2 配置 SSH 免密登录(推荐)

# 步骤1:在 WSL 中生成 SSH 密钥对
ssh-keygen -t ed25519 -C "user@wsl"
# 一路回车(使用默认路径和空密码)
# 会生成:
#   ~/.ssh/id_ed25519      (私钥,绝对不要给别人!)
#   ~/.ssh/id_ed25519.pub  (公钥,发给服务器管理员)

# 步骤2:把公钥复制到远程服务器
ssh-copy-id username@server_ip
# 输入一次密码后,以后就不用输密码了

# 步骤3:测试免密登录
ssh username@server_ip
# 如果直接登入了,说明配置成功

21.3 SSH Config 简化连接

# 编辑 SSH 配置文件
nano ~/.ssh/config
# ~/.ssh/config 文件内容
# 给服务器起个别名,以后输 ssh lab 就能连接

Host lab
    HostName 192.168.1.100
    User user
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Host school
    HostName 10.0.0.50
    User wqpeng
    Port 22
    IdentityFile ~/.ssh/id_ed25519
# 之后连接就很简单了
ssh lab           # 等同于 ssh user@192.168.1.100
ssh school        # 等同于 ssh wqpeng@10.0.0.50

# 传文件也方便
scp local_file.txt lab:~/data/    # 上传文件到服务器
scp lab:~/results/output.tsv .     # 从服务器下载文件

21.4 使用 tmux 保持远程会话

# 在远程服务器上用 tmux 管理长时间运行的任务
ssh lab
tmux new -s analysis      # 创建名为 analysis 的会话
# ... 在里面运行你的分析任务 ...
# 按 Ctrl+B 然后按 D 分离会话(任务继续后台运行)

# 下次登录后恢复会话
ssh lab
tmux attach -t analysis   # 重新连接到 analysis 会话

22. 常见问题:安装失败排查

22.1 wsl --install 卡在 0%

# 方案1:使用 web-download 参数
wsl --install --web-download -d Ubuntu-22.04

# 方案2:手动安装(见第 5.3 节)

22.2 报错 "请启用虚拟机平台"

# 手动启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 然后重启电脑

22.3 报错 "WSL 2 需要更新其内核组件"

# 手动更新 WSL 内核
wsl --update

# 或者下载内核更新包:
# https://aka.ms/wsl2kernel

22.4 报错 "WslRegisterDistribution failed with error"

常见错误代码:
- 0x80370102 → 没开虚拟化,去 BIOS 打开
- 0x80004005 → Hyper-V 被禁用,手动启用:
  dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all
- 0x800701bc → 内核需要更新,执行 wsl --update

22.5 发行版安装后打不开

# 尝试重置发行版(保留数据)
wsl --terminate Ubuntu-22.04
wsl -d Ubuntu-22.04

# 如果还不行,重新注册
wsl --unregister Ubuntu-22.04    # 注意:这会删除所有数据!先备份!
wsl --install -d Ubuntu-22.04

23. 常见问题:网络问题

23.1 WSL 无法联网

# 检查 DNS 是否正常
cat /etc/resolv.conf
# 如果 nameserver 地址是空的或不对,手动修改

# 方案1:使用 Windows DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

# 方案2(推荐):在 .wslconfig 中启用 DNS 隧道
# [wsl2]
# dnsTunneling=true

# 方案3:如果 resolv.conf 被自动覆盖
# 在 /etc/wsl.conf 中设置:
# [network]
# generateResolvConf=false
# 然后手动创建 /etc/resolv.conf

23.2 apt update 失败

# 如果提示连接超时,可能是源的问题
# 检查源文件
cat /etc/apt/sources.list

# 换成清华源(见第 6.2 节)

# 如果是代理问题,设置 apt 代理
sudo nano /etc/apt/apt.conf.d/proxy.conf
# 写入:
# Acquire::http::Proxy "http://127.0.0.1:7890";
# Acquire::https::Proxy "http://127.0.0.1:7890";

23.3 conda install 下载慢

# 配置 conda 使用清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes

# 或者使用代理
proxy_on    # 如果你配置了 proxy_on 函数
conda install -y fastp

24. 常见问题:磁盘空间管理

24.1 问题:WSL 磁盘越用越大,删文件也不缩小

原因:WSL2 使用 VHD(虚拟硬盘)文件存储数据。VHD 会自动扩大,但不会自动缩小——即使你在 WSL 里删了文件,Windows 上的 VHD 文件大小不变。

24.2 手动压缩 VHD(回收空间)

# 步骤1:关闭 WSL
wsl --shutdown

# 步骤2:找到 VHD 文件位置
# 通常在:C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04...\LocalState\ext4.vhdx

# 步骤3:用 diskpart 压缩(CMD 管理员模式)
diskpart
# 在 diskpart 交互界面中输入:
select vdisk file="C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
compact vdisk
exit

24.3 启用稀疏模式(自动回收,推荐)

# WSL 2.5+ 支持稀疏模式,自动回收删除文件后的空间
wsl --manage Ubuntu-22.04 --set-sparse true

24.4 日常磁盘清理

# 在 WSL 里执行清理
sudo apt clean                   # 清理 apt 缓存
sudo apt autoremove -y           # 删除不需要的包
conda clean --all -y             # 清理 conda 缓存和旧包
pip cache purge                  # 清理 pip 缓存

# 查看哪些目录占空间最多
du -sh ~/* 2>/dev/null | sort -rh | head -20

# 查看 WSL 磁盘使用总况
df -h /

24.5 移动 WSL 到其他磁盘

# 如果 C 盘空间不足,可以把 WSL 导出再导入到 D 盘
wsl --shutdown
wsl --export Ubuntu-22.04 D:\wsl-backup\ubuntu.tar
wsl --unregister Ubuntu-22.04
wsl --import Ubuntu-22.04 D:\wsl\ubuntu D:\wsl-backup\ubuntu.tar

25. WSL 和 Docker Desktop 的关系

25.1 Docker Desktop + WSL2 后端

Docker Desktop 的架构:

Windows
├── Docker Desktop(GUI 管理界面)
│   └── WSL2 后端(Docker 引擎运行在 WSL2 虚拟机里)
│       ├── docker-desktop(系统发行版)
│       └── docker-desktop-data(存储数据)
└── 你的 Ubuntu-22.04 发行版
    └── 启用 WSL Integration 后可以直接用 docker 命令

白话:Docker Desktop 借用 WSL2 的 Linux 内核来运行容器,所以你不需要在 WSL 里另外装 Docker。

25.2 安装和配置

1. 从 https://www.docker.com/products/docker-desktop/ 下载安装 Docker Desktop
2. 安装时勾选 "Use WSL 2 based engine"
3. 安装后打开 Docker Desktop → Settings → Resources → WSL Integration
4. 打开你的 Ubuntu-22.04 的集成开关
5. 点 Apply & Restart
# 在 WSL 终端验证
docker --version
# Docker version 27.x.x

docker run hello-world
# 如果看到 "Hello from Docker!" 就说明成功了

25.3 替代方案:在 WSL 里直接装 Docker Engine

# 如果不想用 Docker Desktop(比如公司有 250+ 员工需要付费许可)
# 可以在 WSL 里直接装 Docker Engine(免费)

# 前提:已启用 systemd(见第 16 节)

# 安装 Docker Engine
curl -fsSL https://get.docker.com | sh

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

# 重启 WSL
wsl --shutdown  # 在 PowerShell 执行
wsl             # 重新进入

# 验证
docker run hello-world

25.4 生信中 Docker 的用途

# 生信里常用 Docker 的场景:

# 1. 用 Biocontainers 拉取已打包好的生信工具(省去编译安装的麻烦)
docker pull biocontainers/blast:2.15.0--pl5321h6f7f691_1

# 2. 运行可复现的分析流程
docker run -v ~/data:/data biocontainers/fastp fastp \
    -i /data/sample_R1.fq.gz \
    -o /data/sample_clean_R1.fq.gz

# 3. Nextflow/Snakemake 流程管理器可以自动拉取容器运行每一步

# 注意:对于面试准备阶段,conda 环境已经够用了,Docker 了解即可

26. WSL 管理命令速查表

# === 在 PowerShell 中执行的命令 ===

wsl --version              # 查看 WSL 版本
wsl --update               # 更新 WSL 到最新版本
wsl --list --verbose       # 查看所有已安装的发行版和状态
wsl --list --online        # 查看可安装的发行版
wsl --install -d <name>    # 安装指定发行版
wsl --set-default <name>   # 设置默认发行版
wsl --shutdown             # 关闭所有 WSL 实例
wsl --terminate <name>     # 关闭指定发行版
wsl --export <name> <file> # 导出发行版为 tar 文件
wsl --import <name> <dir> <file>  # 从 tar 文件导入
wsl --unregister <name>    # 删除发行版(数据全没!)
wsl --manage <name> --set-sparse true  # 启用稀疏模式
wsl -d <name>              # 进入指定发行版
wsl -d <name> -u root      # 以 root 身份进入

27. 面试相关要点

27.1 面试常见问题

Q:你是怎么搭建生信分析环境的?

我在 Windows 11 上使用 WSL2 运行 Ubuntu 22.04 作为分析环境。WSL2 运行真正的 Linux 内核,兼容性接近原生 Linux,启动速度很快。我用 Miniforge 作为包管理器,创建了独立的 conda 环境来管理不同类型的分析工具,比如 bioinfo 环境装生信工具,ml_env 环境装机器学习库,避免依赖冲突。

Q:WSL 和虚拟机有什么区别?

WSL2 底层也用了 Hyper-V 虚拟化技术,但它比传统虚拟机轻量得多——启动只要 1-2 秒,内存动态分配,文件和网络与 Windows 互通。传统虚拟机需要预分配固定的 CPU 和内存,启动慢,文件共享需要额外配置。对于日常生信分析开发,WSL2 是最佳选择。

Q:你在 WSL 里跑分析时,性能有什么注意事项?

最重要的一点是数据要放在 Linux 原生文件系统(~/data/)里,不要放在 /mnt/c/ 下面。因为跨文件系统访问要通过 9P 协议翻译,I/O 性能会差 5-10 倍。另外可以通过 .wslconfig 文件限制内存使用、配置 mirrored 网络模式来优化体验。

27.2 展示加分点

- 能说出 WSL1 vs WSL2 的区别(翻译层 vs 真实内核)
- 知道文件系统性能差异(~/快,/mnt/c/慢)
- 能解释 conda 环境隔离的意义
- 了解 .wslconfig 和 wsl.conf 的区别和用途
- 知道 GPU 直通的基本原理(Windows 驱动 + WSL stub)

28. 参考资源