Я буду использовать термин BIOS ниже, обращаясь к концепции , которые являются одинаковыми для обоих новых систем UEFI и традиционных систем BIOS, так как в то время как это UEFI ориентированный вопрос, говоря о насмешках «BIOS» лучше, например, GRUB документации и "BIOS / UEFI" слишком неуклюжий. GRUB (на самом деле GRUB 2 - это часто используется неоднозначно) - это загрузчик, устанавливаемый linux и используемый для двойной загрузки Windows.
Сначала несколько слов о порядке дисков и порядке загрузки. Порядок дисков - это порядок физического подключения дисков к материнской плате (первый диск, второй диск и т. Д.); эта информация сообщается в BIOS. Порядок загрузкиотносится к последовательности, в которой BIOS проверяет загрузочный диск. Это не обязательно совпадает с порядком дисков, и обычно настраивается через экран настройки BIOS. Порядок дисков не должен настраиваться или зависеть от порядка загрузки, так как это было бы очень недружелюбно для ОС (но теоретически тупой BIOS мог). Кроме того, если вы отключите первый диск, второй диск, скорее всего, станет первым. Мы собираемся использовать UUID при настройке загрузчика, чтобы попытаться избежать таких проблем (современные установщики Linux также делают это).
Идеальный способ получить то, что вам нужно, это установить linux на второй диск с точки зрения порядка дисков, а затем сначала выбрать его с точки зрения порядка загрузки, используя настройку UEFI. Дополнительным преимуществом этого является то, что вы можете затем использовать порядок загрузки BIOS / UEFI, чтобы выбрать диск Windows и обойти grub, если хотите. Причина, по которой я рекомендую Linux на втором диске, заключается в том, что GRUB должен «загружать по цепочке» собственный загрузчик Windows, а загрузчик Windows всегда предполагает, что он находится на первом диске. Однако есть способ обмануть, если вы предпочитаете или нуждаетесь в этом, наоборот.
Надеемся, что вы можете просто использовать live CD или что-то еще и сделать это с помощью установщика GUI. Однако не все установщики одинаковы, и если это испортилось, и у вас остались такие проблемы, как:
Я установил Linux на первый диск, и теперь я не могу загрузить Windows, или
Я установил Linux на второй диск, но использовал первый диск для загрузчика, и теперь я ничего не могу загрузить!
Тогда продолжайте читать. Во втором случае вы должны сначала попытаться переустановить linux на второй диск, и на этот раз убедиться, что именно туда идет загрузчик. Самый простой и надежный способ сделать это - временно вынуть диск Windows из машины, поскольку мы предполагаем, что на нем ничего не установлено, независимо от порядка дисков.
После того, как вы установили linux и убедились, что он может загружаться, подключите диск Windows обратно (если вы его удалили - и помните, что в идеале мы хотим, чтобы он был первым с точки зрения порядка дисков, а второй - первым с точки зрения порядок загрузки) и перейдите к следующему шагу.
Доступ к конфигурации GRUB
Загрузите Linux, откройте терминал и
> su root
Вам будет предложено ввести пароль root. С этого момента вы являетесь суперпользователем в этом терминале (проверить, попробовать whoami
), поэтому не делайте глупостей. Тем не менее, вы по-прежнему обычный пользователь в графическом интерфейсе, и, поскольку мы будем редактировать текстовый файл, если вы предпочитаете графический редактор, нам придется временно изменить владельца этого файла и каталог, в котором он находится:
> chown -R yourusername /etc/grub.d/
Если вы получили «Операция не разрешена», вы не su
правильно. Если вы получили chown: invalid user: ‘yourusername’
, вы приняли последнюю команду слишком буквально.
Теперь вы можете перейти к /etc/grub.d
своему браузеру и найти файл с именем 40_custom
. Это должно выглядеть так:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
Если вы не можете его найти, в корневом терминале введите следующие команды:
> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom
Откройте его в текстовом редакторе, скопируйте и вставьте часть выше (начиная с / #!/bin/sh
) и перейдите к следующему шагу.
Добавление опции загрузки Windows
Скопируйте и вставьте это в текстовом редакторе в конце файла:
menuentry "MS Windows" {
insmod part_gpt
insmod search_fs_uuid
insmod ntfs
insmod chain
}
Это список модулей, которые GRUB должен будет выполнить ( ntfs
может быть излишним, но не должен причинять вреда). Обратите внимание, что это неполная запись - нам нужно добавить несколько важных команд.
Поиск загрузчика второго этапа Windows
Ваша установка Linux, вероятно, автоматически смонтировала раздел Windows, и вы сможете найти его в файловом браузере. Если нет, найдите способ сделать это так (если вы не уверены, как, задайте вопрос на этом сайте). Как только это будет сделано, нам нужно знать точку монтирования - это должно быть очевидно в файловом браузере, например /media/ASDF23SF23/
. Чтобы сохранить типизацию, мы поместим это в переменную оболочки:
win="/whatever/the/path/is"
По обе стороны от знака равенства не должно быть пробелов. Не включайте никаких элементов пути Windows здесь. Это должно указывать на папку верхнего уровня в разделе Windows. Сейчас:
cd $win
find . -name bootmgfw.efi
Это может занять несколько минут, если у вас большой раздел, но, скорее всего, первое, что он выплевывает, - это то, что мы ищем; могут быть дополнительные ссылки в файловой системе, содержащей длинные строки goobledygook - это не так. Используйте, Ctrl-c
чтобы остановить поиск, когда вы увидите что-то короткое и простое, например ./Windows/Boot/EFI/bootmgfw.efi
или ./EFI/HP/boot/bootmgfw.efi
.
За исключением .
начала, запомните этот путь на потом; Вы можете скопировать его в свой текстовый редактор в пустую строку внизу, так как мы будем использовать его там. Если вы хотите вернуться к предыдущему каталогу сейчас, используйте cd -
, хотя это не имеет значения, где вы находитесь в оболочке, начиная с этого момента.
Установка правильных параметров
GRUB должен быть в состоянии найти и передать процесс загрузки загрузчику Windows второго уровня. У нас уже есть путь к разделу Windows, но нам также нужны некоторые параметры, чтобы сообщить GRUB, где находится это разделение. В вашей системе должен быть установлен инструмент под названием grub-probe
или (например, на Fedora) grub2-probe
. Введите, grub
а затем нажмите Tabдва или три раза; Вы должны увидеть список, включающий один или другой.
> grub-probe --target=hints_string $win
Вы должны увидеть строку, такую как:
--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1
Вернитесь в текстовый редактор с конфигурацией GRUB и добавьте после всех insmod
команд строку (но до закрывающей фигурной скобки), чтобы она выглядела следующим образом:
insmod chain
search --fs-uuid --set=root [the complete "hint bios" string]
}
Не прерывайте эту строку и не позволяйте текстовому редактору делать это. Он может отображаться на дисплее - простой способ определить разницу - включить нумерацию строк. Следующий:
> grub-probe --target=fs_uuid $win
Это должно вернуть более короткую строку букв, цифр и возможных тире, таких как «123A456B789X6X» или «b942fb5c-2573-4222-acc8-bbb883f19043». Добавьте это в конец search --fs-uuid
строки после строки bios подсказки, разделив ее пробелом.
Далее, если (и только если) Windows находится на втором диске с точки зрения порядка дисков , добавьте строку после search --fs-uuid
строки:
drivemap -s hd0 hd1
Это «хитрость», упомянутая ранее. Обратите внимание, что это не гарантированно работает, но это не мешает попробовать.
Наконец, последняя строка должна быть:
chainloader (${root})[the Windows path to the bootloader]
}
Просто чтобы прояснить, например:
chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi
Вот и все. Сохраните файл и проверьте в файловом браузере, чтобы убедиться, что он действительно был сохранен и выглядит так, как должен.
Добавьте опцию нового меню в GRUB
Это делается с помощью инструмента под названием grub-mkconfig
или grub2-mkconfig
; он будет в том списке, который вы нашли Tabранее. Вы также можете вызвать команду update-grub
. Чтобы проверить это, просто введите его в корневой терминал. Если вы получаете «команда не найдена», вам нужно использовать grub-mkconfig
напрямую. Если нет (включая получение более длинной ошибки), вы только что установили конфигурацию и можете немного скользить вниз.
Для grub-mkconfig
непосредственного использования нам сначала нужно найти grub.cfg
:
> find /boot -name grub.cfg
Это, вероятно, будет /boot/grub/grub.cfg
или /boot/grub2/grub.cfg
.
> grub-mkconfig -o /boot/grub/grub.cfg
update-grub
автоматически просканирует конфигурацию на наличие ошибок. grub-mkconfig
не будет, но это важно сделать, потому что теперь с ними гораздо легче иметь дело, чем при попытке загрузить компьютер. Для этого используйте grub-script-check
(или grub2-script-check
):
> grub-script-check /boot/grub/grub.cfg
Если это (или update-grub
) выдает ошибку, указывающую номер строки, это номер строки в grub.cfg, но вам нужно исправить соответствующую часть в /etc/grub.d/40_custom
(файл в вашем текстовом редакторе). Возможно, вам нужно быть пользователем root, чтобы посмотреть на первый файл, поэтому попробуйте less /boot/grub/grub.cfg
в терминале, нажмите :и введите номер строки. Вы должны увидеть ваш пункт меню. Найдите опечатку, исправьте ее в текстовом редакторе и снова запустите update-grub
или grub-mkconfig
.
Когда вы закончите, вы можете закрыть текстовый редактор и набрать exit
в терминале, чтобы выйти из режима суперпользователя.
Перезагрузка!
Когда вы попадете в меню grub, быстро прокрутите вниз (до истечения времени ожидания, обычно 5 секунд) до опции «Windows» и протестируйте ее. Если вы получите сообщение об ошибке от grub, значит что-то не так с конфигурацией. Если вы получаете сообщение об ошибке из Windows , эта проблема возникает между вами и Microsoft. Не беспокойтесь, однако, ваш диск Windows не был изменен, и вы сможете загрузить его непосредственно, поставив его первым (с точки зрения порядка загрузки) через настройку BIOS.
Когда вы вернетесь в linux снова, верните владельца /etc/grub.d
каталога и его содержимого в исходное состояние:
sudo chmod 755 /etc/grub.d/40_custom
Ссылки
chainload $({root})
должно бытьchainload (${root})
(я не могу отредактировать ее, потому что она слишком мала)./etc/grub.d
а это не добавляется при создании конфигурации, происходит нечто странное. Если вы запускаетеgrub-mkconfig
без-o
него, он выплевывает до стандартного уровня, что может помочь подтвердить или опровергнуть, что ваши добавления обрабатываются