Windows下使用diskpart压缩虚拟硬盘
前言
写这篇文章是因为近期在利用binwalk
分析二进制固件时出了 bug,(也可能是遇上了zipbomb
)。然后 WSL 连接的硬盘被扩了100个G。
WSL 连接的虚拟硬盘大小一般是只增不减的,光删除里面的文件没用。因此要自行手动压缩并指定配额上限。
DiskPart
DiskPart 是 Windows 下的一个实用程序,可以在终端中输入diskpart
或者Win
+R
运行diskpart
以打开其命令解释器。
以下为命令列表:
命令 | 描述 |
---|---|
active | 将具有焦点的磁盘分区标记为活动。 |
add | 将选中的简单卷镜像到指定磁盘。 |
assign | 给选中的卷分配一个驱动器号或装入点。 |
attach vdisk | 附加(有时称为装载或显露)虚拟硬盘 (VHD),使其在主机计算机上显示为本地硬盘驱动器。 |
attributes | 显示、设置或清除磁盘或卷的属性。 |
automount | 启用或禁用自动装载功能。 |
break | 将选中的镜像卷分为两个简单卷。 |
clean | 从选中的磁盘中删除所有分区或卷格式。 |
compact vdisk | 减小动态扩展虚拟硬盘 (VHD) 文件的物理大小。 |
convert | 将文件分配表(FAT)和 FAT32 卷转换为 NTFS 文件系统,现有文件和目录保持不变。 |
create | 在磁盘上创建分区,在一个或多个磁盘上创建卷,或者创建虚拟硬盘 (VHD)。 |
delete | 删除分区或卷。 |
detach vdisk | 阻止所选虚拟硬盘 (VHD) 在主计算机上显示为本地硬盘驱动器。 |
detail | 显示有关所选磁盘、分区、卷或虚拟硬盘 (VHD) 的信息。 |
exit | 退出 DiskPart 命令解释程序。 |
expand vdisk | 将虚拟硬盘 (VHD) 扩展到指定的大小。 |
extend | 将带焦点的卷或分区及其文件系统扩展到磁盘上的空闲(未分配)空间。 |
filesystems | 显示有关具有焦点的卷的当前文件系统的信息,并列出支持格式化卷的文件系统。 |
format | 格式化磁盘以接受文件。 |
gpt | 将 GPT 属性分配给焦点位于基本 GUID 分区表 (gpt) 磁盘上的分区。 |
help | 显示可用命令的列表或有关指定命令的详细帮助信息。 |
import | 将外部磁盘组导入本地计算机的磁盘组。 |
inactive | 在基本主启动记录 (MBR) 磁盘上,将选中的系统分区或启动分区标记为非活动的。 |
list | 显示磁盘、磁盘中分区、磁盘中卷的列表或虚拟硬盘 (VHD) 的列表。 |
merge vdisk | 将差异虚拟硬盘 (VHD) 与其对应的父 VHD 合并。 |
offline | 使联机磁盘或卷进入脱机状态。 |
online | 使脱机磁盘或卷进入联机状态。 |
recover | 刷新磁盘组中所有磁盘的状态,尝试恢复无效磁盘组中的磁盘,并重新同步具有陈旧数据的镜像卷和 RAID-5 卷。 |
rem | 提供一种向脚本添加注释的方法。 |
remove | 从卷中删除驱动器号或装入点。 |
repair | 通过用指定的动态磁盘替换失效的磁盘区域来修复选中的 RAID-5 卷。 |
rescan | 查找可能已添加到计算机的新磁盘。 |
retain | 准备现有的动态简单卷以将其用作启动卷或系统卷。 |
san | 显示或设置操作系统的存储区域网络 (san) 策略。 |
select | 将焦点切换到磁盘、分区、卷或虚拟硬盘 (VHD)。 |
set id | 更改具有焦点的分区的“分区类型”字段。 |
shrink | 按指定的量减小所选卷的大小。 |
uniqueid | 显示或设置带焦点的磁盘的 GUID 分区表 (GPT) 标识符或主启动记录 (MBR) 签名。 |
我们要做的就是在删除完无用文件后,把虚拟硬盘压缩到原来的大小。
因此第一步就是找到WSL使用的虚拟硬盘,在终端中依次执行以下命令:
关闭WSL实例
1 | wsl.exe --shutdown |
查找WSL所使用的虚拟硬盘路径,记得将<distribution-name>
替换为实际的发行版名称
1 | (Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx" |
复制刚刚得到的路径,将<pathToVHD>
替换为你的路径
1 | Select vdisk file="<pathToVHD>" |
压缩虚拟硬盘
1 | compact vidisk |
等待命令执行完毕后,分离虚拟硬盘
1 | detach vdisk |
接下来你的虚拟硬盘就应该被压缩成功了。
WSL2创建的VHD默认使用ext4文件类型,并且默认的容量上限为1TB(老版本为512G/256G)。使用diskpart同样也可以为虚拟硬盘扩容,具体可以参考Microsoft Learn。
GUI图形化界面
未更
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Himekawaの小屋!