我已经使用 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 中删除文件时,它们不会自行缩小。有关更多信息,请参阅这个超级用户问题。