Крепление арки ubuntu multiboot

У меня установлен Ubuntu 16.04 на моем ноутбуке. Я установил Windows 10 и Arch. Когда я установил grub для Arch, я заметил что-то странное: мой раздел ubuntu не был найден os-prober. Затем я открыл раздел, где Ubuntu установлен по умолчанию (/dev/sda3), и увидел, что он поддерживает свою отдельную папку boot. Мой фактический ESP (/dev/sda1) установлен на /boot/efi в /dev/sda3 (раздел ubuntu). Кроме того, Ubuntu загружается напрямую, используя собственный исполняемый файл efi, который находится в efi/ubuntu/shimx64.efi в /dev/sda1 (ESP). Ubuntu поддерживает свои собственные ядра в /boot из /dev/sda3, но Arch установила свои ядра непосредственно в /dev/sda1. Итак, как я могу очистить этот беспорядок и иметь один кусок grub внутри efi/grub из /dev/sda1, который будет управлять обеими установками Ubuntu и Arch, используя их отдельные ядра?

0
задан 6 July 2017 в 17:33

3 ответа

Во-первых, я хотел бы прояснить некоторые термины: в контексте загрузчиков EFI для Linux «EFI stub» относится к загрузчику, встроенному в ядро ​​Linux, что позволяет ядру запускаться как EFI. Вы, кажется, используете этот термин для ссылки на любую загрузочную программу EFI, но это использование может создать путаницу.

Что касается, os-prober в Arch, то должен был обнаружить вашу установку Ubuntu. Я не знаю, почему это не так, но поскольку Arch os-prober является частью Arch, а не Ubuntu, вы можете спросить об этом на форуме Arch. OTOH, если вы будете следовать моему совету, вы не будете использовать GRUB от Arch, поэтому этот момент станет спорным.

Arch дает своим ядрам фиксированные имена, которые не меняются при обновлении ядра, тогда как ядро ​​Ubuntu имена включают строку версии и, следовательно, изменяются при установке нового ядра. Это важно, потому что файлы конфигурации GRUB, относящиеся к ядру, создаются ОС, которая управляет GRUB. Таким образом, если вы используете Arch GRUB, вам нужно будет перенастроить GRUB в Arch при каждом обновлении ядра Ubuntu. Это, вероятно, будет неудобно. Если вы используете GRUB Ubuntu, OTOH, его конфигурация не потребуется обновлять при обновлении ядра Arch. (Когда вы устанавливаете новое ядро ​​Ubuntu, скрипты Ubuntu автоматически обновляют GRUB Ubuntu). Таким образом, из этих двух я бы рекомендовал использовать GRUB Ubuntu, а не GRUB от Arch.

Вы можете переключиться на GRUB Ubuntu на используя efibootmgr в любом дистрибутиве:

Введите sudo efibootmgr, чтобы просмотреть список записей. Обратите внимание на строку BootOrder и на записи Boot#### для Arch и Ubuntu. Строка BootOrder сообщает вам порядок, в котором компьютер попытается запустить определенные записи загрузки. Учитывая ваши ОС, вероятность того, что GRUB от Arch будет первой в списке BootOrder. После того, как вы определили номер Ubuntu Boot####, вы можете передать новый порядок загрузки в прошивку, используя опцию -o для efibootmgr, как в sudo efibootmgr -o 0004,0002,000A. Это устанавливает порядок загрузки, чтобы сначала использовать Boot0004, затем Boot0002, если это не удается, и, наконец, Boot000A, если оба из предыдущих не сработали. Разумеется, детали будут отличаться для вас; вы должны убедиться, что первая запись Ubuntu. То, что приходит после этого, скорее всего, будет неактуальным, хотя я бы рекомендовал обеспечить, чтобы по крайней мере одна известная рабочая запись была в списке, так что система загрузится к чему-то, даже если запись Ubuntu завершится с ошибкой.

После перезагрузки должен появиться GRUB Ubuntu, но он может иметь или не иметь запись для Arch. Вы можете запустить sudo update-grub, чтобы создать новое меню Ubuntu GRUB, и повторите попытку. Это может или не может обнаружить ядро ​​Arch. Если это не так, вы можете отредактировать /etc/grub.d/40_custom или использовать GRUB Customizer, чтобы добавить запись для Arch. Что-то вроде следующего должно работать:

menuentry "Arch Linux" {
    set root=(hd0,1)
    linux /vmlinuz-linux root=/dev/sda5 ro quiet splash
    initrd /initramfs-linux.img
}

Это всего лишь грубый пример и, вероятно, может быть улучшен. Если ничего больше, вам, вероятно, придется изменить параметр root=/dev/sda5, чтобы указать раздел True root (/). Вы можете изучить конфигурацию GRUB в Arch или обратиться за помощью к форуму Arch, если вы хотите улучшить этот пример, или если у вас есть проблемы с ним.

