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 的区别¶
| 对比项 | WSL1 | WSL2 |
|---|---|---|
| 内核 | 翻译层(把 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 Technology 或 SVM 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:
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¶
7.3 关闭和重启 WSL¶
# 在 PowerShell 中执行:
wsl --shutdown # 关闭所有 WSL 实例(修改配置后需要执行这个)
wsl --terminate Ubuntu-22.04 # 关闭指定发行版
8. Windows 和 WSL 之间的文件互访¶
8.1 核心规则¶
白话: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 文件¶
- 打开文件资源管理器
- 在地址栏输入
\\wsl$\回车 - 选择你的发行版(如 Ubuntu-22.04)
- 就能像操作普通文件一样浏览 Linux 文件
也可以在 WSL 终端中直接用 Windows 资源管理器打开当前目录:
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 系统信息¶
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¶
| 对比 | Anaconda | Miniforge |
|---|---|---|
| 体积 | ~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 扩展¶
- 在 Windows 上打开 VS Code
- 按
Ctrl + Shift + X打开扩展商店 - 搜索
WSL(微软官方扩展,全名 "WSL") - 点击安装
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 里面编辑)
# 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 修改配置后生效¶
注意:
.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+:
这样 WSL 会自动使用 Windows 的代理设置,无需额外配置。
15.2 手动配置:proxy_on / proxy_off¶
如果 autoProxy 不好用,或者所用的是老版本 Windows,可以手动配置:
# === 代理开关函数 ===
# 用法:在终端输入 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 "代理已关闭"
}
重要:如果所用的是 NAT 模式,还需要确保你的代理软件(如 Clash)开启了"允许局域网连接"(Allow LAN)选项。
16. systemd 支持¶
16.1 什么是 systemd¶
白话:systemd 是 Linux 的"服务管家"——帮你启动、停止、管理后台服务(如 Docker、MySQL、SSH 等)。没有 systemd 的话,很多需要后台运行的程序就没法正常管理。
16.2 启用 systemd¶
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 切换默认发行版¶
18.3 进入指定发行版¶
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/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%¶
22.2 报错 "请启用虚拟机平台"¶
# 手动启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 然后重启电脑
22.3 报错 "WSL 2 需要更新其内核组件"¶
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 启用稀疏模式(自动回收,推荐)¶
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)