Как мне установить две независимые установки Ubuntu на один жесткий диск с UEFI?

8

В целях безопасности я хотел бы установить вторичную полностью независимую операционную систему на компьютер с одним жестким диском, используя UEFI. Обе установки должны иметь возможность использовать разные крипто-разделы LUKS в качестве корневого устройства (LVM поверх криптографии) и должны иметь возможность использовать свои собственные ядра.

Двойная загрузка с двумя разными операционными системами не имеет большого значения. Ubuntu и Fedora не будут вмешиваться и могут совместно использовать системный раздел EFI, но две установки Ubuntu будут сражаться друг с другом, потому что они хотят установить оба экземпляра Grub в одном месте EFI.

  • Есть ли способ изменить Ubuntu для установки Grub в другое место, чем /boot/efi/EFI/ubuntuво время установки? Мне нужен постоянный способ, чтобы обновления пакетов и обновления ядра / grub все еще устанавливались по этому пути. Точно так же, как и в Fedora Grub /boot/efi/EFI/fedora. Я не могу найти эту опцию конфигурации в Grub. Если бы я мог, мое загрузочное меню Dell UEFI позволило бы мне выбрать, какую ОС загружать. Возможно, мне не хватает клея между efibootmgr и grub-efi здесь.

  • Как вариант, можно ли использовать одну установку Grub из одной из двух установок Ubuntu и автоматически ли она определять правильные настройки загрузки? Я имею в виду, я знаю os-prober, найдет другой /bootраздел с ядрами, но как он может узнать правильные параметры загрузки для этой ОС (например, том LVM внутри заблокированного крипто тома в качестве корневой файловой системы)? Я могу понять, что это возможно с незашифрованными установками с одним разделом, но он не может сравниться /bootс соответствующей корневой файловой системой, верно? И это совершенно невозможно, если зашифровано. Так что это потребует много ручной настройки файлов конфигурации grub. Мне также не нравится этот вариант конфигурации с одним общим загрузчиком, что делает две операционные системы менее изолированными в некоторой степени.

Между прочим, я в порядке с экспертной установкой на сервере. Также некоторые пользовательские настройки, если мне не нужно повторять шаги для каждого обновления ядра / Grub.

gertvdijk
источник

Ответы:

6

У меня есть два предложения ...

Вариант № 1: Отдельные ESP

В EFI загрузчик находится на системном разделе EFI (ESP). Я поставил слово «the» в кавычки, потому что нет правила, согласно которому вы ограничены одним ESP. Если вы создали два ESP на жестком диске, вы можете использовать один из них для первой установки и второй ESP для второй установки. Это должно работать без проблем, хотя вам придется создавать разделы вручную (используя опцию «Something Else» во время установки), по крайней мере, для второй установки Ubuntu.

Одна из проблем этого подхода заключается в том, что, хотя в спецификации EFI прямо указано, что вы можете создать столько ESP, сколько захотите, некоторые программы могут запутаться из-за этого. Одним из ярких примеров этого является установщик Windows, по крайней мере, через Windows 7 (я не знаю о Windows 8 или более поздней версии); когда установщик Windows 7 видит диск с двумя ESP, он вылетает и делает странные вещи. IIRC, он не завершает свою собственную установку должным образом. Возможно, что инструменты восстановления Windows пострадают от той же проблемы. Если вы не загружаете Windows в этой системе, это не должно иметь большого значения. Если вы находитесьзагружаясь с Windows, вы должны просто знать о проблеме, потому что вы можете легко преодолеть ее, временно изменив код типа не-Windows ESP, если у вас возникнут проблемы. Обратите внимание, что Windows будет нормально загружаться на диск с несколькими ESP; это просто установщик, который душит такие диски.

Другая проблема заключается в том, как вы будете переключаться между двумя дистрибутивами. Возможно, вам придется настроить одну или обе настройки GRUB в вашей установке с помощью такого инструмента, как GRUB Customizer. Другой (но не несовместимый) вариант - использовать собственный менеджер загрузки вашей прошивки для переключения между вашими двумя установками GRUB и использовать каждую из них для загрузки только своей собственной версии Ubuntu.

Вариант № 2: отказаться от GRUB (или, по крайней мере, инструментов Ubuntu GRUB)

Проблема с GRUB для вашей ситуации заключается в том, что у вас есть две установки, и инструменты обслуживания GRUB могут быть сбиты с толку этой конфигурацией. Это наблюдение приводит к очевидному решению, что вы просто не должны использовать эти инструменты. Существует несколько других загрузчиков EFI для Linux, большинство из которых легче поддерживать вручную, чем GRUB. Вы можете настроить ELILO, SYSLINUX, исправленную Fedora GRUB Legacy, gummiboot или rEFInd и управлять обеими установками вручную. Фактически, поскольку rEFInd обнаруживает ядра при каждой загрузке, rEFInd должен быть близок к отсутствию обслуживания, как только он настроен. В качестве альтернативы, но в том же духе, вы можете вручную отредактировать grub.cfgфайл, чтобы сделать то, что вы хотите, а не полагаться на сценарии установки GRUB.

