WSL 最佳实践

WSL 性能优化、安全建议和工作流建议


📋 目录


性能优化

1. 使用 WSL 2

推荐:始终使用 WSL 2 而不是 WSL 1

# 检查当前版本
wsl --list --verbose
 
# 转换为 WSL 2
wsl --set-version Ubuntu-22.04 2
 
# 设置默认版本
wsl --set-default-version 2

优势

  • 完整的 Linux 内核
  • 更好的文件系统性能
  • 更好的 Docker 支持
  • 更好的系统调用兼容性

2. 合理配置资源

.wslconfig 配置

[wsl2]
# 根据系统内存调整(建议 4-8GB)
memory=8GB
 
# 根据 CPU 核心数调整(建议 2-4 核)
processors=4
 
# 交换空间(建议为内存的 25-50%)
swap=2GB
 
# 交换文件位置
swapFile=C:\\Users\\YourUsername\\AppData\\Local\\Temp\\swap.vhdx
 
# 启用本地主机转发
localhostForwarding=true

建议

  • 内存:系统总内存的 50%,但不超过 8GB
  • CPU:系统核心数的 50-75%
  • 交换空间:内存的 25-50%

3. 文件系统位置

推荐:Linux 文件系统

# 推荐:项目文件在 Linux 文件系统中
~/projects/myapp
/home/username/projects/myapp

优势

  • 更好的文件系统性能(ext4)
  • 完整的 Linux 文件权限支持
  • 更好的符号链接支持
  • 更快的文件操作

不推荐:Windows 文件系统

# 不推荐:项目文件在 Windows 文件系统中
/mnt/c/Users/Username/projects/myapp

劣势

  • 较慢的文件系统性能(通过 9p 协议)
  • 文件权限支持有限
  • 符号链接支持有限

混合使用策略

# 使用符号链接连接 Windows 和 Linux 文件系统
ln -s /mnt/c/Users/Username/Documents ~/Documents
ln -s /mnt/c/Users/Username/Downloads ~/Downloads
 
# 项目文件放在 Linux 文件系统
~/projects/myapp

4. 优化挂载选项

/etc/wsl.conf 配置