В качестве альтернативы предыдущему вы могли бы использовать что-то другое чем GRUB. Для большинства загрузочных устройств требуется больше ручной настройки, чем GRUB, но эта ручная конфигурация, вероятно, будет проще, чем ручная настройка GRUB. См. GRUB Customizer для краткого изложения того, что доступно. Мой собственный менеджер загрузки rEFInd имеет тенденцию легче настраивать для сценариев с несколькими загрузками, потому что он активно сканирует ядра каждый раз, когда он загружается, поэтому он не страдает необходимостью обновлять файл конфигурации при каждом обновлении ядра. OTOH, потому что имя ядра Arch не изменяется, если вы используете GRUB Ubuntu, вы не будете страдать от обычных проблем с множеством распределенных GRUB, поэтому rEFInd не будет улучшением на этот счет.

Один последний момент: с вашей конфигурацией ядра Arch хранятся в системном разделе EFI (ESP). Это обычная конфигурация Arch, но вы должны быть уверены, что ваш ESP достаточно большой. Иногда ESP составляет всего 100 МБ (или, возможно, даже меньше), что может привести к небольшому лишнему пространству после того, как ваши ядра будут на месте. Вы можете использовать df, чтобы узнать, сколько места используется и доступно в разделе, как в df /boot/efi. Если ваш ESP почти заполнен, вы можете захотеть поместить свои ядра Arch в другое место. Хотя использование ESP для хранения ядер является обычной практикой в ​​Arch, это необязательно, поэтому вы можете сделать что-то еще.

3
ответ дан 22 May 2018 в 20:48
  • 1
    Большое спасибо за понимание. Проблема при выполнении update-grub из Ubuntu заключается в том, что он действительно не обновляет глобальный файл конфигурации grub, который находится в каталоге /dev/sda1 /grub/. Вместо этого, как я сказал ранее, он использует свой собственный каталог boot и монтирует исходный ESP в /boot/efi. Таким образом, update-grub приводит к обновлению grub.cfg в /dev/sda3/boot/grub, а не dev/sda1/grub. Следовательно, результат неэффективен вообще. Кроме того, мой ESP составляет 500 Мбайт, а os-prober в Arch обнаруживает Ubuntu сейчас, я действительно не знаю, почему это было не до этого сообщения. – Subhranil 6 July 2017 в 17:39
  • 2
    Кроме того, os-prober в Ubuntu не может найти другие ОС. – Subhranil 6 July 2017 в 18:30
  • 3
    Поскольку у вас установлено два дистрибутива Linux , у вас есть два файла конфигурации GRUB, а не один «глобальный». файл. У вас есть файл конфигурации Arch GRUB в файле конфигурации ESP и Ubuntu GRUB в корневом каталоге Ubuntu (/). Что важно, зависит от того, какой GRUB запущен по умолчанию, который определяется порядком загрузки EFI (BootOrder в выходе efibootmgr). Пожалуйста, перечитайте мой ответ с этим. Ubuntu os-prober обнаруживает другие ОС, но я не могу обещать, что обнаружит Arch, поэтому предлагается использовать GRUB Customizer или создать ручную конфигурацию. – Rod Smith 7 July 2017 в 16:18

Во-первых, я хотел бы прояснить некоторые термины: в контексте загрузчиков EFI для Linux «EFI stub» относится к загрузчику, встроенному в ядро ​​Linux, что позволяет ядру запускаться как EFI. Вы, кажется, используете этот термин для ссылки на любую загрузочную программу EFI, но это использование может создать путаницу.

Что касается, os-prober в Arch, то должен был обнаружить вашу установку Ubuntu. Я не знаю, почему это не так, но поскольку Arch os-prober является частью Arch, а не Ubuntu, вы можете спросить об этом на форуме Arch. OTOH, если вы будете следовать моему совету, вы не будете использовать GRUB от Arch, поэтому этот момент станет спорным.

Arch дает своим ядрам фиксированные имена, которые не меняются при обновлении ядра, тогда как ядро ​​Ubuntu имена включают строку версии и, следовательно, изменяются при установке нового ядра. Это важно, потому что файлы конфигурации GRUB, относящиеся к ядру, создаются ОС, которая управляет GRUB. Таким образом, если вы используете Arch GRUB, вам нужно будет перенастроить GRUB в Arch при каждом обновлении ядра Ubuntu. Это, вероятно, будет неудобно. Если вы используете GRUB Ubuntu, OTOH, его конфигурация не потребуется обновлять при обновлении ядра Arch. (Когда вы устанавливаете новое ядро ​​Ubuntu, скрипты Ubuntu автоматически обновляют GRUB Ubuntu). Таким образом, из этих двух я бы рекомендовал использовать GRUB Ubuntu, а не GRUB от Arch.

Вы можете переключиться на GRUB Ubuntu на используя efibootmgr в любом дистрибутиве:

Введите sudo efibootmgr, чтобы просмотреть список записей. Обратите внимание на строку BootOrder и на записи Boot#### для Arch и Ubuntu. Строка BootOrder сообщает вам порядок, в котором компьютер попытается запустить определенные записи загрузки. Учитывая ваши ОС, вероятность того, что GRUB от Arch будет первой в списке BootOrder. После того, как вы определили номер Ubuntu Boot####, вы можете передать новый порядок загрузки в прошивку, используя опцию -o для efibootmgr, как в sudo efibootmgr -o 0004,0002,000A. Это устанавливает порядок загрузки, чтобы сначала использовать Boot0004, затем Boot0002, если это не удается, и, наконец, Boot000A, если оба из предыдущих не сработали. Разумеется, детали будут отличаться для вас; вы должны убедиться, что первая запись Ubuntu. То, что приходит после этого, скорее всего, будет неактуальным, хотя я бы рекомендовал обеспечить, чтобы по крайней мере одна известная рабочая запись была в списке, так что система загрузится к чему-то, даже если запись Ubuntu завершится с ошибкой.

После перезагрузки должен появиться GRUB Ubuntu, но он может иметь или не иметь запись для Arch. Вы можете запустить sudo update-grub, чтобы создать новое меню Ubuntu GRUB, и повторите попытку. Это может или не может обнаружить ядро ​​Arch. Если это не так, вы можете отредактировать /etc/grub.d/40_custom или использовать GRUB Customizer, чтобы добавить запись для Arch. Что-то вроде следующего должно работать:

menuentry "Arch Linux" { set root=(hd0,1) linux /vmlinuz-linux root=/dev/sda5 ro quiet splash initrd /initramfs-linux.img }

Это всего лишь грубый пример и, вероятно, может быть улучшен. Если ничего больше, вам, вероятно, придется изменить параметр root=/dev/sda5, чтобы указать раздел True root (/). Вы можете изучить конфигурацию GRUB в Arch или обратиться за помощью к форуму Arch, если вы хотите улучшить этот пример, или если у вас есть проблемы с ним.

В качестве альтернативы предыдущему вы могли бы использовать что-то другое чем GRUB. Для большинства загрузочных устройств требуется больше ручной настройки, чем GRUB, но эта ручная конфигурация, вероятно, будет проще, чем ручная настройка GRUB. См. [D10] GRUB Customizer для краткого изложения того, что доступно. Мой собственный менеджер загрузки rEFInd имеет тенденцию легче настраивать для сценариев с несколькими загрузками, потому что он активно сканирует ядра каждый раз, когда он загружается, поэтому он не страдает необходимостью обновлять файл конфигурации при каждом обновлении ядра. OTOH, потому что имя ядра Arch не изменяется, если вы используете GRUB Ubuntu, вы не будете страдать от обычных проблем с множеством распределенных GRUB, поэтому rEFInd не будет улучшением на этот счет.

Один последний момент: с вашей конфигурацией ядра Arch хранятся в системном разделе EFI (ESP). Это обычная конфигурация Arch, но вы должны быть уверены, что ваш ESP достаточно большой. Иногда ESP составляет всего 100 МБ (или, возможно, даже меньше), что может привести к небольшому лишнему пространству после того, как ваши ядра будут на месте. Вы можете использовать df, чтобы узнать, сколько места используется и доступно в разделе, как в df /boot/efi. Если ваш ESP почти заполнен, вы можете захотеть поместить свои ядра Arch в другое место. Хотя использование ESP для хранения ядер является обычной практикой в ​​Arch, это необязательно, поэтому вы можете сделать что-то еще.

3
ответ дан 18 July 2018 в 10:39

Во-первых, я хотел бы прояснить некоторые термины: в контексте загрузчиков EFI для Linux «EFI stub» относится к загрузчику, встроенному в ядро ​​Linux, что позволяет ядру запускаться как EFI. Вы, кажется, используете этот термин для ссылки на любую загрузочную программу EFI, но это использование может создать путаницу.

Что касается, os-prober в Arch, то должен был обнаружить вашу установку Ubuntu. Я не знаю, почему это не так, но поскольку Arch os-prober является частью Arch, а не Ubuntu, вы можете спросить об этом на форуме Arch. OTOH, если вы будете следовать моему совету, вы не будете использовать GRUB от Arch, поэтому этот момент станет спорным.

Arch дает своим ядрам фиксированные имена, которые не меняются при обновлении ядра, тогда как ядро ​​Ubuntu имена включают строку версии и, следовательно, изменяются при установке нового ядра. Это важно, потому что файлы конфигурации GRUB, относящиеся к ядру, создаются ОС, которая управляет GRUB. Таким образом, если вы используете Arch GRUB, вам нужно будет перенастроить GRUB в Arch при каждом обновлении ядра Ubuntu. Это, вероятно, будет неудобно. Если вы используете GRUB Ubuntu, OTOH, его конфигурация не потребуется обновлять при обновлении ядра Arch. (Когда вы устанавливаете новое ядро ​​Ubuntu, скрипты Ubuntu автоматически обновляют GRUB Ubuntu). Таким образом, из этих двух я бы рекомендовал использовать GRUB Ubuntu, а не GRUB от Arch.

Вы можете переключиться на GRUB Ubuntu на используя efibootmgr в любом дистрибутиве:

Введите sudo efibootmgr, чтобы просмотреть список записей. Обратите внимание на строку BootOrder и на записи Boot#### для Arch и Ubuntu. Строка BootOrder сообщает вам порядок, в котором компьютер попытается запустить определенные записи загрузки. Учитывая ваши ОС, вероятность того, что GRUB от Arch будет первой в списке BootOrder. После того, как вы определили номер Ubuntu Boot####, вы можете передать новый порядок загрузки в прошивку, используя опцию -o для efibootmgr, как в sudo efibootmgr -o 0004,0002,000A. Это устанавливает порядок загрузки, чтобы сначала использовать Boot0004, затем Boot0002, если это не удается, и, наконец, Boot000A, если оба из предыдущих не сработали. Разумеется, детали будут отличаться для вас; вы должны убедиться, что первая запись Ubuntu. То, что приходит после этого, скорее всего, будет неактуальным, хотя я бы рекомендовал обеспечить, чтобы по крайней мере одна известная рабочая запись была в списке, так что система загрузится к чему-то, даже если запись Ubuntu завершится с ошибкой.

После перезагрузки должен появиться GRUB Ubuntu, но он может иметь или не иметь запись для Arch. Вы можете запустить sudo update-grub, чтобы создать новое меню Ubuntu GRUB, и повторите попытку. Это может или не может обнаружить ядро ​​Arch. Если это не так, вы можете отредактировать /etc/grub.d/40_custom или использовать GRUB Customizer, чтобы добавить запись для Arch. Что-то вроде следующего должно работать:

menuentry "Arch Linux" { set root=(hd0,1) linux /vmlinuz-linux root=/dev/sda5 ro quiet splash initrd /initramfs-linux.img }

Это всего лишь грубый пример и, вероятно, может быть улучшен. Если ничего больше, вам, вероятно, придется изменить параметр root=/dev/sda5, чтобы указать раздел True root (/). Вы можете изучить конфигурацию GRUB в Arch или обратиться за помощью к форуму Arch, если вы хотите улучшить этот пример, или если у вас есть проблемы с ним.

В качестве альтернативы предыдущему вы могли бы использовать что-то другое чем GRUB. Для большинства загрузочных устройств требуется больше ручной настройки, чем GRUB, но эта ручная конфигурация, вероятно, будет проще, чем ручная настройка GRUB. См. [D10] GRUB Customizer для краткого изложения того, что доступно. Мой собственный менеджер загрузки rEFInd имеет тенденцию легче настраивать для сценариев с несколькими загрузками, потому что он активно сканирует ядра каждый раз, когда он загружается, поэтому он не страдает необходимостью обновлять файл конфигурации при каждом обновлении ядра. OTOH, потому что имя ядра Arch не изменяется, если вы используете GRUB Ubuntu, вы не будете страдать от обычных проблем с множеством распределенных GRUB, поэтому rEFInd не будет улучшением на этот счет.

Один последний момент: с вашей конфигурацией ядра Arch хранятся в системном разделе EFI (ESP). Это обычная конфигурация Arch, но вы должны быть уверены, что ваш ESP достаточно большой. Иногда ESP составляет всего 100 МБ (или, возможно, даже меньше), что может привести к небольшому лишнему пространству после того, как ваши ядра будут на месте. Вы можете использовать df, чтобы узнать, сколько места используется и доступно в разделе, как в df /boot/efi. Если ваш ESP почти заполнен, вы можете захотеть поместить свои ядра Arch в другое место. Хотя использование ESP для хранения ядер является обычной практикой в ​​Arch, это необязательно, поэтому вы можете сделать что-то еще.

3
ответ дан 24 July 2018 в 19:37

Другие вопросы по тегам:

Похожие вопросы: