Установка Linux на ноутбуки c UEFI, производители которых продали душу Microsoft (UPD 05.01.16)
Данная статья должна была быть написана еще полгода назад, но всё никак.
Речь пойдёт о том, как установить ОС Linux второй ОС на новые ноутбуки с UEFI и предустановленной Windows. При условии, что обычная установка не дает нужного результата, а именно — после корректной установки Линукса «рядом» с Виндой всё равно загружается только ОС Windows.
Для начала, как уже стало традицией, поставим все точки над Ё.
Проблема.
Имеем ноутбук (возможно и десктоп, но автор имел дело лишь с ноутбуком), на котором используется UEFI и имеется предустановленная ОС Windows (скорей всего 8.1, хотя ныне уже 10). Хотим установить на этот самый ноутбук ОС Linux (речь пойдет об Linux Mint, но для остальных ситуация должна быть аналогична) второй операционной системой (с двойной загрузкой: возможностью использовать и Windows и Linux на выбор пользователя). Устанавливаем Linux обычным способом* (про который я тоже когда-нибудь напишу, но в Интернетах подобных инструкций полно), перезагружаемся и обнаруживаем собственно нашу проблему:
всегда загружается упрямая Винда, никакого Grub’а, ни намека на какую-то там двойную загрузку.
*На самом деле существует как минимум две важные особенности для установки Linux на компьютеры с UEFI. 1) Перед установкой в этом самом UEFI необходимо отключить опцию безопасной загрузки — Security Boot Control (или что-то похожее, зависит от версии UEFI). Иначе носитель информации с дистрибутивом Linux почти наверняка не сможет запустится. 2) Загрузчик (Grub) должен быть установлен на EFI\ESP раздел, обычно имеющий название sda2, а не просто sda, как-то было раньше, в эпоху BIOS. Данная опция регулируется в процессе установки Линукса, обычно где-то в районе шага разметки диска.
Быстрое решения для счастливчиков.
Если вам повезет больше, чем автору статьи, то данную проблему можно решить за минуту.
Для начала попробуйте зайти в UEFI (кнопка F2 или DEL ДО старта Винды). Там найдите раздел с указанием списка загрузки. В нем должны быть элементы: как минимум жесткий диск и Windows Loader. Последний обычно имеет наивысший приоритет загрузки. Просмотрите остальные элементы в данном списке, если там есть что-то вроде Ubuntu Loader (или что-то иное, в зависимости от устанавливаемого вами дистрибутива Linux), то улыбаемся и машем выставляем его самым приоритетным и перезагружаемся. После перезагрузки должен появится долгожданный интерфейс Grub с выбором ОС для загрузки.
Если никаких других «лоадеров» нет, то вам не повезло как и мне: ваш ноутбук продал душу корпорации Microsoft и не желает видеть другие загрузчики. Или, что куда менее вероятно, загрузчик Grub установлен неверно (читаем примечания к предыдущему разделу и делаем всё по фен-шую).
Мат.часть и необходимые знания.
Про то, что такое UEFI и BIOS, зачем они нужны. Про разницу между MBR и GPT, а также про их смысл довольно подробно описано вот тут. Повторятся не будем. Данной информации вполне должно хватить для понимания данной статьи.
Также от читателя потребуются базовые знания установки ОС Linux. Читаем где-то там же.
Еще нужны будут базовые навыки владения данной ОС, в частности управлением файловой системой с помощью Midnight Commander (MC) (обзор основных возможностей и команд) и самые азы работы в консоли Linux (для Ubuntu-образных линуксов хорошая инструкция для новичков вот тут).
Понадобится установить MC (в том же Мятном Линуксе его по умолчанию нет), запустить его от имени рута (администратора), внести изменений в текстовый файл и выполнить еще пару несложных команд в консоли.
Если всё это вам по силам и без вышеприведенных инструкций — я рад за вас, можем двигаться дальше. Инструкции эти приведены на всякий случай, дабы избежать вопросов, в них освященных.
Решение.
Учтите, что весь алгоритм построен для ОС Linux Mint. В других Линуксах (не основанных на Ubuntu или Debian) названия каталогов и команды могут несколько отличаться.
- Установить Линукс рядом с Windows, используя для этого соответствующую опцию в одном из первых шагов установки или (если данная опция не появилась) разметив жесткий диск должным образом (заслуживает отдельной статьи, на убунту-вики про это тоже уже написано).
- НЕ ПЕРЕЗАГРУЖАТЬ компьютер после установки. Если перезагрузили — ничего страшного, просто снова придется загрузиться с live-cd\usb\dvd (ведь линукс-то у вас не запускается?).
- На всякий случай в консоли выполнить команду sudo update-grub (введя пустой пароль при запросе).
- Открыть консоль\терминал или иными средствами (например, с помощью менеджера программ в Ubuntu\Linux Mint) установить mc. В консоли (для систем с apt) это делается следующим образом: sudo apt-get install mc(после чего потребуется ввод пароля, напомню, в лайв-режиме пароля нет, просто жмем Enter и соглашаемся на установку).
- Запустить mc от имени рута: sudo mc(и снова пустой пароль, если спросит).
- Найти в файловой системе следующий каталог: /boot/efi/EFI.
- Переименовать каталог (комбинация ctrl+F6 в mc) Microsoft во что-нибудь другое, например в Microsoft2.
- Создаем новый каталог с именем Microsoft (клавиша F7).
- Заходим в только что созданный каталог Microsoft и частично (см.далее) создаем внутри его иерархию папок аналогичную старому Microsoft (тому, что переименовали). В моем случае он имел такую структуру папок: /boot/, затем куча папок и файл bootmgfw.efi рядом с ними. Нужно воссоздать структуру папок ровно до этого файла. Т.е. всё, что лежит рядом с ним — не нужно, а всё, что идет до него (т.е. родительские папки, соседние с ними тоже не нужны) воссоздаем в нашей новой папке Microsoft. В моем случае понадобилось создать только папку boot, итоговый путь до нового каталога вышел таким: /boot/efi/EFI/Microsoft/boot .
- Находим в каталоге из шага 6 папку с именем нашего дистрибутива линукса, в нашем случае это ubuntu. Копируем (оригиналы файлов и папку ubuntu на всякий случай оставляем, не помешают) все файлы из данной в папки в итоговый каталог, созданный на предыдущем шаге (в /boot/efi/EFI/Microsoft/boot).
- В получившейся файловой системе (в созданном на 9-ом шаге каталоге и перемещенных в него на 10-ом шаге файлах) находим файл grubx.efi или grubx64.efi(будет только один из них: в зависимости от разрядности установленного линукса). Переименовываем его в bootmgfw.efi .
- Находим файл /boot/grub/grub.cfg . Открываем его для редактирования (клавиша F4). Внутри него находим (клавиша F7 вызывает форму поиска по тексту) слово «Microsoft» в контексте строки, начинающейся с «chainloader» и заменяем это слово (должно быть только одно вхождение и именно в строке с «chainloader», так что не ошибетесь) на название каталога, в который мы переименовали Microsoft на 7-ом шаге (т.е. на Microsoft2 в нашем примере). Сохраняем изменения в файле (клавиша F2 — сохранить).
Вот и всё. Выглядит очень сложно, но если выполнять всё точно по шагам (которые расписаны максимально подробно!), то всё получится без каких-либо проблем. И, после перезагрузки и последующей загрузки уже с жесткого диска (а не с лайв-носителя) мы увидим вожделенный экран с меню выбора ОС. Ура, товарищи!
Что мы только что сделали?
Поясняю. Как видно, производитель вашего (и моего, у меня Acer если что) ноутбука продал душу Мелкософтам, как я уже говорил ранее. А именно, ноутбук на уровне UEFI не желает загружать что-либо отличное от файла /boot/efi/EFI/Microsoft/bootbootmgfw.efi, в котором располагается загрузчик Windows. Такая вот дискриминация!
Подменив файл грабовским, мы тем самым обманули и ноутбук и Майкрософт. Заставили грузить наш любимый Grub, вместо злой и упрямой винды.
Что делать дальше? + Меры предосторожности при обновлениях.
Живите и радуйтесь. Но ровно до тех пор, пока grub не захочет обновиться. Или же, вы не захотите согрешить и обновить свою винду
Сперва об обновлении Grub.
Дело в том, что после обновления Grub запускает команду update-grub, которая в созданной нами иерархии папок не находит загрузчика Windows (по непонятным мне причинам). И, тем самым, после обновления grub и последующей перезагрузки ПК в списке выбора ОС не будет вредной Windows (и поделом ей!) . Решается это путанно, но алгоритм знакомый
- Переименовываете папку Microsoft (в которой сейчас файлы от граба и линукса) во что-нибудь временное, например в MicrosoftLinux.
- Старую добрую папку Microsoft2 (в которой находится загрузчик Windows), переименовываете в просто Microsoft, возвращая ее тем самым в изначальное состояние.
- Выполняете команду sudo update-grub.
- Возвращаете имена папок, придавая им вид из решения. Т.е. MicrosoftLinux переименовываем назад в Microsoft, Microsoft обратно в Microsoft2.
- Повторяем шаг номер 12 из решения и снова радуемся появившейся Windows в списке ОС при загрузке компьютера.
Да, пока что только так. Это дело бы автоматизировать, но пока мне было очень лень. В конце концов grub не так часто обновляется. Да и ручное описание решения лишним никогда не будет, потом пригодится для автоматизации.
Теперь о том, что нужно знать, если вы собрались обновить винду .
Большинство обновлений Windows требует перезагрузки. У меня Windows 8.1 после такой перезагрузки ожидаемо не сумела загрузиться, ибо не нашла своего загрузчика по адресу /boot/EFI/Microsoft (там же у нас теперь линукс живёт). Поэтому, обязательно перед установкой обновлений винды — верните ее загрузчик на место. Т.е. в папку Microsoft в нашем примере. Да, после этого вся проблема вернется, ибо загружаться вновь будет только винда, но ведь второй раз выполнить алгоритм из решения будет уже проще?;)
А иначе никак, если винда после обновлений уйдет в перезагрузку, но загрузчика не найдет — получите вы ошибку с невозможностью дальнейшей загрузки. И после этого, даже если поместить виндовый загрузчик на место — оно всё равно не заведётся. Поможет только восстановление загрузки с диска с вашей ОС Windows. Поэтому данный всегда желательно иметь под рукой (взять оригинальные образы дисков можно где-нибудь на торрентах).
После обновлений выполняем алгоритм из решений и радуемся.
Послесловие.
Да, вышло сложно и путанно. Но я постарался максимально подробно разложить всё по полочкам. Никакие иные решения (а встречаются автоматизированные варианты, которые делают что-то с грабом и прочие вещи) лично мне не помогли. А раз есть один случай, то наверняка найдется и еще один.
Если вы знаете способ решения подобной проблемы куда более простой и быстрый — прошу, пожалуйста, поделитесь. Укажу ссылку (при наличии) и оставлю авторство за вами;)