[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=11"
crossDistro = false

选项说明

  • metadata:启用文件元数据支持
  • umask=22:目录权限 755
  • fmask=11:文件权限 644

5. 定期清理

# 清理 apt 缓存
sudo apt clean
sudo apt autoremove
 
# 清理 Docker(如果使用)
docker system prune -a
 
# 清理日志
sudo journalctl --vacuum-time=7d
 
# 查找大文件
du -h --max-depth=1 ~ | sort -h

6. 使用 SSD

建议:将 WSL 安装在 SSD 上以获得更好的性能

# 迁移 WSL 到其他驱动器
wsl --export Ubuntu-22.04 D:\WSL\backup.tar
wsl --unregister Ubuntu-22.04
wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\WSL\backup.tar

安全建议

1. 用户权限

使用非 root 用户

# 创建专用用户
sudo adduser devuser
sudo usermod -aG sudo devuser
 
# 设置默认用户
sudo nano /etc/wsl.conf
# 添加:
[user]
default = devuser

配置 sudo

# 编辑 sudoers
sudo visudo
 
# 限制 sudo 权限(而不是 NOPASSWD: ALL)
devuser ALL=(ALL) /usr/bin/apt, /usr/bin/apt-get

2. 防火墙配置

Windows 防火墙

# 只允许必要的端口
New-NetFirewallRule -DisplayName "WSL Port 3000" `
    -Direction Inbound `
    -LocalPort 3000 `
    -Protocol TCP `
    -Action Allow

Linux 防火墙(如果需要)

# 安装 ufw
sudo apt install ufw
 
# 配置规则
sudo ufw allow 22/tcp
sudo ufw enable

3. SSH 配置

禁用密码认证

# 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config
 
# 设置:
PasswordAuthentication no
PubkeyAuthentication yes

使用密钥认证

# 生成 SSH 密钥
ssh-keygen -t ed25519 -C "your.email@example.com"
 
# 添加公钥到服务器
ssh-copy-id user@server

4. 定期更新

# 更新系统
sudo apt update
sudo apt upgrade
 
# 更新 WSL
wsl --update

5. 敏感信息管理

# 使用环境变量文件(不要提交到 Git)
echo '.env' >> .gitignore
 
# 使用密钥管理工具
# 例如:pass、gopass、1Password CLI

工作流建议

1. 项目组织

推荐项目结构

~/projects/
├── frontend/
│   └── myapp/
├── backend/
│   └── api/
└── scripts/
    └── utils/

使用版本控制

# 初始化 Git 仓库
cd ~/projects/myapp
git init
git remote add origin https://github.com/username/repo.git

2. 开发工具配置

VS Code 集成

# 在 WSL 中打开项目
code ~/projects/myapp
 
# VS Code 会自动使用 WSL 中的:
# - Node.js、Python、Go 等运行时
# - Git
# - 终端
# - 扩展

终端配置

# 使用 zsh 和 Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
 
# 配置 .zshrc
nano ~/.zshrc

3. 环境管理

使用版本管理工具

# Node.js: nvm
nvm install 18
nvm use 18
 
# Python: pyenv
pyenv install 3.11.0
pyenv global 3.11.0
 
# Go: g
g install 1.21.0
g use 1.21.0

使用虚拟环境

# Python 虚拟环境
python3 -m venv venv
source venv/bin/activate
 
# Node.js: 使用项目本地 node_modules
npm install

4. 构建和部署

使用 Docker

# 开发环境
docker compose -f docker-compose.dev.yml up
 
# 生产环境
docker compose up -d

使用 CI/CD

# .github/workflows/ci.yml
name: CI
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: npm test

5. 文档和笔记

# 在项目中使用 Markdown
# README.md
# docs/
#   - setup.md
#   - api.md

开发环境配置

1. 基础工具

# 安装基础工具
sudo apt install -y \
    build-essential \
    curl \
    wget \
    git \
    vim \
    nano \
    tree \
    htop \
    jq \
    unzip \
    zip

2. Shell 配置

.bashrc 或 .zshrc

# 常用别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
 
# 环境变量
export EDITOR='code --wait'
export PATH="$HOME/.local/bin:$PATH"

3. Git 配置

# 全局配置
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global core.editor "code --wait"
git config --global init.defaultBranch main
 
# SSH 密钥
ssh-keygen -t ed25519 -C "your.email@example.com"

4. 开发工具

Node.js 开发

# 使用 nvm
nvm install --lts
nvm use --lts
 
# 全局工具
npm install -g yarn pnpm typescript

Python 开发

# 使用 pyenv
pyenv install 3.11.0
pyenv global 3.11.0
 
# 虚拟环境
python -m venv venv
source venv/bin/activate

5. 数据库

# 使用 Docker 运行数据库
docker run -d \
  --name postgres \
  -e POSTGRES_PASSWORD=password \
  -p 5432:5432 \
  postgres:15
 
# 或使用本地安装
sudo apt install postgresql

备份与恢复

1. 定期备份

导出发行版

# 定期导出(例如:每周)
wsl --export Ubuntu-22.04 D:\Backup\ubuntu-22.04-$(Get-Date -Format "yyyyMMdd").tar

备份项目文件

# 使用 tar 压缩
tar -czf ~/backup/projects-$(date +%Y%m%d).tar.gz ~/projects
 
# 复制到 Windows
cp ~/backup/projects-*.tar.gz /mnt/c/Users/Username/Backup/

2. 配置文件备份

# 备份配置文件
cp ~/.bashrc ~/.bashrc.backup
cp ~/.zshrc ~/.zshrc.backup
cp ~/.gitconfig ~/.gitconfig.backup
 
# 使用 Git 管理配置文件
git init ~/.dotfiles
cd ~/.dotfiles
git add .
git commit -m "Backup config files"

3. 恢复策略

恢复发行版

# 从备份恢复
wsl --import Ubuntu-22.04-Restored D:\WSL\Ubuntu-22.04-Restored D:\Backup\ubuntu-22.04-backup.tar

恢复项目文件

# 解压备份
tar -xzf backup/projects-20240101.tar.gz -C ~/

4. 自动化备份

使用脚本

# backup-wsl.ps1
$date = Get-Date -Format "yyyyMMdd"
$backupPath = "D:\Backup\WSL"
 
# 导出发行版
wsl --export Ubuntu-22.04 "$backupPath\ubuntu-22.04-$date.tar"
 
# 清理旧备份(保留最近 7 天)
Get-ChildItem "$backupPath\*.tar" | Where-Object {
    $_.LastWriteTime -lt (Get-Date).AddDays(-7)
} | Remove-Item

使用任务计划程序

  1. 打开任务计划程序
  2. 创建基本任务
  3. 设置触发器(例如:每周日)
  4. 设置操作:运行 backup-wsl.ps1

性能监控

1. 资源监控

# 查看系统资源
htop
# 或
top
 
# 查看磁盘使用
df -h
du -h --max-depth=1 ~ | sort -h
 
# 查看内存使用
free -h

2. 性能测试

# 文件系统性能测试
time for i in {1..1000}; do touch test$i; done
time for i in {1..1000}; do rm test$i; done

3. 日志分析

# 查看系统日志
journalctl -xe
 
# 查看特定服务日志
journalctl -u service_name

📚 参考资源


返回 WSL 知识体系

WSL 最佳实践 性能优化 安全