如何给WSL 2扩容硬盘(即扩展虚拟大小)?
号外号外~~
⚡博主自用
Office 365
,快来小可爱拼车!⚡
自用Office 365家庭版全家桶 + OneDrive 1TB拼车,40/年,来长期拼的!
1.软件环境⚙️
Windows10
教育版64位
WSL 2
Ubuntu 20.04
2.问题描述🔍
首先,我们知道WSL 2
使用虚拟化平台将 Linux
分发版与主机 Windows
操作系统一起安装,创建虚拟硬盘 (VHD
) 来存储安装的每个Linux
发行版的文件。 这些 VHD
使用 ext4
文件系统类型 ,并在Windows
硬盘驱动器上表示为 ext4.vhdx
文件:
WSL 2
会自动调整这些 VHD
文件的大小以满足存储需求。 默认情况下,WSL 2
默认安装只会给到1T
的硬盘空间,老版本甚至只有512G
( WSL
版本 0.58.0
之前),更老的版本只有256G
(更早之前)!
这对深度学习来说显然是不够用的,那这个时候又该怎么办呢?
3.解决方法🐡
为了解决上述问题,需要给WSL 2
进行扩容。
3.1.检查可用磁盘空间
3.1.1.在linux中检查
使用 Linux
df -h
命令检查随 WSL 2
一起安装的 Linux
分发版 VHD
中的可用磁盘空间量:
发现在WSL 2
中确实是1T
的样子。
3.1.2.在Windows中检查
在Windows
上检查可用磁盘空间,打开 PowerShell
命令行并输入此命令, (替换为 <distribution-name>
实际分发名称) :
wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro
输出将包括:
- 文件系统:
VHD
文件系统的标识符 - 大小:磁盘的总大小 (分配给
VHD
) 的最大空间量 - 已用:
VHD
中当前使用的空间量 - 可用:
VHD
(分配大小中剩余的空间量减去) - Use%:已用/已分配大小(剩余磁盘空间的百分比)
- 装载位置:装载磁盘的目录路径
如图:
WSL
分配给VHD
的磁盘空间量在最新版本的WSL
中始终显示默认最大为1TB
,即使实际Windows
设备上的磁盘空间量小于此大小。WSL
将装载一个VHD
,该VHD
将在使用时扩展其大小,因此Linux
分发版会发现它可以增长到分配的最大大小1TB
。
3.2.扩展 WSL 2 虚拟硬盘的大小
1. 使用wsl.exe --shutdown
命令终止所有 WSL
实例
2. 查找 Linux 分发版的 .vhdx 文件和磁盘路径
打开 PowerShell
并使用以下脚本,将 distribution-name
替换为实际分发名称:
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"
结果将显示类似于: %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
的路径。当然,如果你的WSL 2
不是装在C
盘,则会显示:
将此目录路径复制到与计算机上安装的 Linux
分发版关联的 ext4.vhdx
文件。
3. 使用管理员权限打开 Windows
命令提示符,然后通过输入以下命令打开 diskpart
命令解释器:
diskpart
4. 现在会出现一个 DISKPART>
提示。 输入以下命令,将 pathToVHD
替换为步骤 2
中复制的与 Linux
分发关联的文件的目录路径 ext4.vhdx
。
Select vdisk file="<pathToVHD>"
5. 显示与此虚拟磁盘关联的详细信息,包括 虚拟大小,表示当前分配的 VHD 最大大小:
detail vdisk
6. 将虚拟大小转换为兆字节。
例如,如果虚拟大小:1024 GB
,则将其转换为 1024000
。 你输入的新值必须大于此原始值。 例如,若要将 1024GB
的虚拟大小加倍到 2048GB
,需要转换为 MB
并输入值 :2048000
。
请注意,不要输入高于实际需要的值,因为减小虚拟磁盘大小的过程要复杂得多
。
当然,虽然说比较复杂,但是也是有办法能减小虚拟磁盘大小的,可以参考我的另一篇文章:如何给WSL2缩减硬盘(即减小虚拟大小)?
7. 使用 Windows
命令提示符 DISKPART>
提示输入要分配给此 Linux
发行版的新最大硬盘空间的值
expand vdisk maximum=<sizeInMegaBytes>
8. 退出 DISKPART>
提示
exit
9. 启动此 Linux
分发版。 (确保它在 WSL 2
中运行。可以使用命令确认这一点: wsl.exe -l -v
。)
10. 让 WSL
知道它可以通过从 WSL
分发命令行运行这些命令来扩展此分发的文件系统大小。
sudo mount -t devtmpfs none /dev
mount | grep ext4
可能会看到以下消息,它响应第一个 mount
命令:mount: /dev: none already mounted on /mnt/wsl.
可以放心地忽略此消息。
11. 复制10中得到的名称,用于修改硬盘空间大小
该名称类似于:/dev/sdX
(X 表示任何其他字符)。 在下面的示例中,X
的值是 c
:
sudo resize2fs /dev/sdc <sizeInMegabytes>M
使用上面的示例,我们将 vhd
大小更改为 2048000
,因此命令为: sudo resize2fs /dev/sdc 2048000M
。
PS: 可能需要安装 resize2fs。 如果是这样,可以使用此命令进行安装:sudo apt install resize2fs。
输出将类似于以下内容:
resize2fs 1.45.5 (07-Jan-2020)
/dev/sdc 上的文件系统已被挂载于 /;需要进行在线调整大小
old_desc_blocks = 128, new_desc_blocks = 250
/dev/sdc 上的文件系统大小已经调整为 524288000 个块(每块 4k)。
4.结果预览🤔
此 Linux
发行版的虚拟驱动器 (ext4.vhdx
) 现已成功扩展到新大小:
渣男!都看到这里了,还不赶紧点赞
,评论
,收藏
走一波?