Перезагрузка Ubuntu на Windows без перезагрузки Windows?

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

Можно ли перезагрузить подсистему Ubuntu без перезагрузки системы?

Я пытался использовать команду shutdown после установки обновлений, но это не сработало, как видно из следующего результата командной строки:

~$ bin/rcheck.sh
Требуется перезагрузка.
~$ sudo shutdown -r now
shutdown: Невозможно завершить работу системы

Вы не можете перезагрузить дистрибутив одной командой. Вам нужно завершить работу и загрузить дистрибутив с помощью двух команд. Если вы выполните wsl.exe вместо wsl, это сработает как в WSL Bash, так и в CMD.

Просмотреть список дистрибутивов и их текущее состояние:

wsl.exe -l -v

Завершить все: Сборка 18917+

wsl.exe --shutdown

Завершить работу конкретного дистрибутива: Windows 1903+

wsl.exe -t <DistroName>

Загрузить дистрибутив по умолчанию (отмеченный *):

wsl.exe

Загрузить конкретный дистрибутив:

wsl.exe -d <DistroName>

Старые версии

# PowerShell (администратор)
Restart-Service LxssManager

# или CMD (администратор)
net stop LxssManager
net start LxssManager

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

В командной строке PowerShell с правами администратора: Restart-Service LxssManager

С версии Windows 10 1803 закрытие всех терминалов WSL по умолчанию не завершает фоновые процессы, если файл /var/run/reboot-required присутствует. Этот файл будет автоматически создан apt в Ubuntu, когда обновление потребует перезагрузки, но если вы хотите вручную перезагрузить подсистему, вы можете создать файл самостоятельно:

sudo touch /var/run/reboot-required

Я не тестировал это на других дистрибутивах, доступных в Microsoft Store. Альтернативное решение – убрать все процессы самостоятельно:

sudo killall -r '.*'

Просто откройте окно cmd от имени администратора и выполните эти команды для перезагрузки.

net stop LxssManager
net start LxssManager

Следующее позволяет завершить работу из WSL2 с использованием команды wslreboot (или любой пользовательской команды).

Технически, wslshutdown было бы более подходящим для приведенного ниже кода:

Создайте псевдоним:

sudo nano ~/.bash_aliases

Добавьте строку:

alias wslreboot="history -a && cmd.exe /C wsl --shutdown"

history -a обеспечивает сохранение истории команд bash перед завершением работы.

Включите псевдоним:

Перезапустите WSL

cmd.exe /C wsl --shutdown

или введите

source .bash_aliases

Используйте

теперь вы можете ввести

wslreboot  

для завершения работы


Я думаю, что вы могли бы использовать вариант выше для запуска пакетного файла с командами:

wsl --shutdown
wsl

для правильной перезагрузки.

Просто выход из оболочки с помощью exit и повторный запуск, похоже, решают проблему. Оболочка должна быть запущена от имени администратора.

Louis@ATHENA:~$ bin/rcheck.sh
Перезагрузка не требуется.

Louis@ATHENA:~$ bin/update.sh
[sudo] пароль для Louis:
Следующие пакеты будут обновлены:
  libssl1.0.0 openssl
2 обновлено, 0 ново установлено, 0 удалено и 0 не обновлено.
Получить:1 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libssl1.0.0 amd64 1.0.1f-1ubuntu2.21 [830 kB]
Получить:2 http://archive.ubuntu.com/ubuntu/ trusty-updates/main openssl amd64 1.0.1f-1ubuntu2.21 [489 kB]
Настройка libssl1.0.0:amd64 (1.0.1f-1ubuntu2.21) ...
Настройка openssl (1.0.1f-1ubuntu2.21) ...
Удалить libssl1.0.0 1.0.1f-1ubuntu2.20 [830 kB]
Удалить openssl 1.0.1f-1ubuntu2.20 [489 kB]

Louis@ATHENA:~$ bin/rcheck.sh
Требуется перезагрузка.

Louis@ATHENA:~$ exec bash -l
Louis@ATHENA:~$ bin/rcheck.sh
Требуется перезагрузка.

Louis@ATHENA:~$ exit

