Множественные ошибки UtilTranslatePathList при перезапуске Ubuntu на WSL после завершения работы

Вопрос или проблема

После выполнения sudo systemctl poweroff в Ubuntu в WSL и перезагрузки я вижу:

<3>WSL (814) ERROR: UtilTranslatePathList:2671: Не удалось перевести C:\Program Files\PowerShell\7
<3>WSL (814) ERROR: UtilTranslatePathList:2671: Не удалось перевести C:\Windows\System32\OpenSSH\
<3>WSL (814) ERROR: UtilTranslatePathList:2671: Не удалось перевести C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
<3>WSL (814) ERROR: UtilTranslatePathList:2671: Не удалось перевести C:\Program Files\dotnet\
...

Ubuntu запускается, но никакие диски Windows не смонтированы в WSL. Кроме того, Ubuntu закрывается через короткое время. После перезагрузки все кажется нормальным.

Что происходит и как я могу это решить?


Примечание: См. комментарий от @PierreGramme ниже. Номер ошибки и номер строки ошибки могут различаться в зависимости от вашего релиза WSL. Возможные альтернативные номера ошибок включают 252025 и 1790 (и, вероятно, другие), а номера строк ошибок, которые были наблюдаемы, включают 2866 и 2803.

Краткий ответ:

  • Вам по-прежнему не следует использовать методы выключения Linux в распределении WSL2.
  • Вам в конечном итоге нужно будет выполнить wsl --shutdown и перезапуститься, чтобы полностью восстановиться.

Дополнительные детали:

В обновленном WSL, который предоставляет поддержку Systemd, вы теперь можете выполнять определенные команды “выключения”, но это не значит, что вы должны. Это включает в себя:

  • 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.

Я также сталкиваюсь с подобной проблемой (только с немного другим кодом ошибки).

введите описание изображения здесь

Тем не менее, вышеупомянутое совет не помогает полностью. Обычно мне нужно пройти через несколько циклов wsl --terminate <distro_name>, wsl --shutdown, чтобы правильно запустить дистрибутив Ubuntu и смонтировать диск.

Ответ или решение

Ошибки UtilTranslatePathList при перезапуске Ubuntu на WSL после выключения

При использовании Ubuntu на Windows Subsystem for Linux (WSL) многие пользователи сталкиваются с ошибками, связанными с UtilTranslatePathList. После выполнения команды sudo systemctl poweroff в Ubuntu и последующего перезапуска, возможны следующие ошибки:

<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\
...

Кроме того, пользователи замечают, что при этом Windows-диски не монтируются в WSL, а сама Ubuntu может выйти через короткий промежуток времени. После повторного перезапуска все налаживается.

Причины возникновения проблем

Несмотря на то, что в последних обновлениях WSL была добавлена поддержка Systemd, использование Linux команд для завершения работы (таких как poweroff, halt, reboot) по-прежнему приводит к проблемам. При выполнении одной из этих команд Systemd заменяет себя на systemd-shutdown, который продолжает выполняться даже после того, как WSL сообщает, что дистрибутив больше не работает.

Когда WSL пытается перезапустить Ubuntu, он может столкнуться с ситуацией, когда PID 1 всё ещё занят systemd-shutdown, что может мешать нормальной инициализации системы и, как следствие, приводить к отсутствию монтирования Windows-дисков и регистрации binfmt_misc, необходимой для запуска Windows-команд. По истечении времени ожидания (90 секунд) systemd-shutdown завершает свою работу, и дистрибутив WSL также закрывается.

Рекомендации по устранению проблемы

Чтобы избежать подобных ошибок в будущем, рекомендуется придерживаться следующих действий:

  1. Не используйте команды отключения Linux для дистрибутивов WSL. Использование команд sudo systemctl poweroff, sudo systemctl halt, sudo systemctl reboot и любых других вариантов выключения в настольных менеджерах (таких как GNOME, Xfce4 и т.д.) может привести к некорректному завершению работы WSL.

  2. Используйте wsl --shutdown перед перезапуском. Это обеспечит чистое состояние WSL и устранит все возможные проблемы с загрузкой дистрибутивов.

  3. Если возникли проблемы, можете использовать команды:

    • wsl --terminate <название_дистрибутива> для принудительного завершения работы конкретного дистрибутива.
    • Затем выполните wsl --shutdown, чтобы инициировать полное завершение всех дистрибутивов WSL.
  4. Мониторьте ошибки при последующем запуске. Если ошибки не исчезают, попробуйте повторить процесс с завершением работы дистрибутива и его перезапуском несколько раз.

Заключение

Проблемы с ошибками UtilTranslatePathList при перезапуске Ubuntu в WSL являются распространенной проблемой, вызванной несовместимостью между методами завершения работы Linux и WSL. Следуя приведённым рекомендациям, вы сможете избежать этих ошибок и обеспечить корректную работу вашей системы. Управление WSL требует осторожности, чтобы избежать возможных конфликтов, которые могут привести к потере доступа к Windows-дискам и другим функциональным возможностям.

Оцените материал
Добавить комментарий

Капча загружается...