在 WSL2 中使用交换文件驱动 /dev/sda

在 WSL2 中使用交换文件驱动 /dev/sda

正如 NotTheDr01ds 在这个答案,WSL2 中的 /dev/sda 是 Windows 创建的虚拟驱动器,用于存储 WSL 实例之间共享的交换文件。但实例启动时默认不会挂载它。

我对此有几个疑问。

  1. cat /proc/swaps引用文件/swap/file已用作交换,但/swap目录甚至不存在。为什么?

  2. 如果默认情况下没有安装此驱动器,则如何使用交换?

  3. 要手工安装才能使用吗?

  4. 如果没有,如果我这样做或者添加相应的行,会不会损坏某些东西/etc/fstab

实际上,对我来说,第 4 个问题是最重要的,因为我对 thunar-volman 的挂载建议感到厌烦/dev/sda。但获得其他问题的答案也很有趣。

答案1

@DanielB 确实在评论中完全正确地回答了这个问题,但正如我在另一个问题的回复中所说,它可能需要一个回答来充分解释它。

首先,请注意(为了便于讨论) WSL2 分为两个部分:

  1. 实际运行 WSL2 虚拟机的虚拟机平台。据我所知,你无法真正或者与。。。相互作用这个虚拟机。

  2. 您运行的 WSL2 发行版。它们本身不是虚拟机,而是在各个命名空间

每个 WSL2 发行版(我称之为“实例”)都有自己的:

  • 用户
  • 坐骑
  • PID 映射
  • 和更多

但它也分享一些资源与父容器共享。与 Docker 容器一样:

  • 所有 WSL2 实例都使用相同的内核
  • 所有 WSL2 实例都使用相同的内存
  • 当然是同样的CPU
  • 相同的设备树(/dev),其中包括/dev/sdb交换所在的位置。
  • 而且,对于您的问题最重要的是,所有实例都使用相同的交换内存本身。

此交换由您无法访问的父 VM 处理并安装在其中。它已在 中报告/proc/swaps,但该报告来自父 VM 内核。

这是完全相同的Docker 容器处理交换的方式。我刚刚在两个不同的主机上运行了一个 Ubuntu Docker 容器(一个是虚拟主机,另一个是物理主机)。其中一个报告:

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/swapfile                               file            2097148 300288  -2

另一个:

$ cat /proc/swaps
Filename                                Type            Size            Used            Priority
/dev/sdb                                partition       524284          780             -2

在第一种情况下,/swapfile不存在之内容器。第二个,/dev/sdb没有安装之内容器。

如果我这样做或者添加相应的行,会不会损坏某些东西/etc/fstab

我不知道答案。在我之前给你的链接中,我说“不推荐”,但我不知道是否会出现任何潜在问题。似乎安全,但看起来确实如此更安全不是;-)

相关内容