Вопрос или проблема
После выполнения 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 также закрывается.
Рекомендации по устранению проблемы
Чтобы избежать подобных ошибок в будущем, рекомендуется придерживаться следующих действий:
-
Не используйте команды отключения Linux для дистрибутивов WSL. Использование команд
sudo systemctl poweroff
,sudo systemctl halt
,sudo systemctl reboot
и любых других вариантов выключения в настольных менеджерах (таких как GNOME, Xfce4 и т.д.) может привести к некорректному завершению работы WSL. -
Используйте
wsl --shutdown
перед перезапуском. Это обеспечит чистое состояние WSL и устранит все возможные проблемы с загрузкой дистрибутивов. -
Если возникли проблемы, можете использовать команды:
wsl --terminate <название_дистрибутива>
для принудительного завершения работы конкретного дистрибутива.- Затем выполните
wsl --shutdown
, чтобы инициировать полное завершение всех дистрибутивов WSL.
-
Мониторьте ошибки при последующем запуске. Если ошибки не исчезают, попробуйте повторить процесс с завершением работы дистрибутива и его перезапуском несколько раз.
Заключение
Проблемы с ошибками UtilTranslatePathList при перезапуске Ubuntu в WSL являются распространенной проблемой, вызванной несовместимостью между методами завершения работы Linux и WSL. Следуя приведённым рекомендациям, вы сможете избежать этих ошибок и обеспечить корректную работу вашей системы. Управление WSL требует осторожности, чтобы избежать возможных конфликтов, которые могут привести к потере доступа к Windows-дискам и другим функциональным возможностям.