WSL2磁盘空间不够用?手把手教你挂载额外VHDX虚拟磁盘扩容(附清理旧磁盘指南)

张开发
2026/4/21 17:48:01 15 分钟阅读

分享文章

WSL2磁盘空间不够用?手把手教你挂载额外VHDX虚拟磁盘扩容(附清理旧磁盘指南)
WSL2磁盘空间不足三步扩容方案与深度清理指南当你在WSL2中运行Docker容器或训练机器学习模型时是否经常看到磁盘空间不足的报错默认的20GB虚拟磁盘对于现代开发需求来说确实捉襟见肘。上周我在处理一个计算机视觉项目时就遇到了数据集无法解压的窘境——而解决方案远比想象中简单。与直接扩容现有磁盘相比挂载独立VHDX虚拟磁盘有三大优势避免单点故障风险、可按项目分类存储、迁移时只需拷贝对应文件。下面这个方案已经在我团队的Ubuntu 22.04 LTS和Windows 11 22H2环境验证通过即使你是Linux新手也能在30分钟内完成。1. 创建与配置VHDX虚拟磁盘打开PowerShell管理员窗口执行以下命令创建动态扩容的VHDX文件。这里我推荐使用动态磁盘它只会占用实际写入的空间New-VHD -Path D:\wsl_data\project_vdisk.vhdx -SizeBytes 100GB -Dynamic关键参数说明Path建议放在非系统盘且剩余空间充足的目录SizeBytes根据项目需求设置机器学习建议至少100GBDynamic动态分配物理空间避免立即占用全部容量创建完成后需要初始化磁盘。按下WinX选择磁盘管理你会看到新出现的未初始化磁盘。右键初始化时注意选项推荐值原因磁盘类型GPT支持2TB以上容量分区样式NTFSWindows-Linux通用性最好警告不要在这个界面创建分区我们后续会在WSL2中完成分区操作避免权限问题。2. WSL2挂载与分区配置在PowerShell中执行挂载命令时--partition参数特别重要。我的深度学习工作站上有三块数据盘正确的挂载方式如下wsl --mount \\.\PhysicalDrive2 --partition 1 --type ext4常见问题排查如果报错access denied先执行wsl --shutdown终止所有子系统使用GET-CimInstance -query SELECT * from Win32_DiskDrive确认物理驱动器编号添加--bare参数可跳过自动挂载手动处理分区进入WSL2终端后需要完成以下关键步骤sudo mkfs.ext4 /dev/sdb1 # 格式化分区 sudo mkdir /data # 创建挂载点 sudo mount /dev/sdb1 /data # 临时挂载永久挂载需要编辑/etc/fstab文件添加这行配置/dev/sdb1 /data ext4 defaults 0 2验证配置是否正确sudo mount -a # 测试fstab配置 df -h /data # 查看挂载状态3. 智能迁移与空间回收方案原有磁盘的清理需要谨慎操作。我推荐使用ncdu工具进行可视化空间分析sudo apt install ncdu ncdu --exclude /mnt / # 排除已挂载点对于Docker用户特别要注意镜像存储位置。通过修改/etc/docker/daemon.json可以迁移镜像到新磁盘{ data-root: /data/docker }迁移完成后执行sudo systemctl restart docker docker info | grep Root Dir # 验证路径旧磁盘清理策略对比清理方式适用场景风险等级日志轮转/var/log空间不足低缓存清理开发环境临时文件堆积中包管理器清理卸载无用依赖项高重要提醒执行apt autoremove前先用apt-mark showmanual列出手动安装的包避免误删。4. 高级维护与自动化技巧创建定时任务自动清理旧内核是个好习惯。新建/etc/cron.weekly/cleanup_old_kernels文件#!/bin/bash current$(uname -r) dpkg -l linux-{image,headers}-* | awk /^ii/{print $2} | grep -vE $current | xargs sudo apt purge -y赋予执行权限sudo chmod x /etc/cron.weekly/cleanup_old_kernels对于需要频繁访问的数据可以启用内存缓存提升性能。在/etc/fstab中添加这些挂载选项defaults,noatime,nodiratime,discard,datawriteback 0 2监控磁盘使用情况的bash函数添加到~/.bashrcfunction diskmon() { watch -n 60 df -h / /data; echo; du -h --max-depth1 /data | sort -h }最后分享一个真实案例某NLP项目数据集导致磁盘爆满检查发现是Jupyter Notebook的checkpoints积累了87GB。通过find / -type f -name *.ipynb_checkpoints -exec rm -rf {} 瞬间释放空间——这正是为什么需要定期分析存储使用情况。

更多文章