如何管理 WSL 磁盘空间

您所在的位置:网站首页 qq空间的存储空间有多大 如何管理 WSL 磁盘空间

如何管理 WSL 磁盘空间

2024-04-14 13:11| 来源: 网络整理| 查看: 265

如何管理 WSL 磁盘空间 项目 11/10/2023

本指南介绍如何管理通过 WSL 2 安装的 Linux 发行版使用的磁盘空间,包括:

如何检查 VHD 中的可用磁盘空间量 如何扩展 VHD 的大小 发生错误时如何修复 VHD 如何查找任何已安装的 Linux 发行版的 .vhdx 文件和磁盘路径

适用于 Linux 的 Windows 子系统 (WSL 2) 使用虚拟化平台将 Linux 发行版与主机 Windows 操作系统一起安装,创建虚拟硬盘 (VHD) 来存储你安装的每个 Linux 发行版的文件。 这些 VHD 使用 ext4 文件系统类型,并在你的 Windows 硬盘驱动器上表示为 ext4.vhdx 文件。

WSL 2 会自动调整这些 VHD 文件的大小,以满足存储需求。 默认情况下,WSL 2 使用的每个 VHD 文件最初被分配了 1TB 的最大磁盘空间量(在 WSL 版本 0.58.0 之前,此默认值设置为最大 512GB,在那之前为最大 256GB)。

如果 Linux 文件所需的存储空间超过此最大大小,你就会看到指示磁盘空间不足的错误。 若要修复此错误,请按照以下有关如何扩展 WSL 2 虚拟硬盘大小的指南进行操作。

如何检查可用磁盘空间

使用 Linux Df 命令检查随 WSL 2 安装的 Linux 发行版的 VHD 中可用的磁盘空间量。

若要检查可用磁盘空间,请打开 PowerShell 命令行并输入此命令(将 替换为实际的发行版名称):

wsl.exe --system -d df -h /mnt/wslg/distro

如果此命令对你没有效果,请使用 wsl --update 命令升级到 WSL 的 Microsoft Store 版本,或尝试 wsl df -h /。

该输出将包括:

文件系统:VHD 文件系统的标识符 大小:磁盘的总大小(分配给 VHD 的最大空间量) 已用:VHD 中当前使用的空间量 可用:VHD 中剩余的空间量(已分配的大小减去使用的量) 使用百分比:剩余磁盘空间的百分比(已用/已分配的大小) 装载位置:装载磁盘的目录路径

如果发现即将达到分配给 VHD 的可用磁盘空间量,或者由于没有剩余磁盘空间而收到错误,请参阅下一节,了解如何扩展分配给与 Linux 发行版关联的 VHD 的最大磁盘空间量。 WSL 分配给 VHD 的磁盘空间量将始终显示默认的最大数量(在最新版本的 WSL 中为 1TB),即使实际 Windows 设备上的磁盘空间量小于此值。 WSL 会装载一个 VHD,该 VHD 将在你使用它的过程中扩展大小,因此 Linux 发行版会发现它可以增长到分配的大小上限 1TB。 

如何扩展 WSL 2 虚拟硬盘的大小

若要将 Linux 发行版的 VHD 大小扩展到超过默认的 1TB 上限(所分配的磁盘空间量),请执行以下步骤。 (对于尚未更新的早期 WSL 版本,此最大默认值可能设置为 512GB 或 256GB)。

使用 wsl.exe --shutdown 命令终止所有 WSL 实例

将目录路径复制到与计算机上安装的 Linux 发行版关联的 ext4.vhdx 文件。 如需帮助,请参阅如何查找 Linux 发行版的 vhdx 文件和磁盘路径。

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

diskpart

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

Select vdisk file=""

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

detail vdisk

需要将虚拟大小转换为 MB。 例如,如果虚拟大小为 512 GB,则等于 512000 MB。 你输入的新值必须大于此原始值。 要将 512 GB 的虚拟大小加倍到 1024 GB,需以 MB 为单位输入值:1024000。 请注意,不要输入高于实际需要的值,因为减小虚拟磁盘大小的过程要复杂得多。

使用 Windows 命令提示符 DISKPART> 提示输入要分配给此 Linux 发行版的新的大小上限值:

expand vdisk maximum=

退出 DISKPART> 提示:

exit

启动此 Linux 发行版。 (确保它在 WSL 2 中运行。可以使用以下命令确认这一点:wsl.exe -l -v。不支持 WSL 1)。

通过从 WSL 发行版命令行运行这些命令,让 WSL 知道它可以扩展此发行版的文件系统大小。 可能会看到以下消息,它响应第一个 mount 命令:“/dev: /dev 上未装载任何内容。”可以放心地忽略此消息。

sudo mount -t devtmpfs none /dev mount | grep ext4

复制此项的名称,该名称类似于:/dev/sdX(X 表示任何其他字符)。 在下面的示例中,X 的值是 b:

sudo resize2fs /dev/sdb M

在上述示例中,我们将 vhd 大小更改为 2048000,因此命令将为:sudo resize2fs /dev/sdb 2048000M。

注意

可能需要安装 resize2fs。 如果是这样,可以使用此命令进行安装:sudo apt install resize2fs。

输出将类似于以下内容:

resize2fs 1.44.1 (24-Mar-2021) Filesystem at /dev/sdb is mounted on /; on-line resizing required old_desc_blocks = 32, new_desc_blocks = 38 The filesystem on /dev/sdb is now 78643200 (4k) blocks long.

此 Linux 发行版的虚拟驱动器 (ext4.vhdx) 现已成功扩展到新的大小。

重要

建议不要使用 Windows 工具或编辑器来修改、移动或访问 AppData 文件夹中与 WSL 相关的文件。 这样做可能会导致 Linux 分发版损坏。 如果要从 Windows 访问 Linux 文件,可通过路径 \\wsl$\\ 进行访问。 打开 WSL 分发版,然后输入 explorer.exe . 来查看此文件夹。 若要了解详细信息,请查看博客文章:从 Windows 访问 Linux 文件。

如何修复 VHD 装载错误

如果你遇到了与“装载发行版磁盘”相关的错误,这可能是由于突然关闭或断电,它可能导致 Linux 发行版 VHD 切换到只读,以避免数据丢失。 可以按照以下步骤使用 e2fsck Linux 命令来修复和还原发行版。

使用 lsblk 命令标识块设备名称

当 WSL 2 安装 Linux 发行版时,它会使用自己的文件系统将发行版装载为虚拟硬盘 (VHD)。 Linux 称这些硬盘驱动器为“块设备”,你可以使用 lsblk 命令查看有关它们的信息。

若要查找 WSL 2 当前正在使用的块设备的名称,请打开发行版并输入此命令:lsblk。 (或打开 PowerShell 并输入命令:wsl.exe lsblk。)输出类似于以下:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 363.1M 1 disk sdb 8:16 0 8G 0 disk [SWAP] sdc 8:32 0 1.5T 0 disk sdd 8:48 0 1T 0 disk /mnt/wslg/distro

有关块设备的信息包括:

NAME:分配给设备的名称将为 sd[a-z],指的是 SCSI 磁盘,每个使用的磁盘都有指定的字母。 sda 始终是系统发行版。 MAJ:MIN:表示 Linux 内核用于在内部标识设备的数字,其中第一个数字表示设备类型(8 用于表示小型计算机系统接口/SCSI 磁盘)。 RM:让我们知道设备可以移动 (1) 与否 (0)。 SIZE:卷的总大小。 RO:让我们知道设备是只读 (1) 与否 (0)。 TYPE:指设备类型(在本例中为磁盘)。 MOUNTPOINTS:指块设备所在的文件系统上的当前目录(SWAP 用于预配置的非活动内存,因此没有装入点)。 只读回退错误

如果 WSL 在打开 Linux 发行版时遇到了“装载错误”,则发行版可能会设置为只读,作为备用。 如果发生这种情况,则发行版可能会在启动期间显示以下错误:

An error occurred mounting the distribution disk, it was mounted read-only as a fallback.

当发行版以只读方式启动时,写入文件系统的任何尝试都将失败,并会出现如下错误:

$ touch file touch: cannot touch 'file': Read-only file system

若要修复 WSL 中的磁盘装载错误,并再次将其还原到可用/可写状态,可以使用 wsl.exe --mount 命令通过以下步骤重新装载磁盘:

打开 PowerShell 并输入此命令来关闭所有 WSL 发行版:

wsl.exe --shutdown

(在提升的命令提示符中)以管理员身份打开 PowerShell,然后输入装载命令,将 替换为发行版的 .vhdx 文件的路径。 有关查找此文件的帮助,请参阅如何查找 Linux 发行版的 VHD 文件和磁盘路径。

wsl.exe --mount --vhd --bare

通过 PowerShell 使用 wsl.exe lsblk 命令来标识发行版的块设备名称 (sd[a-z]),然后输入以下命令修复磁盘(将 替换为正确的块设备名称,如“sdc”)。 e2fsck 命令会检查 ext4 文件系统(随 WSL 安装的发行版所使用的类型)的错误并相应地修复它们。

wsl.exe sudo e2fsck -f /dev/

注意

如果只安装了一个 Linux 分发版,可能会遇到“ext 文件正在使用中”错误,并需要再安装一个分发版才能运行 wsl.exe lsblk。 修复完成后,可以卸载该分发版。

修复完成后,输入以下命令在 PowerShell 中卸载磁盘:

wsl.exe --unmount

警告

可以使用 sudo mount -o remount,rw / 命令将只读发行版返回到可用/可写状态,但所有更改都将在内存中,因此会在重启发行版时丢失。 建议改用上面列出的步骤来装载和修复磁盘。

如何查找 Linux 发行版的 .vhdx 文件和磁盘路径

若要查找 Linux 发行版的 .vhdx 文件和目录路径,请打开 PowerShell 并使用以下脚本,将 替换为实际的发行版名称:

(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '' }).GetValue("BasePath") + "\ext4.vhdx"

结果将显示类似于 %LOCALAPPDATA%\Packages\\LocalState\.vhdx 的路径。 例如:

C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

这是与你列出的 Linux 发行版关联的 ext4.vhdx 文件的路径。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3