如果我禁用 HyperV,我会丢失 WSL 数据吗?我需要使用 VMware,但我在 WSL 上有一些数据。我还有 Win 10 Home
答案1
编辑:看起来你实际上可以继续在 VMWare 上使用 WSLv2,只要它是最新版本!VMWare 现在支持 Hyper-V 兼容性,包括 WSL。请参阅https://docs.microsoft.com/en-us/windows/wsl/wsl2-faq#will-i-be-able-to-run-wsl-2-and-other-3rd-party-virtualization-tools-such-as-vmware-or-virtualbox和https://blogs.vmware.com/workstation/2020/01/vmware-workstation-tech-preview-20h1.html
假设您正在使用 WSLv2(它已经成为默认设置一段时间了,但仍然比 v1 新得多),您可能会无法轻松访问这些数据。WSLv2 是使用虚拟机实现的,并使用安装在虚拟磁盘文件上的实际 Linux 文件系统。WSLv1 直接在 NTFS 和 NT 内核上实现,不使用任何虚拟化软件。wsl -l -v
在 Windows 命令行终端中运行以查看您当前正在使用的 WSL 版本。
即使您禁用 Hyper-V,WSLv2 发行版的 VHDX(虚拟硬盘文件)仍然存在,并且理论上可以挂载和读取(Windows 支持像物理磁盘一样挂载 VHDX 文件,也有第三方程序可以读取它们)。但是,您需要一个合适的文件系统驱动程序 - 第三方 Linux 文件系统驱动程序可用于 Windows,但默认情况下不包含在内 - 而且您绝对无法使用通常的方法通过 Windows 文件路径访问 WSL。
更好的选择是将 WSL 转换为版本 1。WSLv1 不使用 VM,而是更像 Wine(反向),向 Windows 添加 ELF 程序加载器和 Linux 系统调用支持(带有路径转换等)并直接在 NT 内核上运行 Linux 软件,而不是在虚拟化的 Linux 内核上。
为此,请打开任何 Windows 命令行(Powershell、CMD 等)并运行,wsl --set-version <Distro> 1
其中 <Distro> 是您已安装的任何 WSL 发行版(运行wsl -l
以列出它们);它可能类似于Ubuntu
。如果您安装了另一个发行版,您还可以运行wsl --set-default-version 1
以使 WSL 避免在将来创建 v2(虚拟化)WSL 发行版。
请注意,将 WSLv2 发行版转换为 v1 需要一段时间 - 该过程基本上是“启动 WSLv2,将除内核等内容之外的每个文件复制到主机 NTFS 驱动器上的特殊目录中,并更改一些元数据”,并且 WSLv1 的缺点之一是,由于所有转换过程,将 WSL 文件写入 NTFS 的速度很慢 - 但它应该可以工作只要你在禁用 Hyper-V 之前执行此操作完成后,您可以安全地禁用 Hyper-V(只要您没有将其用于其他任何用途,例如某些依赖它的 Windows 安全功能,但由于您运行的是家庭版,所以这种情况不太可能发生)。
这样做的好处是,您不仅可以保留对 WSL 数据的访问权限,还可以继续使用 WSL 运行 Linux 程序。任何需要实际 Linux 内核的东西(例如硬件或文件系统的驱动程序或其他内核模块)都将无法工作,网络会有所不同(它只会共享 Windows 网络接口,而不是使用虚拟化接口),文件 I/O 性能以及可能的其他一些方面会有所不同,而且大多会变得更糟……但它将更好地与 Windows 操作系统集成,允许您执行诸如将 Windows 命令直接传输到 Linux 命令之类的操作。
如果转换为 v1 路线不吸引人,您还可以将发行版导出到 tarball,可以使用 Windows 软件打开。但是,这将花费与转换发行版大致相同的时间 - 可能更长,因为它将包含内核之类的内容 - 而不会将 WSL 文件实际留在文件系统上的任何地方。为此,请使用wsl --export <Distro> <Filename>
。请记住,这是一个 Windows 命令,因此文件名应该使用 Windows 路径。
您可以运行wsl --help
以了解有关命令行工具及其选项的更多信息wsl.exe
。您可能还想阅读https://docs.microsoft.com/en-us/windows/wsl/compare-versions和https://docs.microsoft.com/en-us/windows/wsl/wsl2-faq。