Перезагрузка в linux из windows

Обновлено: 04.07.2024

У меня есть стандартная система с двойной загрузкой: Ubuntu и Windows. Grub по умолчанию настроен на запуск Windows.

Есть ли способ создать какую-то ссылку в Windows, которая бы:

  1. перезагрузила Windows
  2. , загрузилась в Ubuntu

3 ответа

Вы не должны изменять /boot/grub/grub.cfg как предложенный Michal Hagara. Это могло повредить Ubuntu, если Вы устанавливаете новое ядро, и не обновляет e:\home\user\Grubshift\ubuntudefault\grub.cfg .

Все, что необходимо сделать, должно создавать/копировать файл /boot/grub/grubenv со следующим содержанием

, Где next_entry строка следующей записи меню личинки, которая должна быть запущена в следующий раз (начинающий с нуля). Так next_entry=2 была бы 3th строка.

Личинка автоматически удалит значение после начальной загрузки в поэтому следующий раз, когда Вы загрузитесь в свою ОС по умолчанию снова.

Это то, как grub-reboot работы.

Вот то, что я имею в виду:

    (это должно быть способно к записи в раздел РАСШИРЕНИЯ, "монтированию" и присвоению буквы на начальной загрузке),
  • затем я подготовился бы, изменил файл GRUB, где Ubuntu установлена как Значение по умолчанию ОС (этот был бы сохранен на разделе Linux также),
  • Windows BATCH script (выполняемый Вашим желаемым ярлыком), который был бы:
    1. Скопируйте СТАРЫЙ GRUB (Windows как значение по умолчанию)
    2. скопируйте изменил GRUB (значением по умолчанию является Ubuntu) по СТАРОМУ один (Значение по умолчанию является Windows),
    3. Перезапуск ПК
  • Сценарий Bash Linux, который изменил бы и обновил бы GRUB на запуске (или перезагрузка) для установки задних окон как ОС по умолчанию

Я могу быть абсолютно неправым с этим подходом, но я не вижу, почему он не должен работать.

ПРОГРЕСС

1. Ярлык, чтобы перезапустить Windows и загрузить Ubuntu

  • Как я упомянул прежде, устанавливаю Ext2Fsd, заставьте его автосмонтироваться и присвойте букву на запуске
  • Я создал свою "Резервную папку" в /home/user/Grubshift с 3 подкаталогами: резервное копирование (для резервного копирования фактического/boot/grub/grub.cfg), ubuntudefault (для хранения grub.cfg с Ubuntu как значение по умолчанию), windowsdefault (у Вас есть идея),

После установки Ubuntu установлена по умолчанию, так копия это grub.cfg к Вашему желаемому каталогу. У меня есть "Windows как" конфигурация по умолчанию путем изменения GRUB через личинку-customizer (это более безопасно, по-моему), после того Windows копии grub.cfg к Вашему желаемому каталогу

После этого откройте блокнот и вставьте:

/y - опция copy управляйте, подавляет запрос, чтобы подтвердить, что Вы хотите перезаписать существующий целевой файл

Измените путь соответственно.

  • Сохраните тот файл (я использовал UTF-8), и измените расширение *.bat
  • Создайте Настольный ярлык для shift.bat , щелкните правой кнопкой по shorctur-> свойства-> вкладка ярлыка-> Run:minimized (который избавится от появления CMD),

Я попробовал это по крайней мере 8 раз, установка Windows как значение по умолчанию с grub-customizer .

Я не говорю, что это безопасно, но ЭЙ!, мы смешиваем с загрузчиком. который не безопасен

Когда это является полностью рабочим, мы можем избавиться от меню GRUB полностью, потому что это будет всегда загружаться в правильную ОС.

Сегодня мы научимся перезагружаться из Linux прямиком в Windows и обратно всего за один (двойной) клик.

image

Дано:

  • Два диска с GPT с разными ОС
  • Материнская плата с UEFI и отключеным Legacy Mode
  • Windows, которую бережно поставили с полной поддержкой UEFI
  • Linux (у меня Manjaro), который бережно поставили, выпилив любое упоминание GRUB и прочих старомодных вещей
  • rEFInd — красивый менеджер загрузки (нет, не загрузчик)

Надо:

  • Написать два скрипта на *sh и cmd (bat), которые позволят перезагрузиться в нужную ОС

Примечания:

  • Рабочие варианты обозначены, как Решение, остальное — мои рассуждения и описание пути к цели.
  • Я сознательно опускаю описание тех деталей, которые не относятся к сути настройки, либо легко варьируются. Упоминаются же эти детали потому, что для меня они не были очевидны на момент настройки, поэтому статья становится более понятной для неискушенных читателей, которые не будут видеть в ней инструкцию по рисованию совы. стоит быть осторожным при модификации NVRAM

