增加WSL虚拟硬盘大小
增加WSL虚拟硬盘大小
绪言
今天在WSL上训练模型,训练到Epoch [17/40]
时出现了
1 | "/home/xxx/anaconda3/envs/tjjm/lib/python3.12/site-packages/torch/serialization.py", line 784, in __exit__ |
发现是保存模型权重文件时失败了。
1 | (tjjm) xxx@xxx:~$ df -h |
发现是WSL硬盘满了。但是此时WSL所在的C盘仍然有空间。
查资料大概得知,大概是这么个回事。
WSL的虚拟硬盘空间上限
在创建WSL时,会根据WSL setting中设置的默认VHD大小
配置WSL初始虚拟磁盘大小。
而这个WSL是从旧系统上迁移(复制)过来的,当时可能C盘只有256G,所以默认VHD大小就是256000MB,导致该WSL的硬盘总大小即为256000MB。
不过,其为256G的原因也有可能是早期 WSL 版本最大默认值可能设置为 512GB 或 256GB。
迁移到新系统上来之后,WSL的VHD大小并未发生改变。
今天保存模型时,刚好达到了256G了,所以即使此时C盘依然有剩余空间,WSL的文件系统也不会主动多占用,也就是ext4.vhdx
不会继续扩容了。
查询剩余空间
正如绪言中描述的那样:
1 | df -h |
然后找到类似于:
1 | Filesystem Size Used Avail Use% Mounted on |
的一行。其中,x
可能是字母abcde...
,不固定。
WSL虚拟硬盘扩容
分为自动扩容和手动扩容两种方法。自动扩容请参考参考文献的 使用 wsl --manage
扩展 VHD 大小 一节。本文主要记录手动扩容的过程。
终止WSL
输入:
1 | wsl.exe --shutdown |
即可终止所有正在运行的WSL。
输入:
1 | wsl.exe -l -v |
可查看WSL状态。
diskpart选中ext4.vhdx
找到WSL的虚拟磁盘文件。这一步可以使用软件Everything搜索ext4.vhdx
实现快速找到。
复制ext4.vhdx
的文件路径,备用。
在cmd并输入diskpart
。此时命令行窗口左侧的prompt应当会变成DISKPART>
。
输入:
1 | Select vdisk file="<pathToVHD>" |
以选择该虚拟磁盘文件。其中的<pathToVHD>
需替换为之前的ext4.vhdx
文件路径。
比如我的完整指令是:
1 | Select vdisk file="C:\Users\Vanilla\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx" |
此步骤期望输出:
1 | DiskPart 已成功选择虚拟磁盘文件。 |
diskpart查看磁盘相关信息
1 | detail vdisk |
其中应该会有:
1 | 虚拟大小: 256 GB |
diskpart修改虚拟磁盘大小
1 | expand vdisk maximum=<sizeInMegaBytes> |
其中的<sizeInMegaBytes>
替换为你希望的虚拟磁盘调整后的大小。注意,单位是MB。比如我想扩容到320GB,则应该填写320000,后面不带单位。即:
1 | expand vdisk maximum=320000 |
修改完毕之后可以退出
1 | exit |
将扩容后的文件系统大小应用于WSL
启动WSL
1 | wsl |
让WSL知道它可以通过从WSL分发命令行运行这些命令来扩展此分发的文件系统大小
1 | sudo mount -t devtmpfs none /dev |
设置大小
1 | sudo resize2fs /dev/sdx <sizeInMegabytes>M |
其中,x
是任意字符,与前文保持一致。<sizeInMegabytes>
也与前文保持一致。注意,此处需要带上单位M。
最后使用df -h
检验是否成功扩容。