Двойные загрузочные окна на втором жестком диске, система UEFI / GPT

15

Я хотел бы установить Linux, но я не хочу рисковать моей текущей установкой Windows, поскольку я слышал много ужасных историй. К счастью, у меня есть дополнительный жесткий диск. Могу ли я установить Linux и установить двойную загрузку Windows без необходимости изменения диска Windows?

Кроме того, у меня есть UEFI "BIOS" и Windows-диск в формате GPT.

лютик золотистый
источник

Ответы:

18

Я буду использовать термин 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. Однако не все установщики одинаковы, и если это испортилось, и у вас остались такие проблемы, как:

  1. Я установил Linux на первый диск, и теперь я не могу загрузить Windows, или

  2. Я установил 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

Ссылки

лютик золотистый
источник
2
Технически правильный термин, который вы ищете, который также не является неуклюжим, это прошивка , которая может представлять собой либо BIOS, либо UEFI.
Milind R
К сожалению, прошивка также имеет гораздо более общий смысл в том смысле, что она относится к любому программному обеспечению, встроенному в аппаратное обеспечение.
Kylotan
на моем рабочем столе «цепочка» не найдена в качестве команды при загрузке, но это цепной загрузчик в файле 40_custom, который мне нужно написать. дайте мне знать, если это нормально
FlogFR
Очень хорошо! Однако, когда я пытаюсь это сделать, моя установка Windows 8 не будет отображаться как запись в grub2. Я исправил все синтаксические ошибки и файл grub.cfg создается без ошибок. Также обратите внимание, что при первом упоминании о цепной загрузке возникает синтаксическая ошибка: chainload $({root})должно быть chainload (${root})(я не могу отредактировать ее, потому что она слишком мала).
Собек
@sobek Спасибо за это - исправлено. Если вы добавили что-то в файл, /etc/grub.dа это не добавляется при создании конфигурации, происходит нечто странное. Если вы запускаете grub-mkconfigбез -oнего, он выплевывает до стандартного уровня, что может помочь подтвердить или опровергнуть, что ваши добавления обрабатываются
Златовласка