Помимо rEFInd, все эти инструменты потребуют от вас вносить изменения в конфигурацию всякий раз, когда вы обновляете ядро, что будет перетаскивать. Там также вопрос, когда и как установить дополнительную загрузочную программу. Я бы, вероятно, отложил его до окончания вашей второй установки Ubuntu, поскольку каждая установка будет регистрировать свою собственную копию GRUB в качестве загрузчика по умолчанию, и вы хотите переопределить эту настройку по умолчанию.

Также обратите внимание, что ни один из этих инструментов не может считывать ядро ​​из зашифрованной файловой системы или из LVM, поэтому вам потребуется отдельный незашифрованный /bootраздел для каждой из ваших установок Ubuntu. Именно так большинство инструкций, которые я видел, говорят о настройке зашифрованной установки Ubuntu в любом случае, так что, вероятно, это не имеет большого значения, если вы не хотите играть на «переднем крае» шифрования диска.

Некоторые загрузчики EFI имеют дополнительные специфические требования к разделам или файловой системе. В частности, ELILO, SYSLINUX и gummiboot требуют, чтобы ядро ​​находилось в разделе FAT, и ESP лучше всего подходит для этого. Вы можете сделать это, смонтировав ESP в /boot, но это сомнительное решение в Ubuntu, потому что некоторые обновления пакетов требуют символических ссылок. У вас также могут возникнуть проблемы с двумя отдельными установками Ubuntu, поскольку они оба будут пытаться получить одинаковые файлы. (В данном случае «ESP» на самом деле означает «раздел, с которого запускался загрузчик», поэтому в этом случае вы можете иметь только один ESP.) GRUB Legacy и rEFInd более гибки в этом.

Моя рекомендация

Лично я бы использовал rEFInd для этого - но, поскольку я поддерживаю REFInd, я не совсем объективен. На самом деле, у меня есть компьютер, который загружается между тремя установками Ubuntu, и rEFInd переключается между ними просто отлично. Эта конкретная система не использует шифрование, но я сомневаюсь, что это вызовет какие-либо новые проблемы с точки зрения REFInd.

Тем не менее, отдельные ESP также должны работать нормально с оговоркой, что вам может понадобиться использовать GRUB Customizer для настройки параметров как минимум одной из этих копий GRUB.

Род Смит
источник
Очень хорошие предложения, спасибо! Я уверен, что вы правы в том, что по спецификации можно иметь несколько ESP, но я сомневаюсь, что моя реализация Dell Latitude UEFI также поддерживает это. Это позволяет мне просматривать пути только по отдельным дискам. Я действительно должен попробовать это все же.
gertvdijk
если реализация EFI вашей Dell настолько сломана, что она не может обрабатывать несколько ESP, вы должны вернуть ее в магазин для возврата. Шутки в сторону; такого рода плохое указывало бы на такую ​​ужасность, что я бы не стал доверять прошивке для выполнения ее основных задач. На практике я не думаю, что это будет так плохо; Я никогда не слышал о EFI, который не может обрабатывать несколько ESP.
Род Смит
1

Вот шаги, которые я использовал для двойной загрузки с двумя зашифрованными LUKS системами Ubuntu на одном жестком диске с UEFI, используя вариант № 2, рекомендованный ранее Родом Смитом. Это было специально с Ubuntu 18.04.1-desktop. Шифрование домашнего каталога больше не предоставляется в качестве опции во время установки, поскольку существуют проблемы с надежностью и обслуживанием eCryptfs. Вместо этого рекомендуется использовать LUKS, поэтому я думаю, что это лучший вариант для нескольких пользователей с зашифрованными домашними разделами.

    1. Загрузитесь с Live USB, загрузив ISO и используя Startup Disk Creator для форматирования и настройки USB-накопителя.
    1. Используйте GParted для разбиения диска. Это основано на рекомендациях по адресу https://help.ubuntu.com/community/ManualFullSystemEncryption и использовании некоторых значений по умолчанию, установленных установщиком Ubuntu при выборе шифрования диска для полного диска.
      • Системный раздел EFI / 512MiB / FAT32 / boot, esp (флаги)
      • Загрузочная система # 1 / 732MiB / EXT4
      • Загрузочная система # 2 / 732MiB / EXT4
      • Данные зашифрованы # 1 / [желаемый размер] / очищены
      • Данные зашифрованы # 2 / [желаемый размер] / очищены
    1. Перезагрузитесь обратно в Live USB
      • Установить Ubuntu
      • Выберите настройки установки
      • Выберите «Что-то еще» для разметки диска раздела и в конфигурации этого раздела для установки:
        • Выберите «Системный раздел EFI» в качестве загрузчика в меню внизу.
        • Выберите «Data Encrypted # 1» и выберите «физическое устройство для шифрования», а затем введите фразу шифрования, которая будет использоваться для раздела.
        • Выберите вновь созданный раздел с помощью EXT4 и измените точку монтирования на «/».
        • Выберите «Boot System # 1» и укажите точку монтирования «/ boot».
      • Продолжить и установить
    1. Перезагрузитесь в новую установку
      • Установите «refind» через «apt-get install refind» и автоматически установите его в ESP, «Системный раздел EFI».
    1. Перезагрузитесь обратно в Live USB
      • Повторите шаги 3 и 4 для разделов # 2 Boot System и Data Encrypted # 2, устанавливающих вторую установку Ubuntu.
    1. Настройте и обновите каждую установку по мере необходимости.
