关机后在 WSL 上重新启动 Ubuntu 时出现多个 UtilTranslatePathList 错误

关机后在 WSL 上重新启动 Ubuntu 时出现多个 UtilTranslatePathList 错误

在 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 一会儿后就退出了。重新启动后,一切似乎都正常。

发生了什么事?我该如何解决?

答案1

简短回答:

  • 您仍然不应该在 WSL2 发行版上使用 Linux 关机方法。
  • wsl --shutdown为了完全恢复,您最终将需要重新启动。

更多细节:

在提供 Systemd 支持的更新版 WSL 下,你现在可以运行某些“关机”命令,但这并不意味着你应该。 这包括:

  • sudo systemctl poweroff
  • sudo systemctl halt
  • sudo systemctl reboot
  • 在桌面管理器(Gnome、Xfce4 和其他)中选择任何相关的关机或重启选项。

在所有这些情况下,Systemd 都会用systemd-shutdown(有关更多详细信息,请参阅手册页)替换自身,即使在 WSL 报告发行版不再运行(通过wsl.exe -l -v)后,它仍会继续运行。

我在这里做了一些猜测,但是当 WSL 尝试重新启动 Ubuntu 时,它似乎无法加载自己的,init因为 PID1 仍然被“占用” systemd-shutdown(或者可能是因为systemd没有调用它)。

$ ps -fp 1
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  1 22:23 ?        00:00:00 /lib/systemd/systemd-shutdown halt --timeout 90000000us --log-level 6 --log-target console

因此,WSL 的大部分“正常”启动过程都不会发生。这包括 Windows 驱动器挂载以及binfmt_misc允许 WSL 运行 Windows 命令的注册。但显然,将 Windows 路径附加到基础环境中的 Linux 路径的尝试不会发生。

在您在上面命令参数中看到的超时(90 秒)之后,systemd-shutdown将会终止,并且 WSL 分发也将(再次)终止。

您也可以使用wsl --terminate <distro_name>PowerShell 终止。

无论哪种情况,新重启的 Ubuntu 都不会显示问题中列出的错误消息。

然而,您仍需要wsl --shutdown重新启动才能重新获得运行 Windows 命令的能力。的“损坏”binfmt_misc实际上会延伸到全部WSL2 发行版在您的系统上运行,直到wsl --shutdown

相关内容