Louis@ATHENA:~$ bin/rcheck.sh
Перезагрузка не требуется.
Louis@ATHENA:~$

Я создал файл *.bat, и его выполнение позволяет перезагрузить в течение 10 секунд. (Меня удивляет, как быстро все загружается. И, пожалуйста, дайте совет, вызовет ли мой подход серьезные проблемы в долгосрочной перспективе.)

Поместите следующие две строки в файл WSL_reboot.bat и запускайте его каждый раз, когда вам нужно перезагрузить WSL на Windows 10.

net stop LxssManager
net start LxssManager 

Замечание о обновлении: согласно моему недавнему “обновлению” операционной системы Windows, сборка 1809 больше не поддерживает команду sc.

Замечание: необходимо перезагрузить “ядро” WSL, когда вы форматируете диск через Проводник Windows. Я все еще не решил побочный эффект, когда команда ls выдает следующую ошибку. Связанный пост на WSL@Github; Связанный пост на Stack. Я оставлю ссылку, если смогу решить проблему побочного эффекта.

ls: 'System Volume Information': Доступ запрещен
...
d--x--x--x 1 llinfeng llinfeng       512 15 Янв 11:00 'System Volume Information'/
...

Из терминала WSL/Ubuntu нажмите Ctrl+D, чтобы завершить работу.

Перезагрузите (“перезапустите”) так же, как вы начинали WSL в последний раз.

Что я сделал:

  • Введите эту команду в командной строке, открытой в режиме администратора: wsl.exe --install
  • Перезагрузите свой компьютер

Тогда Windows будет обновлен соответствующим образом. После этого ошибка исчезла. Учетная запись Linux может быть создана нормально.

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

Да, перезагрузить подсистему Ubuntu в WSL (Windows Subsystem for Linux) без перезагрузки всей системы можно, и это на самом деле довольно просто сделать. Ниже приведены шаги и команды, которые помогут вам выполнить эту задачу.

1. Понимание процесса

WSL не поддерживает команду shutdown для перезагрузки непосредственно из терминала Ubuntu. Однако существует набор команд, которые помогут вам достичь вашей цели.

2. Перезагрузка WSL через командную строку Windows

2.1 Общая перезагрузка всех дистрибутивов WSL

Вы можете использовать следующую команду в окне командной строки (CMD) или PowerShell, чтобы завершить все процессы WSL и перезагрузить все дистрибутивы:

wsl.exe --shutdown

2.2 Перезагрузка конкретного дистрибутива

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

wsl.exe -t <ИмяДистрибутива>

Где <ИмяДистрибутива> — это имя вашего дистрибутива (например, "Ubuntu").

3. Восстановление работы дистрибутива

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

wsl.exe

Или для запуска конкретного дистрибутива:

wsl.exe -d <ИмяДистрибутива>

4. Используйте альтернативные методы

Вы также можете перезапустить WSL, перезапуская службу LxssManager в Windows. Это можно сделать в командной строке с правами администратора:

net stop LxssManager
net start LxssManager

5. Установка алиаса для удобства

Вы можете создать алиас для того, чтобы легко перезагружать WSL прямо из терминала. Для этого откройте файл ~/.bash_aliases и добавьте:

alias wslreboot="history -a && cmd.exe /C wsl --shutdown"

Не забудьте активировать изменения командой:

source ~/.bash_aliases

Теперь вы можете просто набирать wslreboot для перезагрузки.

6. Создание .bat файла

Вы также можете создать .bat файл, чтобы облегчить процесс. Просто создайте файл с именем WSL_reboot.bat и добавьте в него следующие строки:

net stop LxssManager
net start LxssManager

Запустив этот файл, вы перезагрузите WSL.

7. Использование Ctrl+D

Еще один простой способ перезагрузить WSL — это просто нажать Ctrl+D, когда вы находитесь в терминале WSL.

Заключение

С помощью вышеуказанных команд и методов вы сможете перезагрузить Ubuntu в WSL без необходимости перезагрузки всей системы Windows. Это полезно, когда возникают проблемы с обновлениями или когда вам нужно освободить ресурсы. Если у вас есть дополнительные вопросы или нужна дополнительная помощь, не стесняйтесь задавать их.

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

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