Перезагружаемся в другую ОС без рукоприкладства

в 23:53, , рубрики: grub, linux, windows, операционные системы, метки: , ,

image
Я постоянно работаю в линуксе. Но бывают случаи, когда нужно перезагрузиться в винду. Просто так это сделать трудно, нужно подождать когда выскочит Grub и выбрать нужный пункт. Поэтому, сходить поесть, посрать или покурить во время ребута вам не получится, сидите перед монитором. Попробуем облегчить страдания и сделать хоть что-нибудь.

Чего делать то?

Ну, первая мысль — менять флаг выбора пункта по умолчанию в самом grub. Однако, grub у нас на разделе с линем, а значит винда не сможет изменить конфиг файл. Ладно, вынесем grub на отдельный раздел с fat32. Я выделил 150 МБ, однако и 100 я думаю хватить должно.

Всё, теперь ставим туда grub. Я делал это из линукса, изобретать велосипед здесь смысла нету.
У меня раздел /dev/sda6, меняйте на свой.

sudo mkdir /mnt/GRUB
sudo mount /dev/sda6 /mnt/GRUB
sudo grub-install --force --no-floppy --root-directory=/mnt/GRUB /dev/sda6 

Итак, grub установили, давайте создадим grub.cfg (я провтыкал, и не запомнил, может он по дефолту уже при установке создается).

sudo grub-mkconfig -o /mnt/GRUB/boot/grub/grub.cfg

Окей, не хватает узнать порядок пунктов в меню. Выполняем и считаем:

grep menuentry /mnt/GRUB/boot/grub/grub.cfg

Отсчет идет с 0, кстати. Я выбрал два пункта, один с linux (0), второй с windows (4)

Linux

Пошли дальше. Разберемся с ребутом линукса. Подойдет такой bash скрипт

#!/bin/bash
# Путь к разделу с grub
disk=/dev/sda6
# Пункт с linux
linmenu=0
# Пункт с windows
winmenu=4

mount $disk /mnt/GRUB
sed "s/set default="${linmenu}"/set default="${winmenu}"/g" -i /mnt/GRUB/boot/grub/grub.cfg
reboot

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

Для перезапуска я создал кнопку gksu sh ./путь-к-скрипту
А то кто это вам разрешит монтировать и ребутить без рут прав.
В данном скрипте просто заменяется set default на нужное.

Уже можно даже попробовать перезагрузится в винду через скрипт.

Windows

В винде, не мудрствуя лукаво, я поставил sed, только перекинул файлы из bin в system32.

Получился такой .bat файл:

:: Путь к grub.cfg
set grubfile=e:bootgrubgrub.cfg
:: Пункт с linux
set linmenu=0
:: Пункт с windows
set winmenu=4
sed -e "s/set default="%winmenu%"/set default="%linmenu%"/g" %grubfile% > %grubfile%.tmp
del %grubfile%
ren %grubfile%.tmp grub.cfg
shutdown -f -t 0 -r

Меняйте пути и пункты.

Вместо выводов

Да и всё, вроде. Имеем, кнопку на линуксе, которая перезагружает комп в винду автоматом и наоборот. Можно за время выключения одной и включения другой ОС сходить нормально посрать.

Грамотные люди меня поправят, где я не прав и где можно чего изменить. Умею как могу.
Экспериментируйте.

Автор: Squier

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js