WSL 使用经验(含离线安装)
离线安装
Win10 WSL2 手动安装在非C盘 的方法 - ZXYFrank - 博客园
- 再把
CanonicalGroupLimited.UbuntuonWindows_2004.2021.825.0\Ubuntu_2004.2021.825.0_x64.appx解压缩 - 双击 .exe安装 即可
- 除了.exe 以及 ext4.vhdx,其他都可以删除
【调试笔记-20240522-Windows-WSL 修改已安装发行版名称】_wsl 改名-CSDN博客
旧版 WSL 的手动安装步骤 | Microsoft Learn
下载发行版
在某些情况下,你可能无法(或不想)使用 Microsoft 商店安装 WSL 的 Linux 发行版。 你可能正在运行不支持 Microsoft 应用商店的 Windows Server 或 Long-Term 服务 (LTSC) 桌面 OS SKU,或者公司网络策略和/或管理员不允许在环境中使用 Microsoft 应用商店。 在这些情况下,虽然 WSL 本身可用,但可能需要直接下载 Linux 分发版。
如果 Microsoft 应用商店应用不可用,则可以使用以下链接下载并手动安装 Linux 分发版:
- Ubuntu
- Ubuntu 24.04 版本
- Ubuntu 22.04 LTS
- Ubuntu 20.04
- Ubuntu 20.04 ARM
- Ubuntu 18.04
- Ubuntu 18.04 ARM
- Ubuntu 16.04 版本
- Debian GNU/Linux
- Kali Linux
- SUSE Linux Enterprise Server 12
- SUSE Linux Enterprise Server 15 SP2
- SUSE Linux Enterprise Server 15 SP3
- openSUSE Tumbleweed
- openSUSE Leap 15.3
- openSUSE Leap 15.2
- Oracle Linux 8.5
- Oracle Linux 7.9
- 用于 WSL 的 Fedora Remix
这将导致 <distro>.appx 包下载到所选文件夹。
如果愿意,还可以通过命令行下载首选分发版,可以将 PowerShell 与 Invoke-WebRequest cmdlet 配合使用。 例如,若要下载 Ubuntu 20.04,
WSL磁盘容量限制
解决方法(20250825-已实践验证)
如何管理 WSL 磁盘空间 | Microsoft Learn
Windows在操作了,别忘了在wsl中还需要mount!
Why has 容量限制?
Q:为什么我的WSL虚拟磁盘ext4.vhdx有容量限制呢,他不应该和我的Windows的硬盘有关,只要我的Windows硬盘下有空间WSL也应该有的吗?
你的这个问题很好,很多 WSL 用户初期都会有类似疑惑。下面详细解释原因:
1. WSL2 的存储原理
- WSL2 是通过一个虚拟硬盘(
ext4.vhdx文件)来模拟 Linux 的根文件系统。 - 这个文件存储在 Windows 的
C:\Users\<用户名>\AppData\Local\Packages\<发行版>\LocalState\ext4.vhdx路径下。 - WSL2 的 Linux 子系统所有数据(除挂载的
/mnt/c等 Windows 磁盘)都只存储在这个虚拟磁盘里。
2. WSL2 虚拟磁盘和 Windows 硬盘的关系
- 虚拟磁盘(
ext4.vhdx)本质上就是一个很大的文件,存在 Windows 文件系统中。 - 虽然你 Windows 的硬盘有充足空间,但虚拟盘会有自己的容量限制,就像你插了一个大小定死的U盘/移动硬盘。
- WSL2 默认创建时,虚拟盘最大 256G,Ubuntu 22.04 新版上限是 1T(但初始只有你用多少就长多少,不会一下子吃满空间)。
3. 为什么有限制?
- WSL2 的
ext4.vhdx虚拟磁盘格式是动态扩展的,但有最大容量上限,这个上限和发行版、创建参数相关。 - 一旦达到这个最大值(比如 250G),WSL2 里的 Linux 系统就像自己的磁盘满了一样,不能无限长大。
- 你在 WSL 里看到的
/,就是这块虚像磁盘。和实际 Windows 剩余空间无直接绑定。
4. 和挂载盘的区别
/mnt/c、/mnt/d等,是把 Windows 的实际磁盘直接挂到 WSL2 里用,如果你在这些路径下存文件,就不受ext4.vhdx限制,只要 Windows 有空间即可。- 而 WSL2 默认的
~或/home/xxx、/usr等等,全部在那块 ext4.vhdx 虚拟盘里,空间打满了只能清理/扩容。
5. 如何解决磁盘打满
- 清理不必要文件。
- 或者像上面所说的——扩容现有 ext4.vhdx 文件。
- 或者将大数据放到
/mnt/c这种目录下。
WSL安装、迁移及修改默认登录用户_wsl设置默认登录用户-CSDN博客
WSL查看磁盘可用空间:
1 | wsl.exe --system -d Ubuntu-20.04 df -h /mnt/wslg/distro |
6. 简化理解
- WSL2 虚拟磁盘 = 一个本地 Linux 专用的“大文件”,和你 Windows 磁盘物理空间是间接相关(有空余才能增长),但逻辑上是个“独立开辟的区域”,空间大小你可以手动扩展,系统不会自动和 C 盘等实际剩余空间完全同步。
总结
- WSL2 的 Linux 系统空间(比如
/home)只受它当前的 ext4.vhdx 最大大小制约,和 Windows 剩余空间不是“同步增长”的关系。 - 只要你的
ext4.vhdx没有扩容,哪怕 Windows 还剩几百G,你 WSL2 里也可能爆满。 - 如你空间打满,请扩容 vhdx,或者将数据迁移到
/mnt/c下等挂载的 Windows 分区。
如需扩容详细操作可继续问!
Linux下怎么查看占用磁盘空间最大的十个文件夹?
以下是针对您的查询“Linux下怎么查看占用磁盘空间最大的十个文件夹?”的详细解答。Linux提供了多种命令行工具来实现这个功能,我会优先介绍最简单、标准的命令(无需额外安装),然后提及一些高级或交互式工具。操作需要在终端(Terminal)中执行。
1. 使用标准命令(du + sort + head)
最常用的是du命令(disk usage),结合排序和截取前10个结果。这适用于大多数Linux发行版(如Ubuntu、CentOS、Fedora)。
基本命令
要查看指定目录(如根目录/)下占用空间最大的10个一级子文件夹:
1 | du -h --max-depth=1 / | sort -rh | head -n 11 | tail -n 10 |
解释:
du -h --max-depth=1 /:计算指定路径(这里是根目录/)下所有一级子目录的磁盘占用大小。-h表示人类可读格式(e.g., 1.2G 而非字节数);--max-depth=1限制只显示一级深度(避免递归太深)。sort -rh:对输出进行排序。-r表示逆序(从大到小);-h支持人类可读数字排序。head -n 11 | tail -n 10:du的输出第一行是当前目录的总大小,所以用head -n 11取前11行,然后tail -n 10排除第一行,只显示前10个子文件夹。
示例输出(假设在根目录运行):
1
2
3
4
5
6
7
8
9
1050G /home
20G /var
10G /usr
5G /opt
2G /etc
1G /tmp
500M /boot
100M /root
50M /lib
10M /sbin
自定义路径
- 如果想查看当前目录下的前10个文件夹:替换
/为.(当前目录)。1
du -h --max-depth=1 . | sort -rh | head -n 11 | tail -n 10
- 查看特定目录(如
/home):1
du -h --max-depth=1 /home | sort -rh | head -n 11 | tail -n 10
注意事项
- 权限问题:如果目录需要root权限(如根目录
/),在命令前加sudo:1
sudo du -h --max-depth=1 / | sort -rh | head -n 11 | tail -n 10
- 深度调整:如果想查看更深层级的文件夹(e.g., 所有子目录),去掉
--max-depth=1,但这可能会很慢(尤其在大分区上)。 - 包括文件:默认
du只统计目录;如果想包括单个文件,用du -ah(-a显示所有文件和目录)。 - 性能:在大型文件系统上运行可能耗时,可以加
--exclude排除某些目录(e.g.,--exclude=/proc)。
2. 使用更高级的工具(推荐安装)
如果您经常需要这个功能,考虑安装交互式工具,更易用。
ncdu(NCurses Disk Usage,交互式工具):
- 安装:
sudo apt install ncdu(Debian/Ubuntu)或sudo yum install ncdu(CentOS/RHEL)或sudo dnf install ncdu(Fedora)。 - 使用:
ncdu /(或指定路径如ncdu /home)。 - 功能:进入交互界面,按大小排序文件夹,用箭头导航、删除文件等。退出按
q。它会自动显示占用最大的文件夹。
- 安装:
duf(Disk Usage/Free Utility,现代替代):
- 安装:从GitHub下载(https://github.com/muesli/duf)或用包管理器(如`sudo apt install duf` 如果可用)。
- 使用:
duf /。它以表格形式显示分区和文件夹大小,按大小排序。
tree(结合大小显示):
- 安装:
sudo apt install tree。 - 使用:
tree -h --du /path | sort -rh | head -n 10(但不如du直接)。
- 安装:
3. 其他提示
- 图形化工具:如果不喜欢命令行,用
baobab(GNOME Disk Usage Analyzer,安装sudo apt install baobab)或kdirstat/qdirstat(KDE版本)。这些是GUI工具,能可视化显示文件夹大小。 - 脚本化:如果需要自动化,可以写个Bash脚本保存命令,并定期运行。
- 常见问题:
- 如果命令报错“sort: invalid option – ‘h’”,可能是旧版sort不支持
-h,升级系统或用sort -rn(数字排序,但需去掉-h)。 - 在WSL(Windows Subsystem for Linux)下运行类似,但注意Windows文件系统的挂载可能影响准确性。
- 如果命令报错“sort: invalid option – ‘h’”,可能是旧版sort不支持
这个方法应该能帮您快速找到占用空间大的文件夹。如果您有特定Linux发行版或其他要求(如递归显示所有层级),告诉我,我可以进一步调整!
以下是针对Linux系统(适用于大多数发行版,如Ubuntu、Debian、CentOS、Fedora等)配置GitHub SSH Key的全过程教程。SSH Key是一种安全的认证方式,能让你在不输入用户名/密码的情况下与GitHub进行Git操作(如clone、push、pull),比HTTPS更安全和方便。
生成ssh-key用于github
为什么使用SSH Key?
- 安全性:使用公钥/私钥对加密,避免明文密码传输。
- 便利性:无需每次操作输入凭证。
- 前提条件:
- 已安装Git(运行
git --version检查;如果没有,安装:Ubuntu用sudo apt install git;CentOS/Fedora用sudo yum install git或sudo dnf install git)。 - 已安装SSH客户端(通常默认有;检查
ssh -V;如果没有,安装:Ubuntu用sudo apt install openssh-client)。 - 你有一个GitHub账号。
- 已安装Git(运行
如果您是初次配置,跟着步骤走即可。整个过程在终端(Terminal)中完成,通常只需5-10分钟。
步骤1: 检查是否已有SSH Key
在配置新Key前,先检查是否已有现有的SSH Key。
1 | ls -al ~/.ssh |
- 如果看到
id_rsa(私钥)和id_rsa.pub(公钥),说明已有Key,可以跳到步骤4复用它。 - 如果目录为空或不存在,继续生成新Key。
步骤2: 生成新的SSH Key
使用ssh-keygen命令生成RSA密钥对(推荐4096位强度)。
运行命令:
1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa:指定RSA类型(GitHub支持)。-b 4096:密钥长度(更高安全性;默认是3072)。-C "your_email@example.com":添加注释(用你的GitHub邮箱,便于识别)。
系统会提示保存位置:按Enter接受默认(
~/.ssh/id_rsa)。系统会提示输入密码短语(passphrase):推荐输入一个强密码(用于保护私钥),或按Enter跳过(不推荐,但更方便)。确认两次。
- 生成后,你会在
~/.ssh目录看到:id_rsa:私钥(绝不要分享!)。id_rsa.pub:公钥(稍后上传到GitHub)。
步骤3: 添加SSH Key到SSH Agent(可选,但推荐)
SSH Agent管理你的Key,确保在会话中自动使用。
启动SSH Agent(如果未运行):
1
eval "$(ssh-agent -s)"
- 输出类似
Agent pid 1234表示成功。
- 输出类似
添加私钥到Agent:
1
ssh-add ~/.ssh/id_rsa
- 如果设置了passphrase,会提示输入。
- 注意:这只在当前终端会话有效。如果想永久化,编辑
~/.bashrc或~/.zshrc(取决于你的Shell),添加eval "$(ssh-agent -s)"和ssh-add命令,然后运行source ~/.bashrc。
步骤4: 将公钥添加到GitHub账号
复制公钥内容到剪贴板:
1
cat ~/.ssh/id_rsa.pub
输出类似
ssh-rsa AAAAB3NzaC1yc2E... your_email@example.com。复制整个内容(包括ssh-rsa开头和邮箱结尾)。或者用
xclip工具(如果安装:sudo apt install xclip),运行xclip -sel clip < ~/.ssh/id_rsa.pub自动复制。
登录GitHub网站(https://github.com):
- 点击右上角头像 > Settings(设置)。
- 左侧菜单:SSH and GPG keys。
- 点击”New SSH key”(新建SSH Key)。
- Title:输入一个描述(如”My Linux Laptop”)。
- Key:粘贴刚才复制的公钥内容。
- 点击”Add SSH key”。
如果提示2FA(两因素认证),确认身份。
步骤5: 测试SSH连接
验证配置是否成功。
运行:
1
ssh -T git@github.com
- 如果首次连接,会提示
Are you sure you want to continue connecting (yes/no)?输入yes。 - 成功输出:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.(username是你的GitHub用户名)。 - 如果失败,见下面的故障排除。
- 如果首次连接,会提示
测试Git操作:
- Clone一个仓库:
git clone git@github.com:username/repo.git(替换为你的仓库)。 - 如果无需密码即成功,配置OK。
- Clone一个仓库:
步骤6: 配置Git使用SSH(如果需要)
如果你的仓库URL是HTTPS,切换到SSH:
- 检查当前远程URL:
git remote -v。 - 更改为SSH:
git remote set-url origin git@github.com:username/repo.git。
此外,在~/.gitconfig中设置全局用户名/邮箱(可选,但推荐):
1 | git config --global user.name "Your Name" |
常见问题和故障排除
- 命令不存在:确保安装了git和openssh-client。
- Permission denied (publickey):公钥未正确添加,或私钥权限不对。运行
chmod 600 ~/.ssh/id_rsa修复权限。 - ssh-add失败:如果Agent未运行,先运行
eval "$(ssh-agent -s)"。 - 连接超时:检查网络/防火墙;或用
ssh -v git@github.com查看详细日志。 - 多个Key管理:如果有多个Key,编辑
~/.ssh/config添加:1
2Host github.com
IdentityFile ~/.ssh/id_rsa - WSL(Windows Subsystem for Linux)特殊:WSL下配置类似,但确保Windows的SSH Agent未冲突;有时需重启WSL。
- 旧Key冲突:如果有多个Key,用
ssh-keygen -t rsa -b 4096 -f ~/.ssh/github_rsa生成特定文件名的Key,然后在GitHub添加对应公钥。
额外提示
- 安全性:私钥绝不分享;定期备份
~/.ssh目录;启用GitHub的2FA。 - 更新Key:如果邮箱变了,生成新Key并更新GitHub。
- 参考资源:GitHub官方文档(https://docs.github.com/en/authentication/connecting-to-github-with-ssh);运行`man ssh-keygen`查看命令帮助。
- 如果用ED25519(更现代算法):替换步骤2为
ssh-keygen -t ed25519 -C "your_email@example.com"(GitHub支持)。
如果在任何步骤遇到错误,复制错误消息告诉我,我可以帮你调试!这个配置完成后,你就可以无缝使用GitHub了。
TMUX常用指令
以下是tmux(Terminal Multiplexer,一个强大的终端多路复用工具,常用于Linux/Unix系统)的常用命令指南。tmux允许你在单个终端窗口中管理多个会话、窗口和窗格,支持会话持久化、窗口分割等功能,非常适合服务器远程工作或多任务处理。
重要提示
- 默认前缀键:tmux的快捷键通常以
Ctrl-b(简称<prefix>)开头,按下Ctrl-b后释放,然后按后续键(e.g.,Ctrl-b c创建新窗口)。 - 命令模式:按
<prefix> :进入命令行模式,然后输入命令(e.g.,new-session)。 - 安装:如果未安装,Ubuntu用
sudo apt install tmux;CentOS用sudo yum install tmux。 - 配置文件:自定义配置在
~/.tmux.conf(e.g., 改前缀为Ctrl-a:set -g prefix C-a)。 - 帮助:在tmux中按
<prefix> ?查看所有绑定键;或运行man tmux。
我将命令按类别分组,列出快捷键和等效命令行形式。假设您已在终端运行tmux启动会话。
1. 启动和会话管理
- 启动tmux:
tmux或tmux new -s session_name(创建名为session_name的会话)。 - 附加到现有会话:
tmux attach -t session_name(或tmux a附加最后一个)。 - 列出会话:
tmux ls(命令行)或<prefix> s(在tmux内)。 - 重命名当前会话:
<prefix> $或:rename-session new_name。 - 分离当前会话:
<prefix> d(detach,回到普通终端;会话在后台运行)。 - 杀死会话:
tmux kill-session -t session_name或在会话内<prefix> &杀死当前窗口的所有会话。 - 新建会话:
<prefix> :new(在当前tmux内创建新会话)。
2. 窗口管理(类似标签页)
- 创建新窗口:
<prefix> c。 - 切换到下一个窗口:
<prefix> n或<prefix> l(最后一个活动窗口)。 - 切换到上一个窗口:
<prefix> p。 - 选择窗口(列表):
<prefix> w。 - 重命名当前窗口:
<prefix> ,。 - 关闭当前窗口:
<prefix> &(确认后关闭)。 - 查找窗口:
<prefix> f(输入关键词搜索)。 - 切换到指定窗口:
<prefix> 0-9(数字键,切换到第N个窗口)。
3. 窗格管理(窗口分割)
- 水平分割窗格:
<prefix> "(将当前窗格分成上下两部分)。 - 垂直分割窗格:
<prefix> %(分成左右两部分)。 - 切换窗格:
<prefix> 箭头键(上/下/左/右)或<prefix> o(循环切换)。 - 关闭当前窗格:
<prefix> x(确认后关闭)。 - 调整窗格大小:
<prefix> Ctrl-箭头键(按住Ctrl调整边界)。 - 全屏当前窗格(切换):
<prefix> z(zoom/unzoom)。 - 重新排列窗格:
<prefix> Space(循环布局,如主-从、平铺)。 - 交换窗格位置:
<prefix> {(与上一个交换)或<prefix> }(与下一个)。
4. 复制和粘贴模式(Vi模式推荐)
- 进入复制模式:
<prefix> [(然后用箭头键导航)。 - 开始选择文本(Vi模式):在复制模式下,按
v(visual mode),用箭头移动选择。 - 复制选中文本:按
y(yank)或Enter。 - 粘贴:
<prefix> ]。 - 滚动历史:复制模式下,用PageUp/PageDown或鼠标滚轮(如果启用)。
- 提示:在
~/.tmux.conf添加set -g mode-keys vi以启用Vi风格键绑定(更高效)。
5. 其他常用命令
- 重新加载配置:
<prefix> r(需在配置中添加bind r source-file ~/.tmux.conf)。 - 分割窗口成网格布局:
<prefix> Alt-1到Alt-5(不同布局)。 - 同步窗格输入:
<prefix> :setw synchronize-panes(在所有窗格同时输入)。 - 捕获窗格输出到文件:
<prefix> :capture-pane -S - -E -(捕获所有历史)。 - 鼠标支持:
<prefix> :set -g mouse on(启用鼠标点击/拖拽窗格/滚动)。 - 杀死服务器(关闭所有会话):
tmux kill-server。 - 显示时钟:
<prefix> t(临时显示大时钟)。 - 自定义键绑定:在配置中添加如
bind-key C-j resize-pane -D 10(自定义调整大小)。
示例工作流
- 启动:
tmux new -s mysession。 - 创建窗口:
<prefix> c。 - 分割窗格:
<prefix> %(垂直)。 - 运行命令:在窗格中运行如
top或vim。 - 分离:
<prefix> d。 - 重新附加:
tmux a -t mysession。
高级提示
- 自定义配置:编辑
~/.tmux.conf,例如:保存后,运行1
2
3
4set -g prefix C-a # 改前缀为Ctrl-a
unbind C-b
set -g mouse on # 启用鼠标
set -g history-limit 50000 # 增加历史行数tmux source ~/.tmux.conf或重启tmux。 - 插件:用tmux插件管理器(如tpm:https://github.com/tmux-plugins/tpm)添加扩展,如tmux-resurrect(保存/恢复会话)。
- 常见问题:如果快捷键无效,检查是否在嵌套tmux中(用
<prefix><prefix>发送前缀);或用tmux -v调试。
这些是tmux的最常用命令,覆盖80%的日常使用。如果您需要特定场景的命令(如服务器部署)或配置示例,告诉我,我可以扩展!更多细节见man tmux或官网(https://github.com/tmux/tmux/wiki)。
多个WSL只关闭一个
wsl --shutdown 这个命令在 Windows 的 WSL(Windows Subsystem for Linux)环境下的实际作用是:
作用
wsl --shutdown会关闭所有正在运行的 WSL 实例,而不是只关闭单独的某一个。- 包括所有分发版(比如 Ubuntu、Debian、Kali 等),所有正在运行的 WSL 2 虚拟机和 WSL 1 实例,都会被一起终止。
- 这也会释放掉被相关 WSL 虚拟机占用的内存资源。
- 执行后,再进入
wsl或启动具体发行版,会重新启动新的 WSL 实例。
如果你只想关闭/终止某一个WSL发行版
可以使用以下命令:
1 | wsl --terminate <发行版名称> |
比如:
1 | wsl --terminate Ubuntu-20.04 |
这样只会关闭名为“Ubuntu-20.04”的那个 WSL 分发版,其他的不受影响。
总结:
wsl --shutdown关闭所有WSL实例。wsl --terminate <Name>只关闭指定的某一个实例。
如果有更多关于 WSL 的问题,欢迎继续提问!
Windows上删除某个WSL版本
1 | wsl --unregister Ubuntu-22.04 |
wsl在Windows中unregister后,硬盘空间立马就腾出来了,其背后的原理是什么?
非常棒的问题 👍,这个现象确实容易让人好奇。
当你在 Windows 上执行:
1 | wsl --unregister <发行版名称> |
后,磁盘空间几乎“立刻”就释放出来,这其实是因为 ——
WSL 的每个发行版(Linux 实例)在 Windows 上只是一个文件(虚拟磁盘映像),
--unregister命令删除的就是这个大文件。
🔬 一、核心原理:WSL 的文件系统是一个 VHDX 虚拟磁盘文件
当你安装一个 WSL 发行版(例如 Ubuntu-22.04),实际上 Windows 会在你的用户目录下创建一个虚拟磁盘文件:
1 | %LOCALAPPDATA%\Packages\<发行版包名>\LocalState\ext4.vhdx |
比如:
1 | C:\Users\<用户>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx |
这个文件就是 WSL 的 完整 Linux 文件系统镜像(ext4 文件系统容器)。
所有你在 WSL 里创建的文件、安装的软件、apt 下载的包,都存储在这个 VHDX 里。
- 它通常采用 稀疏文件(sparse file) 格式;
- Windows NTFS 会“按需分配”磁盘空间。
👉 因此 “你的整个 WSL 系统” 本质上就是一个单独的文件!
💥 二、unregister 做了什么?
执行:
1 | wsl --unregister Ubuntu-22.04 |
这条命令会:
停止该发行版的所有正在运行的进程;
从注册表中删除该发行版的映射信息;
删除对应的文件夹路径:
1
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu22.04onWindows_79rhkp1fndgsc\
也就同时删除了里面的
ext4.vhdx文件。
⚙️ 三、那么为什么“空间立马释放”?
因为这个 .vhdx 文件可能占几十 GB,是在 NTFS 文件系统上作为一个单一文件 持有的。
当 wsl --unregister 删除它时:
- Windows 直接删除该 VHDX 文件;
- 操作系统立即回收它所占用的空间;
- 不需要像 ext4 删除文件那样清理块结构;
- 所以看起来“瞬间腾出几十 GB”。
👉 这跟你在 Windows 上删除一个 30 GB 的电影文件类似,删除操作只是移除了文件表项,系统立即统计为“腾出空间”。
🧩 四、可视化:
| 操作 | 文件系统变化 | 空间变化 |
|---|---|---|
| 安装 WSL 发行版 | 创建 ext4.vhdx 文件 |
占用磁盘空间 |
| 使用 Linux、安装软件 | 向该虚拟磁盘写入数据 | VHDX 文件变大 |
wsl --unregister |
删除整个 ext4.vhdx 文件 |
空间立即释放 |
🧱 五、补充知识:导出 / 备份机制
在删除前,你可以先导出备份整个 VHDX 文件内容:
1 | wsl --export Ubuntu-22.04 D:\backup\ubuntu22.tar |
然后删除:
1 | wsl --unregister Ubuntu-22.04 |
若以后想恢复:
1 | wsl --import Ubuntu-22.04 D:\WSL\Ubuntu22 D:\backup\ubuntu22.tar |
这一来一回的过程,其实就是压缩 / 解压 .vhdx 文件。
💡 六、总结一句话:
wsl --unregister删除的不是一堆小文件,而是一个巨大的虚拟磁盘文件(ext4.vhdx),
所以 Windows 文件系统能瞬间回收整个空间,看上去就像“硬盘空间立刻腾出来了”。
WSL导出
你可以利用 wsl --export 和 wsl --import 命令,将 WSL 发行版从一台电脑迁移到另一台,方法如下:
一、导出(Export)
在源(导出)电脑的 PowerShell、CMD 或 Windows Terminal 里:
查找现有的发行版名称:
1
wsl --list --verbose
比如,你要迁出的发行版是
Ubuntu-20.04。导出发行版为 .tar 文件:
1
wsl --export Ubuntu-20.04 D:\backup\ubuntu20.tar
上述命令会把整个 Ubuntu-20.04 环境打包到
D:\backup\ubuntu20.tar,包括所有已安装的软件、文件、配置等。
二、迁移/导入(Import)
在目标(导入)电脑上:
- 把
ubuntu20.tar拷贝到本地,比如D:\backup\ubuntu20.tar。 - 选择一个安装目录(空目录),比如
D:\WSL\Ubuntu20。 - 导入发行版:
1
wsl --import Ubuntu-20.04 D:\WSL\Ubuntu20 D:\backup\ubuntu20.tar
这样会以新的分发名“Ubuntu-20.04”在指定文件夹创建 WSL 环境。
三、使用
导入成功后,可以用以下命令进入新环境:
1 | wsl -d Ubuntu-20.04 |
或在 Windows Terminal 新建标签选择相应发行版。
注意事项与限制
操作系统一致性
迁移包中内容与内核紧密相关,通常建议目标电脑上的 WSL 版本(WSL 2/WSL 1)保持一致;但一般情况下互相兼容问题不大。WSL 配置独立
.wslconfig、网络配置、挂载设置等是每台 Windows 独立的,不会跟着导出/导入,要重新设置。路径变化
导入时可以选新的存放路径;导出的.tar文件只是文件系统打包,由你指定安装地点。Windows 与 Linux 的映射路径
用户的个人文件和配置、软件都会迁入新电脑,但 Windows 原有的磁盘(如/mnt/c/下修改的文件)并不会一起导出来,只导 Linux 子系统自身内容。网络与权限
某些涉及主机网络、端口转发、外部程序调用等由 Windows 管理部分,需要在新机单独配置。用户名与用户ID
旧发行版默认用户、UID 会一同迁移,如果导入电脑已有同名发行版/同名用户,需注意重名冲突或清理。
总结
- 利用
wsl --export(导出)和wsl --import(导入)即可在不同电脑间迁移 WSL 环境。 - 除了 WSL 本身的高级配置不迁移外,大部分发行版内的内容都能完整打包和恢复。
- 通常不存在特别的限制,流程相对简单。
如需详细操作或有特殊需求(比如定制迁移方案、多分发版本处理等),欢迎补充追问!
