Windows 10 上的 Ubuntu WSL 显示 2 x 256 GB 驱动器,但仅安装了一个 256 GB 驱动器

Windows 10 上的 Ubuntu WSL 显示 2 x 256 GB 驱动器,但仅安装了一个 256 GB 驱动器

我已经使用 WSL(适用于 Linux 的 Windows 子系统)在 Windows 10 上安装了 Ubuntu。

当我运行该lslbk命令时,我看到以下内容:

NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0  256G  0 disk  
sdb    8:16   0  256G  0 disk /

但是在 Windows 磁盘管理中,只安装了一个硬盘。我很困惑为什么 Ubuntu WSL 会显示上述输出。

答案1

这两个驱动器都是 WSL2 中的虚拟磁盘,因为 WSL 不允许直接访问底层 Windows 主机驱动器/硬件。WSL1lsblk只是出错,而 WSL2(您显然正在使用)至少会尝试将虚拟磁盘映射到其正确的 Linux 设备。

这里涉及两个问题(我从一条新评论中意识到这一点,虽然有些晚了):

  • 为什么 WSL 中有多个虚拟磁盘?
  • 为什么驱动器的大小总和大于实际驱动器的大小?

多个虚拟磁盘

/dev/sdb,如输出所示lsblk,是此特定 WSL 实例的根文件系统。如果您要启动另一个实例(通过安装发行版或克隆现有实例),您将看到第三个驱动器(在所有实例中)。您还可以看到它通过“附加” dmesg

在 WSL 上的默认 Ubuntu 安装中,/dev/sdb实例的 对应于目录ext4.vhdx中的文件%userprofile%\AppData\Local\Packages\<distribution_package>\LocalState\。如果您使用 创建自己的实例wsl --import,则可以将文件放置在任何位置。

/dev/sda我相当确定,是交换驱动器(信用这里)。此驱动器在所有 WSL 实例之间共享。您可以在 中找到此虚拟磁盘%temp%\swap.vhdx。虽然我不推荐这样做,但您可以使用以下方法确认这一点:

cat /proc/swaps # shows that the swap file is "/swap/file"
sudo mkdir /mnt/tmpmount
sudo mount /dev/sda /mnt/tmpmount
ls /mnt/tmpmount # shows the "file" is the only thing on the drive

在典型的 Linux 安装下,这将通过中的挂载更加明显/etc/fstab,但这似乎是 WSL 通过其自己(有点黑匣子)处理的事情之一/init

磁盘的大小

在 WSL 下创建的虚拟磁盘是“动态”的,这意味着它们实际上不会占用驱动器上的 256GB。例如,如果您在 Ubuntu 中使用了 3GB 的空间,那么 VHD 的“实际”大小将约为 3GB。它可以(动态)增长到 256GB,假设父驱动器上有空间(旁注:最近的 WSL 版本将默认虚拟磁盘大小增加到 1TB。)

动态的虚拟磁盘的大小甚至可以超过主机上可用的物理空间。如果父驱动器上的空间不足,但 Ubuntu 仍然认为它有可用空间,WSL 将(如果我没记错的话)将驱动器设置为只读。当您尝试运行创建(或增大)文件的命令时,您会看到与此相关的错误。

例如,这允许您在没有那么多可用空间的主机上安装三个 WSL 发行版,每个发行版都有一个动态虚拟 256GB(现在为 1TB)驱动器。

请注意,驱动器会增大,但当您从 Ubuntu 中删除文件时,它们不会自行缩小。有关更多信息,请参阅这个超级用户问题

相关内容