WSL2 的备份与清理
Aidan Engineer

毕竟 WSL2 只是一个子系统,所以可以大胆折腾,搞坏了重置 Ubuntu 即可,但是每次弄坏了可能还要去重新配置环境,MySQL, Redis, Docker 啥乱七八糟的装一遍也很麻烦,后来发现可以使用导入导出的方式做一个快照和回滚

其次我这种强迫症人选对磁盘清理真是谜之依赖,所以又找到了对 WSL 虚拟磁盘的压缩方式

WSL 的快照和回滚

其实就是把阿里云的备份方式做一个套用,结果完全能用

这里首先要去关闭当前运行的子系统

1
2
3
4
PS C:\>wsl --shutdown
PS C:\> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2

然后直接执行导出命令即可

1
wsl --export Ubuntu-20.04 c:\wsl-ubuntu20-04.tar

之后系统数据会打包成一个 .tar 文件,然后放到 U 盘云端都可以

如果需要回滚首先进行系统的注销,然后将 .tar 包进行导入

1
2
3
4
5
6
7
8
# 注销当前系统 
wsl --unregister Ubuntu-20.04

# 进行数据的导入
wsl --import Ubuntu-20.04 c:\wsl c:\wsl-ubuntu20-04.tar --version 2

# 重新设置默认用户名
ubuntu2004 config --default-user userName

WSL2 宿主机磁盘清理

WSL2 使用虚拟磁盘,如果往 WSL2 中放了大量的数据,然后就删掉,会发现 WSL2 的磁盘占用并没有降下来,这时强迫症如我就需要手动去压缩磁盘

第一步还是关闭运行状态的子系统,然后使用 diskpart 命令打开磁盘工具窗口,然后找到自己 WSL 版本对应的磁盘位置,例如我的 Ubuntu-20.04 是 C:\Users\aidan\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

执行磁盘选择命令后压缩

1
2
3
4
5
# 选择磁盘 
select vdisk file="{vhdx 文件名 }"

# 压缩磁盘
compact vdisk

如果执行压缩命令时报错不要慌,因为当前磁盘是一个只读的状态,只需要执行 detach vdisk 命令即可,然后压缩,完成后不要忘了把权限换回来: attach vdisk readonly

Debian 存储清理

旧内核清理

1
sudo apt purge $(dpkg -l 'linux-*' | awk '/^ii/{print $2}' | grep -P '^(?!linux-(?:generic|raspi|aws)).*')

旧软件清理

  1. 清理旧版本的软件缓存:sudo apt-get autoclean
  2. 清理所有软件缓存:sudo apt-get clean
  3. 清理系统中不再使用的孤立文件:sudo apt-get autoremove
    可以使用 sudo du -sh /var/cache/apt 命令查看缓存大小
  4. 清理软件的残余配置:sudo apt-get autoremove -purge
  5. 卸载软件:sudo apt --purge remove xxx
1
sudo apt autoclean && sudo apt clean && sudo apt autoremove && sudo apt remove && sudo apt autoremove --purge

删除残余配置文件

remove 但没有 purge 的软件会残留一部分配置文件,这里做一个清除操作

  1. 找出系统上哪些软件包留下了残余的配置文件:dpkg --list | grep "^rc"
  2. 提取软件名:dpkg --list | grep "^rc" | cut -d " " -f 3
  3. 删除软件包:dpkg --list | grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge

清除无用依赖包

  1. 安装查看工具 deborphan,执行软件名列出所有无用依赖:sudo apt install deborphan
  2. 删除软件:deborphan | xargs sudo apt purge -y

清楚过时软件

所谓过时(obsolete)的软件包是指 /etc/apt/sources.list 源文件中没有任何一个软件源提供这个软件的 deb 安装包
也就是说这个软件包在软件源里找不到了,不被支持了.这可能是因为下面几个原因:

  • 上游开发者不维护这个软件,又没有人来接管这个软件的开发.所以 Debian/Ubuntu 的软件包维护人员决定将这个软件从软件源中删除
  • 这个软件成了孤儿,同时用户很少.所以它就从软件源里消失了
  • 这个软件有了一个新的名字,维护人员给它起了一个新的名字并保留旧软件包
  1. 查找所有过时软件:sudo aptitude search ?obsolete
  2. 可以手动删除,也可以清除所有:sudo aptitude purge ~o

清理日志文件

ncdu 工具可以查看文件大小

  1. 安装后执行:sudo ncdu /var/log
  2. 删除可以使用:sudo dd if=/dev/null of=/var/log/xxx.log

查看大软件

debian-goodies 工具可以查看软件大小,可以执行 dpigs -H 查看大容量软件,默认展示前十条结果,可以指定展示行数 dpigs -H --lines=20

1
2
3
4
5
6
7
8
9
10
11
1.1GiB elasticsearch
315MiB golang-1.18-go
228MiB openjdk-17-jdk-headless
183MiB openjdk-17-jre-headless
140MiB docker.io
105MiB libllvm14
102MiB golang-1.18-src
96MiB containerd
67MiB gcc-12
52MiB guile-3.0-libs
.............

参考文章:
https://www.linuxdashen.com/debianubuntu 清理硬盘空间的 8 个技巧

  • 本文标题:WSL2 的备份与清理
  • 本文作者:Aidan
  • 创建时间:2021-11-04 18:24:34
  • 本文链接:https://aidanblog.top/wsl2-backup_and_clean/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论