在 WSL 中的 Ubuntu 中执行sudo systemctl poweroff
并重新启动后,我看到:
<3>WSL (814) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files\PowerShell\7
<3>WSL (814) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Windows\System32\OpenSSH\
<3>WSL (814) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
<3>WSL (814) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files\dotnet\
...
Ubuntu 启动,但没有 Windows 驱动器安装到 WSL 中。此外,Ubuntu 稍后退出。重新启动后,一切似乎都很好。
这是怎么回事,我该如何解决?
简短回答:
wsl --shutdown
重新启动才能完全恢复。更多细节:
在提供 Systemd 支持的更新 WSL 下,您现在可以运行某些“关机”命令,但这并不意味着您应该这样做。这包括:
sudo systemctl poweroff
sudo systemctl halt
sudo systemctl reboot
在所有这些情况下,Systemd 将自己替换为
systemd-shutdown
(有关更多详细信息,请参见手册页),即使在 WSL 报告分发不再运行(通过wsl.exe -l -v
)后,它仍会继续运行。我在这里做了一些猜测,但是当 WSL 尝试重新启动 Ubuntu 时,它似乎无法加载自己的
init
,因为 PID1 仍然被“占用”systemd-shutdown
(或者可能因为systemd
没有调用它)。因此,大部分“正常”的 WSL 启动都不会发生。这包括 Windows 驱动器安装以及
binfmt_misc
允许 WSL 运行 Windows 命令的注册。但显然,不是尝试将 Windows 路径附加到基本环境中的 Linux 路径。在上面的命令参数中看到的超时(90 秒)后,
systemd-shutdown
WSL 分发将终止,并且 WSL 分发将(再次)终止。您也可以使用
wsl --terminate <distro_name>
PowerShell 终止。在任何一种情况下,新重新启动的 Ubuntu 都不会显示问题中列出的错误消息。
但是,您仍然需要
wsl --shutdown
重新启动,然后才能重新获得运行 Windows 命令的能力。的“损坏”binfmt_misc
实际上会扩展到您系统上运行的所有WSL2 发行版,直到wsl --shutdown
.