Linux:

Отлично, теперь запускаем:

И оказываемся в Windows, как того и желали. Теперь эту команду записываем в скрипт/alias/*.desktop-файл и радуемся тому, как всё здорово получилось.

Windows:

Typical Windows


Началось всё с поиска аналога efibootmgr для Windows, которого в чистом виде, конечно же, нет. Для успокоения совести я даже попытался использовать Linux Subsystem, но это, конечно же, не сработало.
Беглый поиск по интернетам показал, что схожим функционалом по модификации NVRAM обладает утилита bcdedit. Отлично, думаю я, запускаю PowerShell из-под Администратора и пишу

Где Linux? Куда грузиться? Ненавижу винду
На самом деле оказалось, что виновата не Windows, а я (да-да, тот самый момент для внимательных пользователей), и вот почему: rEFInd — прекрасная утилита, которая обычно, для корректной работы, требует только установить себя. Она умеет подхватывать все .efi файлы, разные дистрибутивы с разными ядрами, сама подставляет иконки. Прелесть, а не инструмент. Но это сыграло со мной злую шутку, так как оказалось, что UEFI ничего не знает про Linux, так как отсутствует соответствующий ему .efi-файл.
Поэтому презагружаемся обратно в Linux, конфигурируем systemd-boot (bootctl). Теперь всё выглядит вот так:

Возвращаемся обратно и снова запускаем.

Тут стоит упомянуть, что проблему мне помогали решать пользователи reddit. Именно благодаря им мы имеем следующий шаг:

Где аргументом является identifier необходимого варианта — Linux Boot Manager.

Powershell не даёт нормально выполнить эту команду, ругаясь на

Всё из-за того, что Microsoft периодически любит что-нибудь сломать. Решение просто и элегантно — вызываем классический CMD и работаем в нём. Это можно сделать командой

Перезагружаемся и видим, что порядок загрузки не изменился, а мы оказались в первом элементе в BootOrder (у меня это был rEFInd), выбираем Windows и видим страшный привет из времен DOS, который говорит нам, что \EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI не найден. Да, мы изменили параметры загрузчика Windows, но не UEFI.
Борьба с этой ошибкой заняла у меня все праздники, но ничего путного не получалось. Я уже подумывал написать на C++ небольшую программку для этого (то, что это возможно, следует из существования такого софта, как EasyUEFI).
Но тут на очередном сайте я обнаружил вот такую конструкцию

И тут меня осенило, что можно прямо сказать bcdedit что и куда писать. Дальше стоило только проверить догадку:
Решение

Тут важно, что мы явно сказали писать не в (как он, видимо, делает по-умолчанию), а в , что и является нашими настройками UEFI.
Перезагружаемся, и всё работает так, как мы этого хотели. Сохраняем это дело в bat/lnk, дописываем

Выставляем запуск из-под администратора и готово!
Спасибо за внимание! Буду крайне рад замечаниям по технической части в комментариях, замечаниям по оформлению — в ЛС.

Установлены две системы - Windows 7 и Linux Mint 17. Загрузчик - grub, по умолчанию загружает Windows (и это так и надо).

Иногда надо перезагрузиться из Windows в Linux. Windows выключается долго, поэтому находиться за компьютером и караулить, когда же в меню загрузки нужно будет выбрать линукс, не хочется.

Возможно ли как-то в виндоусе организовать автоматическую перезагрузку в линукс, чтобы не надо было руками ничего выбирать в меню?

Драйвер файловой системы установлен и файлы линуксового раздела доступны, однако, по умолчанию, это readonly-доступ. Изменить можно, но что-то мне подсказывает, что неспроста он readonly. Есть ли варианты кроме разрешения доступа на запись и изменения конфигурации grub'а перед перезагрузкой с последующим восстановлением конфигурации из Linux'а? Насколько плоха такая идея? Или как лучше всего её реализовать?

110k 24 24 золотых знака 98 98 серебряных знаков 262 262 бронзовых знака Не по теме: а если вместо перезагрузки отправлять винду в спящий режим, может станет приемлемо по скорости (если ничего не заглючит)? @andreymal, во-первых, говорят, что при гибернации не сбрасывается файловый кэш на диск, что может плохо кончиться. Во-вторых, с гибернацией в принципе проблемы - снова не работает (с момента установки системы, на этот раз). Если можешь помочь с гибернацией, скажи - задам тут отдельный вопрос. А по теме: вин8/вин10 как-то умеет перезагружаться прямо в настройки uefi; если комп с uefi и не лень его настроить, то, может, есть смысл поискать инфу, как такая перезагрузка делается, может, так же можно и в другую ОС загрузиться (а конкретно помочь ничем не могу, сам виндой не пользуюсь) @andreymal, нет, uefi нет. Насколько я знаю, теоретически для моей материнки он возможен, но что-то мне не хочется её трогать. Менее радикальные варианты есть? @andreymal Кстати, а ведь при установке системы как-то делается перезагрузка не с диска, несмотря на то, что диск вставлен. Не из той же оперы?

например, можно перенести содержимое каталога /boot в раздел с файловой системой, с которой отлично работают и ms/windows и gnu/linuxmsdos/fat (оно же fat32, оно же vfat и т.п.).

тогда можно будет устанавливать в файле /boot/grub/grubenv переменной окружения next_entry нужный пункт из загрузочного меню (нумерация начинается с нуля).

важный момент: этот файл должен быть размером ровно 1024 байта. как именно должно выглядеть содержимое файла с новой командой, можно выяснить «на кошках», передав первым параметром путь к какому-нибудь тестовому файлу. вот эта команда установит значение переменной next_entry :

а вот эта — удалит упоминание данной переменной:

p.s. после переноса содержимого надо, естественно, добавить строчку в /etc/fstab для монтирования раздела, куда вынесено содержимое каталога /boot . примерно так:

uuid-раздела можно узнать из вывода команды:

обновление. протестировал. вполне уверенно срабатывает «одноразовая» функциональность: после загрузки значение переменной next_entry в файле /boot/grub/grubenv было благополучно «затёрто».

У меня стандартная система двойной загрузки: Ubuntu и Windows. Grub настроен на запуск Windows по умолчанию.

Есть ли способ создать какую-то ссылку в Windows, которая бы:

  1. перезагрузите Windows
  2. загрузиться в Ubuntu

Вам не нужно изменять, /boot/grub/grub.cfg как предложил Михал Хагара. Это может сломать Ubuntu, если вы установите новое ядро ​​и не обновите e:\home\user\Grubshift\ubuntudefault\grub.cfg .

Все, что вам нужно сделать, это создать / скопировать файл /boot/grub/grubenv со следующим содержанием

Где next_entry находится строка следующего пункта меню grub, которая должна быть запущена в следующий раз (начиная с нуля). Так next_entry=2 будет 3-я строка.

Grub автоматически удалит это значение после загрузки, поэтому в следующий раз вы снова загрузитесь в свою ОС по умолчанию.

Вот как это grub-reboot работает.

Не знал об этой функциональности:) . Как вы могли заметить, я указывал, что возиться с grub.cfg не самый мудрый .

Вот что я имею в виду:

    (он должен иметь возможность записи в раздел EXT, «монтирования» и назначения буквы при загрузке)
  • Затем я подготовил бы модифицированный файл GRUB, где Ubuntu установлена ​​в качестве ОС по умолчанию (этот файл также будет храниться в разделе Linux)
  • Скрипт Windows BATCH (выполняется по желаемому ярлыку), который:
    1. Резервное копирование OLD GRUB (Windows по умолчанию)
    2. скопировать измененный GRUB (по умолчанию Ubuntu) поверх старого (по умолчанию Windows)
    3. Перезагрузите компьютер
  • Linux BASH-скрипт, который изменяет и обновляет GRUB при запуске (или перезагрузке), чтобы вернуть Windows в качестве ОС по умолчанию

Я могу быть совершенно неправ с этим подходом, но я не понимаю, почему он не должен работать.

РЕДАКТИРОВАТЬ:

ПРОГРЕСС

1. Сочетание клавиш для перезагрузки Windows и загрузки Ubuntu

  • Как я уже упоминал ранее, установите Ext2Fsd , сделайте его автоматическое монтирование и назначьте букву при запуске
  • Я создал свою «Папку резервного копирования» /home/user/Grubshift с 3 подкаталогами: резервное копирование (для резервного копирования фактического /boot/grub/grub.cfg), ubuntudefault (для хранения grub.cfg с Ubuntu по умолчанию), windowsdefault (у вас есть идея)

После установки Ubuntu устанавливается по умолчанию, поэтому скопируйте его grub.cfg в нужный каталог. У меня есть конфигурация «Windows по умолчанию», изменив GRUB с помощью grub-customizer (на мой взгляд, это безопаснее), после этого скопируйте Windows grub.cfg в нужный каталог

После этого откройте блокнот и вставьте:

/y - опция copy команды, подавляет запрос на подтверждение, что вы хотите перезаписать существующий файл назначения

Измените путь соответственно .

  • Сохраните этот файл (я использовал UTF-8) и измените расширение на *.bat
  • Создать ярлык на рабочем столе для shift.bat , щелкните правой кнопкой мыши по Shortctur -> Свойства -> вкладка ярлыка -> Выполнить: свернуто (это избавит от появления CMD)

Я пробовал это по крайней мере 8 раз, устанавливая Windows по умолчанию с grub-customizer .

Я не говорю, что это безопасно, но ЭЙ !, мы возимся с загрузчиком . это не безопасно

Когда он полностью заработает, мы сможем полностью избавиться от меню GRUB, потому что оно всегда будет загружаться в нужную ОС .

Эта статья ориентирована на самых новичков в Linux ну и тех кого интересует как перезагрузить Linux из консоли. Для меня перезагрузить компьютер в терминале или с помощью графического интерфейса это элементарно, но это база, не все новички ее знают и надо об этом написать.

Сегодня мы рассмотрим такие вопросы, как команда перезагрузки Linux из консоли, перезагрузка удаленно, и непосредственно перезагрузка в графическом интерфейсе. Начнем, пожалуй, с обычной перезагрузки системы.

Перезагрузка Linux в графическом интерфейсе

Здесь, как говорится, что может быть проще. Рассмотрим сначала перезагрузку в Ubuntu Unity. Достаточно нажать на кнопку с шестеренкой в правом верхнем углу экрана, и выбрать пункт Выключение:

reboot_ubuntu1

Затем в открывшимся окне кликнуть по пункту Перезагрузка:

reboot_ubuntu2

В окружении рабочего стола Gnome, все очень похоже на Unity, а в KDE нужно открыть главное меню, перейти на вкладку выход, и выбрать пункт перезагрузить:

reboot_kde

Затем подтвердить перезагрузку.

Перезагрузка Linux в терминале

А здесь уже простор намного шире, существует около десятка команд, которыми можно перезагрузить Linux. Одним нужны root привилегии, другим нет, одни выглядят просто и легко запоминаются, а другие длинные и сложные. Дальше мы рассмотрим их все.

Первая команда перезагрузки Linux, самая распространенная и самая простая:

Как видите, утилите нужны права суперпользователя. После нажатия Enter компьютер сразу уйдет в перезагрузку.

Утилита shutdown, которая используется для выключения тоже позволяет перезагрузить компьютер для этого нужно передать ей параметр -r. Плюс к тому же можно указать время перезагрузки. Сейчас - 0 или now, через одну минуту +1 через две - +2 и т д:

sudo shutdown -r +1

Перезагрузка Linux будет выполнена через минуту после ввода команды.

В системах инициализации совместимых с Init Scripts, существовали уровни загрузки системы - 0,1,2,3,4,5,6, уровень 0 - означал выключение, 6 перезагрузку, остальные режимы работы системы нас сейчас не интересуют. Переключаться между уровнями можно командой init. Только опять же нужны права суперпользователя. Таким образом:

/usr/bin/dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

Тут уже не нужны права суперпользователя. Это были обычные способы перезагрузки Linux, но есть еще один, нестандартный или даже два. Это магические SysRq клавиши. Ядро Linux отслеживает нажатие определенных сочетаний клавиш, и в ответ на них выполняет нужные действия. Сначала включаем поддержку sysrq:

echo 1 > /proc/sys/kernel/sysrq

Лучше это сделать заблаговременно, так как этот способ полезен когда система зависла и ни на что не реагирует:

Для активации SysRq сочетания зажмите Alt + SysRq и нажмите код клавиши. Для нормальной перезагрузки рекомендуется использовать следующую последовательность: R E I S U B, клавиши нажимать в той же последовательности с интервалом приблизительно секунду.

  • R - возвращает управление клавиатурой если Х сервер был завершен некорректно;
  • E - ядро посылает всем процессам, кроме init сигнал SIGTERM;
  • I - отправляет всем процессам, кроме init сигнал SIGKILL;
  • S - ядро проводит синхронизацию файловых систем, все данные из кэша переносятся на жесткий диск;
  • U - перемонтирует все файловые системы в режим только чтение;
  • B - немедленная перезагрузка, без синхронизации, и дополнительных приготовлений.

SysRq можно задействовать и без сочетаний клавиш, записав нужный код операции в файл /proc/sysrq-trigger:

echo b > /proc/sysrq-trigger

Система будет перезагружена как есть, без остановки сервисов и подготовки файловых систем, поэтому не сохраненные данные могут быть потеряны, а файловая система повреждена.

Удаленная перезагрузка Linux

Если у вас есть доступ к серверу по ssh то можно очень просто удаленно перезагрузить linux с помощью одной из выше приведенных команд, например:

Только опять же для этой операции нужно иметь права root на удаленном сервере.

Выводы

Теперь вы знаете как выполняется перезагрузка linux, вы даже знаете что делать когда система зависла и как перезагрузить сервер по ssh. Если у вас остались вопросы, спрашивайте в комментариях!

Читайте также: