当前位置: 首页 > ai >正文

WSL (ext4.vhdx文件)占用空间过大,清理方式记录,同时更改 WSL 保存位置

一、问题

        之前使用 WSL Ubuntu 进行过开发板的 Yocto 项目编译,占用空间达到了 70GB 多的空间。后来进行了项目迁移,删除了 WSL 中的所有文件,但是从 Windows 查看空间占用却没有减少:

占用依然是 70 多,查阅发现 vhdx 文件不会自动收缩,其大小会根据历史使用量增长。

二、解决方案

方案一

        目前常见的方法是使用 diskpart 工具进行,它会重新计算实际有效数据的大小,并尝试释放未使用的空间,但具体效果取决于文件系统的空闲块是否被“清零”。

        在 PowerShell 中输入命令:

(1)关闭 WSL

wsl --shutdown

(2)打开 diskpart

diskpart

(3)找到对应的 vhdx 文件,依次执行

select vdisk file="C:\Users\<用户名>\AppData\Local\Packages\<DistroPackage>\LocalState\ext4.vhdx"
attach vdisk readonly  # 只读模式挂载
compact vdisk          # 压缩操作
detach vdisk
exit

        compact vdisk 会扫描虚拟磁盘,仅保留实际存储数据的区块,但前提是未使用的空间必须被显式填充为零(例如通过 dd if=/dev/zero)。如果删除文件后未清零,这些空间可能仍被视为“已占用”。

方案二(彻底)

        WSL export 通常用于更改 WSL 的安装目录或打包到其他电脑中使用。使用 WSL export 命令可以重新计算实际文件内容的大小并导出,而不是直接复制 vhdx 的原始大小。

(1)删除 /tmp 文件夹内的临时文件,我的大概删了 20 个 G

sudo rm -rf /tmp/*

 (2)关闭 WSL

wsl --shutdown

(3)在创建时可能会修改名字,查看已安装的 WSL

 wsl -l -v

显示:

(4)根据这个名字,导出为 tar 包:

wsl --export Ubuntu ./ubuntu.tar

我这里是放在了当前目录,建议放在磁盘的根目录,导出时方便些,我这里是 E 盘的根目录。

(5)删除当前的系统

wsl --unregister Ubuntu

此时可以看到,vhdx 文件已经删除了,剩下的文件如果需要更改安装目录,可以全部删除。

(6)导入到新的文件夹

wsl --import Ubuntu-22.04 F:\wsl_ubuntu22.04\ E:\ubuntu.tar --version 2

这里 Ubuntu-22.04 是新的系统名称,可以自行设置;F:\wsl_ubuntu22.04\ 是导入目录,就是要保存的目标文件夹;E:\ubuntu.tar 是导出的 tar 包;--version 2 设置 WSL 的版本。

(7)删除导出的 tar 包,查看导出结果

wsl -l

导出后的大小只有 3G:

(8)启动系统

        启动后默认会以 ROOT 用户登录,可以先查看原始用户是否存在:

ls /home

如果存在,则新建 /etc/wsl.conf 文件:

vi /etc/wsl.conf

写入:

[user]
default = xxx

这里填入自己的用户,然后重启 WSL:

wsl --shutdown

如果没有用户,那就新建一个,并且使用上面的方式设置默认登录。

http://www.xdnf.cn/news/437.html

相关文章:

  • 电脑 访问 github提示 找不到网页,处理方案
  • CRC实战宝典:从原理到代码,全面攻克循环冗余校验
  • 驱动-自旋锁死锁
  • Linux系统之部署TestNet资产管理系统
  • Java使用javacv实现的多种音视频格式播放器
  • 字符串系列一>二进制求和
  • 【重走C++学习之路】12、模板进阶
  • 智慧农业新视界:视频监控管理平台如何赋能现代农业
  • Trae,字节跳动推出的 AI 编程助手插件
  • TensorFlow 实现 Mixture Density Network (MDN) 的完整说明
  • JavaScript 回调函数详解
  • spring三级缓存如何解决循环依赖问题
  • 数量关系 多级数列1
  • 文档内容提取以及合成
  • 卸载Anaconda并保留虚拟环境,重装Anaconda并还原之前的虚拟环境
  • [Swift]pod install成功后运行项目报错问题error: Sandbox: bash(84760) deny(1)
  • 老年保健与管理实训室建设要点:设备选型与技术应用关键
  • ELK日志系统
  • 卷积神经网络基础(二)
  • Redis-分布式锁
  • PyTorch深度学习框架60天进阶学习计划 - 第46天:自动化模型设计(二)
  • n8n 中文系列教程_02. 自动化平台深度解析:核心优势与场景适配指南
  • 【Linux】软件管理机制和软件安装
  • Python 赋能区块链教育:打造去中心化学习平台
  • 【专刷】滑动窗口(一)
  • CasualLanguage Model和Seq2Seq模型的区别
  • Day2—3:前端项目uniapp壁纸实战
  • MCP 协议——AI 世界的“USB-C 接口”:解锁智能协作的新时代
  • Linux(autoDL云服务器)mamba-ssm环境安装——一次成功!
  • [Java EE] Spring AOP 和 事务