brihoriq
источник
1

Я использую следующий подход с одним ESP:

Я создал дополнительные загрузчики для каждой ОС с

sudo grub-install --bootloader-id=ID

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

Пример:

У меня установлена ​​Ubuntu 16.04 и Ubuntu 18.04. Я загружаюсь в Ubuntu 16.04 и запускаю

sudo grub-install --bootloader-id=Ubuntu1604

Затем из загруженного в Ubuntu 18.04 я бегу

sudo grub-install --bootloader-id=Ubuntu1804

В настройках UEFI я вижу новые загрузочные записи с именами Ubuntu1604и Ubuntu1804переставляю порядок загрузки, чтобы установить одну из новых записей на первое место.

Я также могу видеть папки с этими именами в ESP.

Когда обновление системы поставляется с новой версией grub, она переустанавливает свежий экземпляр grub на ubuntu папку -floder на ESP, это не повлияет на загрузчики, которые я создал сам, но мне нужно снова изменить порядок загрузки поскольку ubuntu-entry будет перемещен на первое место в порядке загрузки.

Это что efibootmgr -v показано в моей конфигурации:

~ $ efibootmgr -v
BootCurrent: 0001
Тайм-аут: 0 секунд
BootOrder: 0001,0002,0004,0000,0003,0005
Boot0000 * Ubuntu HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Файл (\ EFI \ ubuntu \ shimx64.efi)
Boot0001 * US1804 HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Файл (\ EFI \ US1804 \ grubx64.efi)
Boot0002 * US1604 HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Файл (\ EFI \ US1604 \ grubx64.efi)
Boot0003 * UEFI OS HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Файл (\ EFI \ BOOT \ BOOTX64.EFI)
Boot0004 * US1904 HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Файл (\ EFI \ US1904 \ shimx64.efi)
Boot0005 * Ubuntu HD (1, GPT, 249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000) / Файл (EFI \ Ubuntu \ grubx64.efi)
mook765
источник
Все еще не работал для меня. Я меняю default в / etc / default / grub на дистрибутивный, GRUB_DISTRIBUTOR="Bionic_18_04"и переустановка grub использует его в качестве идентификатора UEFI по умолчанию. Но каждый раз он использует /EFI/ubuntu/grub.cfg в качестве места по умолчанию для загрузки из не моего нового /EFI/bionic_18_04/grub.cfg.
Олдфред
@oldfred Для меня это отлично работает в течение нескольких лет, когда запускается тройная загрузка.
mook765
Пробовал вашу команду, а не переименовывать в / etc / default / grub. Не сделал разницы UEFI установлен по умолчанию для загрузки новой записи. Но он загрузился с помощью моего / efi / ubuntu с диско в качестве загрузки по умолчанию, а не в виде grub в новой папке / EFI / ubuntu1804. Я бы подумал, что решающее значение имеет именно grub, а не UEFI.
oldfred
@oldfred Пожалуйста, взгляните на вывод, efibootmgr -vкоторый я добавил к своему ответу. Оно работает. У вас могут быть дополнительные изменения, которые мешают вам сделать это. То, что я описал, - единственное, что я делаю, чтобы заставить его работать.
mook765
Я проверил efibootmgr -v, и он был установлен для новой записи, но загрузил grub в / EFI / ubuntu. Мой загружается /EFI/ubuntu1804/shimx64.efi. Используете ли вы grubx64.efi или shimx64.efi, может быть в этом разница? У меня отключена безопасная загрузка, но по умолчанию она работает как первая запись ubuntu1804. В какой-то момент у меня появилось так много записей или папок UEFI в / EFI, что у меня возникли проблемы с загрузкой, и мне пришлось использовать rEFInd на другом диске для загрузки. Поэтому я не хочу, чтобы в папке / EFI было слишком много записей или записей в UEFI.
oldfred