Запуск linux загрузчиком windows

Настройка запуска меню загрузчика GRUB при установке Linux с Windows на один компьютер с таблицей разделов GPT

Привет, Хабр! Сегодня мы рассмотрим ситуацию, когда при двойной установке Linux & Windows загрузчик GRUB не стартует, давая возможность выбрать ОС, а автоматически загружается Windows. Немного теории:

GRUB (GRand Unified Bootloader) — программа-загрузчик операционных систем.
GRUB может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS-DOS, OS/2 и другие системы.

Значит с теорией мы немного разобрались (думаю этого будет достаточно), теперь же рассмотрим, какие бывают подводные камни, при установке Dual Boot Windows и Linux на одном компьютере.

Эксперимент производился на рабочей станции со следующими характеристиками:

Base Board Information

  • Manufacturer: Acer
  • Product Name: Aspire XC600

Memory Device

  • Size: 4096 MB
  • Type: DDR3
  • Speed: 1333 MHz
  • Manufacturer: Kingston
  • Rank: 2

HDD

  • product: ST500DM002-1BD14
  • vendor: Seagate
  • physical id: 0.0.0
  • bus info: scsi@0:0.0.0
  • logical name: /dev/sda
  • size: 465GiB (500GB)
  • capabilities: gpt-1.00 partitioned partitioned:gpt

Доказано, что проблем с установкой Debian 8.6 Jessie совместно с Windows 10 не обнаружено. Debian корректно прописывается в автозагрузке, GRUB запускается без ошибок и две ОС также работают нормально.

Но, как показала практика, не со всеми дистрибутивами такое происходит. При установке Ubuntu 16.04.1 вместо Debian на ту же рабочую станцию вылез первый подводный камень — GRUB не стартовал, и Windows 10 автоматом шла на загрузку.

Решение проблемы было найдено спустя недели три-четыре (тогда уже надоело считать, сколько времени убито на решение проблемы). Оно оказалось неожиданным, но в тоже время вся система заработала. Значит, если вы столкнулись с такой же проблемой, приведенная ниже инструкция может вам пригодится и сэкономить кучу времени.

Важно! До начала выполнения инструкции нужно подготовить LiveCD с дистрибутивом Linux Mint — все операции мы будем выполнять на нем (я выбрал этот дистрибутив из-за того, что на него спокойно можно установить Midnight Commander, что сложно сделать на LiveCD с Ubuntu, так мы получаем больше пространства для маневров). Также стоит заметить, что команда из под консоли update-grub вам не поможет, так как она рассчитана на случай, когда GRUB запускается, но не видит другие ОС кроме Линукса. Также рекомендую создавать резервные копии файлов/каталогов, над которыми вы осуществляете хоть малейшие изменения.

    Через терминал, с правами root смонтировать раздел с EFI в папку /mnt. В моем случае, это была команда mount /dev/sda2 /mnt.

Введите команду sudo -s и подтвердите пароль (он пустой по умолчанию) для последующих операций (многие советуют не делать этого, а вводить sudo и команду для выполнения — я поддерживаю это мнение, но инструкция рассчитана на опытных пользователей системы Linux, которые понимаю, что делают все на свой страх и риск).

Запустить Midnight Commander командой mc.

Найти в файловой системе следующий каталог: EFI в папке /mnt.

Переименовать каталог Microsoft во что-нибудь другое, например в Microsoft2.

Создаем новый каталог с именем Microsoft.

Заходим в только что созданный каталог Microsoft и частично создаем внутри его иерархию папок аналогичную старому Microsoft (тому, что переименовали). В моем случае он имел такую структуру папок: /boot/, затем куча папок и файл bootmgfw.efi рядом с ними. Нужно воссоздать структуру папок ровно до этого файла. Т.е. всё, что лежит рядом с ним — не нужно, а всё, что идет до него (т.е. родительские папки, соседние с ними тоже не нужны) воссоздаем в нашей новой папке Microsoft. В моем случае понадобилось создать только папку /boot, итоговый путь до нового каталога вышел таким: /EFI/Microsoft/boot. Можно просто скопировать все папки и файлы — проверено, это работает и можно не создавать все вручную.

Находим в каталоге из шага 6 папку с именем нашего дистрибутива Линукса, в нашем случае это Ubuntu. Копируем (оригиналы файлов и папку ubuntu на всякий случай оставляем, не помешают) все файлы из данной в папки в итоговый каталог, созданный на предыдущем шаге: /EFI/Microsoft/boot.

Читайте также:  Журнал загрузки windows 10 файл

В получившейся файловой системе находим файл grubx.efi или grubx64.efi (будет только один из них: в зависимости от разрядности установленного Линукса). Переименовываем его в bootmgfw.efi.

  • Находим файл /boot/grub/grub.cfg в файловой системе установленного Линукса. Открываем его для редактирования. Внутри него находим слово «Microsoft» в контексте строки, начинающейся с «chainloader» и заменяем это слово (должно быть только одно вхождение и именно в строке с «chainloader», так что не ошибетесь) на название каталога, в который мы переименовали Microsoft (т.е. на Microsoft2 в нашем примере). Сохраняем изменения в файле.
  • Также, в этом файле вы можете поменять названия в списке, который выводит GRUB. Например, вместо openSUSE Leap 42.2 27.01 в части кода:

    Написать openSUSE The best choice!:):

    Хоть мелочь, а приятно! Остальное в коде советую не трогать.

    Если трудно разобраться с управлением Midnight Commander (в этом нет ничего страшного, у меня тоже в первый раз были проблемы с этой программой), все операции можно выполнить в файловом менеджере Nautilus (или в другом, не суть важно), но изначально запустив его под правами пользователя root.

    После этого идем на перезагрузку и радуемся результату. Но, как оказывается, такая проблема есть и у дистрибутива OpenSUSE Leap 42.2. Как показала практика, если на компьютере установлен дистрибутив OpenSUSE с Windows 10, то приведенная выше инструкция не поможет. Точнее, она поможет, но только ее нужно дополнить. После выполнения основной части выполняем следующие шаги:

    1. После выполнения всех операций заходим в папку /EFI/opensuse/x86_64-efi/ (название итоговой папки x86_64-efi может быть другим в зависимости от архитектуры ПК)
    2. Копируем файл grub.efi (если у вас включена опция Secure Boot, там будет еще файл shim.efi, тогда советую скопировать их вместе)
    3. Заходим в папку /EFI/Boot и удаляем все файлы, которые там есть (при обновлении загрузчика они снова появятся, но в этом нет ничего страшного)
    4. Вставляем файл (или файлы), которые мы скопировали и спокойно идем на перезагрузку.
      Вот и вся инструкция. Думаю, кому-то пригодится…

    P.S. Если же у вас все хорошо, GRUB с OpenSUSE запускается, но не видит Windows, радуйтесь — проблема решается всего одной командной: grub2-mkconfig -o /boot/grub2/grub.cfg, а если у вас стоит Ubuntu, нужно выполнить просто update-grub.

    Для тех же, кого заинтересовала данная тема, рекомендую прочитать статью: «Начальный загрузчик GRUB 2 — полное руководство».

    Источник

    Загрузка Linux с VHD на компьютере с UEFI

    В статье о возможности загружать Linux с VHD был предложен способ загружать Linux на машине с Windows без необходимости разбивать диск на разделы. Но было одно существенное ограничение: рассматривался только вариант загрузки BIOS, т.е. legacy-загрузки. Сейчас появляется всё больше устройств без поддержки режима legacy (например, многие ноутбуки, выпущенные в 2020 году). Поэтому в этой статье будет рассмотрена загрузка Linux с VHD на компьютерах с UEFI.

    В чём отличия UEFI от BIOS, в интернете описано достаточно подробно, можно посмотреть, например, в этой статье. Для нас наиболее важным будет необходимость использовать разметку GPT для загрузочного диска и при создании разделов на VHD. Эксперименты проводились при отключенном Secure Boot. Не буду подробно останавливаться на моментах, описанных в предыдущей части. Как и ранее, предполагается, что читатель имеет представление о работе с консолью в Windows и Linux, умеет работать со стандартными системными утилитами, с ПО для виртуализации и т.п.

    Предварительно отмечу еще ряд моментов. Можно было бы рассмотреть загрузку системы с внутреннего жесткого диска компьютера, но мы немного усложним задачу и будем загружать систему со съемного USB-диска, на котором будет располагаться VHD-файл. Все действия применимы и для внутреннего жесткого диска, а некоторые особенности будут отмечены в отдельном разделе.

    Разработчики grub4dos недавно выпустили версию своего загрузчика для UEFI. При использовании версии grub4dos-for_UEFI-2021-02-10.7z на виртуальной машине у меня не возникло особых проблем при загрузке Linux с VHD, но на реальном железе при работе с тем же самым образом VHD была получена ошибка: Error 24: Attempt to access block outside of partition. С учетом простоты, с которой UEFI позволяет заменить загрузчик (простая замена файла), было решено воспользоваться загрузчиком grub2 из дистрибутива Debian debian-10.8.0-amd64-netinst.iso.

    Установка Linux на VHD

    Есть два ключевых отличия от варианта для BIOS:

    1) в настройках VirtualBox необходимо установить опцию «Enable EFI»;

    2) при установке Debian диск был разбит на два раздела: ESP (EFI system partition) размером

    Читайте также:  Сделать шрифты как mac os

    100 Мб, отформатированный в FAT32, и EXT4, занимающий всё оставшееся место.

    Возможны и другие варианты разбиения. Раздел ESP при желании можно вынести за пределы VHD (он нам нужен только для загрузки на виртуальной машине), но все дальнейшие настройки сделаны исходя из того, что на VHD будет два раздела.

    Подготовка Linux к загрузке с VHD

    Скрипт из предыдущей статьи нам подходит для загрузки на локальном компьютере, где состав дисков меняется редко и заранее известно, на каком диске хранится VHD-файл. Но мы себе поставили новую цель: иметь возможность загружаться с USB-носителя на любом компьютере с любой конфигурацией жестких дисков. Загрузчики grub4dos и grub2 умеют искать файлы на доступных разделах и работать с UUID разделов. Мы этим воспользуемся при создании конфигурационного файла загрузчика, а пока добавим обработку UUID в скрипт loop_boot_vhd.

    В скрипт добавлено считывание нового параметра loop_dev_uuid . В нём ожидается UUID раздела, на котором находится VHD-файл (путь к нему передается, как и раньше, в параметре loop_file_path ). Если задан loop_dev_uuid , то значение, переданное в loop_dev_path , игнорируется и заменяется на найденный по UUID путь к устройству. Кроме того, если диск подключен по USB, то он может определяться в системе с задержкой. Поэтому добавлено ожидание (до 10 секунд), во время которого выполняется ежесекундная проверка, появилось нужное устройство или нет. Мы ищем раздел по UUID с помощью утилиты findfs. Она не входит в образ initramfs, для её добавления необходимо создать скрипт /etc/initramfs-tools/hooks/copyfindfs (не забывайте делать скрипты исполняемыми).

    Скрипт loop_boot_vhd необходимо расположить, как и ранее, в /etc/initramfs-tools/scripts/local-top/. После чего пересобрать initramfs, и VHD-образ можно считать готовым.

    Настройка grub.cfg

    В GRUB2 можно получить UUID раздела с помощью модуля probe, поэтому он должен быть в сборке. За основу была взята сборка GRUB2 с установочного диска Debian, для загрузки нам понадобятся следующие файлы:

    Их необходимо скопировать на EFI-раздел USB-диска:

    Далее необходимо создать конфигурационный файл \EFI\debian\grub.cfg.

    В cfg-файле всё достаточно очевидно, только обращу внимание, что VHD-файл имеет название debefi.vhd, и система будет искать его в корне всех найденных разделов. Для исключения ошибок название файла необходимо сделать уникальным для загружаемой системы. Ну и «gpt2» используется потому, что Linux установлен на втором разделе внутри VHD.

    Особенности настройки параллельно с Windows bootloader

    Disclaimer: дальнейшие действия могут привести к невозможности загрузить компьютер штатными средствами, все действия вы выполняете на свой страх и риск. Перед экспериментом проверьте, контролирует ли установленное антивирусное ПО целостность загрузчика. И не забывайте о возможных побочных эффектах.

    Я опишу один из вариантов реализации выбора между загрузкой Windows и Linux: с помощью замены загрузчика на GRUB2. Загрузка EFI-систем по умолчанию начинается с файла \EFI\Boot\BOOTX64.EFI, в Windows 10 используется \EFI\Microsoft\Boot\bootmgfw.efi. Заменить загрузчик Microsoft на GRUB2 можно просто заменив файл. Необходимо быть внимательным, если сомневаетесь в получении результата с первого раза, то лучше сначала поэкспериментируйте на виртуальной машине. С помощью diskpart.exe надо подключить EFI-раздел Windows, на котором необходимо:

    переименовать/перенести файл \EFI\Microsoft\Boot\bootmgfw.efi в \EFI\boot\ms.efi;

    файл bootx64.efi из ISO-образа Debian переименовать в \EFI\Microsoft\Boot\bootmgfw.efi;

    grubx64.efi разместить в \EFI\Microsoft\Boot\grubx64.efi;

    probe.mod разместить в \EFI\debian\x86_64-efi\probe.mod;

    ранее созданный grub.cfg скопировать в \EFI\debian\grub.cfg и добавить пункт для передачи управления загрузчику Microsoft:

    Теперь при загрузке сначала будет появляться меню GRUB2 с выбором загрузки Windows («ms») или Linux («vhdUUID»).

    Если на каком-то из этапов загрузки возникают ошибки, то (как и с grub4dos) необходимо попытаться вводить команды вручную и смотреть, какие ошибки выдает система, как и куда монтируются разделы, доступны ли все необходимые файлы и т.п.

    Источник

    Установка Linux совместно с Windows 10 через Мультизагрузку

    Обновл. 18 Апр 2021 |

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

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

    Шаг №1: Подготовка диска в Windows

    Первое с чего начнем — это отщипнем от основного диска некоторое количество памяти, необходимой для новой ОС. Для этого откройте панель поиска Windows (значок в форме увеличительного стекла в левом нижнем углу экрана), в строке поиска введите DISKMGMT.MSC и нажмите Enter :

    Щелкните правой кнопкой мыши (ПКМ) на главном диске и выберите пункт «Сжать том» . Если у вас есть несколько дисков, обязательно выберите тот, который помечен как «Основной» (обычно он обозначается как диск C ):

    Читайте также:  Popup window in windows application

    Затем выберите, насколько вы хотите уменьшить свой диск. Рекомендуется выделить для Linux не менее 20 ГБ (20 000 МБ).

    Затем нажмите кнопку «Сжать» .

    После того, как закончится процесс выделения места для установки Linux, вам нужно будет записать дистрибутив Linux на USB-накопитель или внешний диск объемом от 4 ГБ. Далее показано, как это сделать.

    Шаг №2: Создание загрузочного USB-диска с Linux

    Для создания загрузочного USB-диска с дистрибутивом Linux:

    Скачайте с любого сайта ISO-образ любого понравившегося вам дистрибутива Linux (Ubuntu, Debian, Linux Mint или др.). Для этой статьи я буду использовать дистрибутив Linux Mint.

    Вставьте USB-накопитель в компьютер. Возможно, вас попросят отформатировать диск. Форматирование приведет к удалению всех данных, хранящихся на вашем накопителе, поэтому перед началом работы обязательно сделайте резервную копию ваших файлов.

    Скачайте утилиту Rufus, которая помогает создавать загрузочные USB-диски.

    Откройте Rufus и выберите из списка устройств свой USB-накопитель. Если вы не знаете, какой диск выбрать, извлеките все остальные диски, пока у вас не останется только ваш накопитель.

    В разделе «Метод загрузки» нажмите кнопку «Выбрать» и выберите ISO-образ Linux-дистрибутива, который вы ранее загрузили.

    В пункте «Новая метка тома» нужно указать релевантное название.

    Затем нажмите кнопку «Старт» .


    Если при этом у вас выскочит всплывающее окно с просьбой выбрать режим, который вы хотите использовать для записи образа, то укажите «Записать в ISO-образ режиме (Рекомендуется)» и нажмите «ОК» :

    Дождитесь, пока Rufus запишет образ на ваш накопитель. Это может занять некоторое время, так что будьте терпеливы.

    Предупреждение: Данный процесс приведет к стиранию всех данных на вашем USB-накопителе, поэтому обязательно сделайте резервную копию всех важных файлов на флешке.

    Шаг №3: Установка Linux с загрузочного USB-диска

    Теперь, когда у вас есть дистрибутив Linux, записанный на USB-накопитель, можно переходить к этапу установки.

    Для этого вставьте загрузочный USB-накопитель с Linux в компьютер > нажмите кнопку «Пуск» > затем, удерживая нажатой клавишу Shift , нажмите на «Перезагрузка» .

    Эти действия переведут вас в Среду Восстановления Windows (Windows Recovery Environment).

    Далее вам нужно будет выбрать пункт «Использовать устройство» :

    Найдите свое устройство. Если вы не видите свой диск, то выберите сначала пункт «EFI USB Device» , а затем (на следующем экране) выберите свой диск:

    Теперь ваш компьютер произведет загрузку Linux с подготовленного USB-диска.

    Примечание: Если же при этом у вас все равно происходит загрузка Windows, то: либо возникла проблема с вашим диском, либо вам, возможно, придется настроить очередность загрузки устройств через BIOS/UEFI.

    В появившемся окне выберите пункт «Start Linux Mint» . Некоторые дистрибутивы позволяют вам опробовать ОС перед её непосредственной установкой на диск:

    После того, как Linux Mint загрузится, найдите на рабочем столе иконку с надписью «Install Linux Mint» и щелкните по ней:

    Запустится мастер установки. Следуйте его подсказкам до этапа, идущим сразу за этапом установки кодеков:

    #2 — «Русская» и «Продолжить»

    #3 — галочка возле «Установка мультимедиа кодеков» и «Продолжить»

    Так как мы хотим сделать возможной загрузку с одного диска как Windows 10, так и Linux Mint, то выбираем пункт «Другой вариант» :

    Теперь создаем раздел, на который будет производиться установка Linux Mint, используя для этого ранее выделенное свободное место:

    Важный момент — установка загрузчика. Для того, чтобы иметь возможность загружать обе системы, необходимо установить загрузчик в корень самого диска (а не раздела!), на котором расположены Windows и будущий раздел с Linux:

    У меня таким диском является /dev/nvme0n1, содержащий три ранее созданных (автоматически) раздела с компонентами Windows (nvme0n1p1, nvme0n1p2, nvme0n1p3) и свободное пространство. У вас же диск может называться /dev/sdb или /dev/sdc и т.д.

    Примечание: На вышеприведенном скриншоте также можно заметить устройство /dev/sda — это USB-накопитель, с которого в данный момент происходит установка Linux Mint.

    Затем вам нужно будет указать свой часовой пояс:

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

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

    #1 — дождитесь завершения установки

    #2 — перезагрузите систему

    Если вы всё сделали правильно, то должны будете увидеть стартовое окно загрузчика GRUB, где сможете выбрать систему для запуска — Linux Mint 20.1 Cinnamon или Windows Boot Manager (загрузчик Windows 10):

    Заключение

    Теперь при запуске компьютера вы сможете выбирать, какую систему хотите использовать — Linux или Windows. На следующем уроке мы рассмотрим установку Linux совместно с Windows, используя технологию WSL.

    Поделиться в социальных сетях:

    Источник

    Оцените статью