如何给WSL 2扩容硬盘(即扩展虚拟大小)?

如何给WSL 2扩容硬盘(即扩展虚拟大小)?

  • 1.软件环境⚙️
  • 2.问题描述
  • 3.解决方法
    • 3.1.检查可用磁盘空间
      • 3.1.1.在linux中检查
      • 3.1.2.在Windows中检查
    • 3.2.扩展 WSL 2 虚拟硬盘的大小
  • 4.结果预览

1.软件环境⚙️

Windows10 教育版64位
WSL 2 Ubuntu 20.04

2.问题描述

首先,我们知道WSL 2 使用虚拟化平台将 Linux 分发版与主机 Windows 操作系统一起安装,创建虚拟硬盘 (VHD) 来存储安装的每个Linux发行版的文件。 这些 VHD 使用 ext4 文件系统类型 ,并在Windows 硬盘驱动器上表示为 ext4.vhdx 文件:
如何给WSL 2扩容硬盘(即扩展虚拟大小)?_第1张图片

WSL 2 会自动调整这些 VHD 文件的大小以满足存储需求。 默认情况下,WSL 2 默认安装只会给到1T的硬盘空间,老版本甚至只有512GWSL 版本 0.58.0之前),更老的版本只有256G(更早之前)!

这对深度学习来说显然是不够用的,那这个时候又该怎么办呢?
在这里插入图片描述

3.解决方法

为了解决上述问题,需要给WSL 2进行扩容。

3.1.检查可用磁盘空间

3.1.1.在linux中检查

使用 Linux df -h 命令检查随 WSL 2 一起安装的 Linux 分发版 VHD 中的可用磁盘空间量:
如何给WSL 2扩容硬盘(即扩展虚拟大小)?_第2张图片
发现在WSL 2中确实是1T的样子。

3.1.2.在Windows中检查

Windows上检查可用磁盘空间,打开 PowerShell 命令行并输入此命令, (替换为 实际分发名称) :

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 '' }).GetValue("BasePath") + "\ext4.vhdx"

结果将显示类似于: %LOCALAPPDATA%\Packages\\LocalState\.vhdx的路径。当然,如果你的WSL 2不是装在C盘,则会显示:
在这里插入图片描述
将此目录路径复制到与计算机上安装的 Linux 分发版关联的 ext4.vhdx 文件。

3. 使用管理员权限打开 Windows 命令提示符,然后通过输入以下命令打开 diskpart 命令解释器:

diskpart

4. 现在会出现一个 DISKPART> 提示。 输入以下命令,将 pathToVHD替换为步骤 2中复制的与 Linux 分发关联的文件的目录路径 ext4.vhdx

Select vdisk file=""

在这里插入图片描述

5. 显示与此虚拟磁盘关联的详细信息,包括 虚拟大小,表示当前分配的 VHD 最大大小:

detail vdisk

如何给WSL 2扩容硬盘(即扩展虚拟大小)?_第3张图片

6. 将虚拟大小转换为兆字节。
例如,如果虚拟大小:1024 GB,则将其转换为 1024000。 你输入的新值必须大于此原始值。 例如,若要将 1024GB 的虚拟大小加倍到 2048GB,需要转换为 MB 并输入值 :2048000

请注意,不要输入高于实际需要的值,因为减小虚拟磁盘大小的过程要复杂得多

7. 使用 Windows 命令提示符 DISKPART> 提示输入要分配给此 Linux 发行版的新最大硬盘空间的值

expand vdisk maximum=<sizeInMegaBytes>

如何给WSL 2扩容硬盘(即扩展虚拟大小)?_第4张图片

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.可以放心地忽略此消息。
如何给WSL 2扩容硬盘(即扩展虚拟大小)?_第5张图片

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) 现已成功扩展到新大小:
如何给WSL 2扩容硬盘(即扩展虚拟大小)?_第6张图片


渣男!都看到这里了,还不赶紧点赞评论收藏走一波?

你可能感兴趣的:(Windows,Ubutntu,软件环境,WSL,VHDX扩容,虚拟硬盘扩容)