Установка пользовательского ubuntu+grub на дополнительный загрузочный диск

Я использую debootstrap для создания пользовательского дистрибутива на основе Xenial, который затем можно записать на дополнительный загрузочный диск с хост-компьютера. (Цель - Intel NUC.) Когда я вставляю диск в целевой ПК и включаю его, EFI распознает загрузочный диск, но не может его загрузить (он немедленно возвращается в меню загрузки EFI.)

Так что я не верю, что на самом деле добираюсь до запуска grub. Я предполагаю, что это проблема установки / настройки grub.

Соответствующая часть моего сценария:

local DISK=$1 # e.g. /dev/sdc
local EFI_PARTITION=${DISK}1
local ROOT_PARTITION=${DISK}2
local ROOT_MOUNT=$(mktemp -d)

# create partitions and format
parted -s --align=minimal $DISK \
       mklabel gpt \
       mkpart ESP fat32 0% 513MiB \
       mkpart primary ext4 513MiB 100% \
       set 1 boot on
partprobe $DISK
sleep 1
mkfs.fat -F32 $EFI_PARTITION
mkfs.ext4 $ROOT_PARTITION

# copy rootfs
mount $ROOT_PARTITION $ROOT_MOUNT
rsync -a $CHROOT_DIR/ $ROOT_MOUNT

# enter chroot and install grub
for dir in /dev /proc /sys /run; do
  mount --bind $dir $ROOT_MOUNT/$dir
done
mkdir $ROOT_MOUNT/boot/efi
mount $EFI_PARTITION $ROOT_MOUNT/boot/efi

chroot $ROOT_MOUNT <<EOF
/usr/sbin/grub-install --bootloader-id=ubuntu ${DISK}
/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg
EOF

# generate fstab and additional customizations

# sync, unmount eject

Я вижу правильный раздел UUID в результирующем grub.cfg.

Вот мои данные раздела:

$ sudo parted /dev/sdb print
Model: ASMT 2115 (scsi)
Disk /dev/sdb: 64.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  538MB   538MB   fat32        ESP      boot, esp
 2      538MB   64.0GB  63.5GB  ext4         primary

После того как я добавил shim-singed в мой debootsrap входит, вот что я вижу в /boot/efi:

$ sudo tree efi
efi
└── EFI
    └── ubuntu
        ├── grub.cfg
        ├── grubx64.efi
        ├── MokManager.efi
        └── shimx64.efi

После переименования EFI/ubuntu в EFI/BOOT а также shimx64.efi в bootx64.efi Я могу загрузиться с диска! Однако я получаю приглашение grub... Предполагаю, что сейчас я перешел к проблемам с настройкой grub.

Я использовал эти документы в качестве моих основных источников:

Чтобы было ясно, я пытаюсь установить linux kernel/rootfs/bootloader на диск, подключенный к хост- машине. Этот загрузочный диск затем помещается в целевую машину и загружается. Это не сценарий двойной загрузки.

Нужно ли что-то делать с efibootmgr на цель?

1 ответ

Решение

Я подозреваю, что проблема заключается в именовании загрузчика. Под EFI компьютер может загружаться любым количеством способов:

  • С жесткого диска - при обычной установке ОС загрузчик находится на системном разделе EFI (ESP) жесткого диска , который представляет собой раздел FAT32 с кодом определенного типа (C12A7328-F81F-11D2-BA4B-00A0C93EC93B; EF00 в gdisk; "флаг загрузки" и "флаг esp" установлены в parted, GParted или связанные инструменты). Загрузчик может быть назван как угодно, но обычно он находится в подкаталоге EFI назван в честь ОС или загрузчика. Для Ubuntu это EFI/ubuntu/shimx64.efi, хотя это на самом деле программа-шим, которая вызывает GRUB в EFI/ubuntu/grubx64.efi, и GRUB может быть установлен для запуска напрямую, если защищенная загрузка отключена. Компьютер знает, какую программу запустить, потому что эта информация хранится в NVRAM.
  • Со съемного диска - на съемном диске, включая установщик ОС или все, что вы хотите переместить с одного компьютера на другой (как в вашем случае), правила аналогичны установке на жесткий диск; однако, поскольку нельзя полагаться на NVRAM для хранения информации о загрузчике, загрузчик хранится с использованием стандартного имени файла, которое EFI/BOOT/bootx64.efi для компьютеров x86-64/AMD64/X64. Это часто называют запасным именем файла. Вы бы поместили Shim в это имя и оставили бы имя GRUB grubx64.efi, но в EFI/BOOT каталог.
  • Разными другими способами. Существуют и другие способы загрузки, такие как загрузка по сети или в BIOS/CSM/ устаревшем режиме. Это не относится к вашему вопросу.

Установщик Ubuntu предназначен для установки на жесткий диск. Если вы хотите установить на съемный диск, вы должны либо переместить / переименовать файлы загрузчика после установки, либо установить GRUB (или другой загрузчик) вручную. Вы можете сделать это, переименовав EFI/ubuntu в EFI/BOOT а затем переименование shimx64.efi в этом каталоге bootx64.efi или путем копирования файлов для достижения аналогичного эффекта. В качестве альтернативы, вы можете полностью установить другой загрузчик, хотя это может быть более утомительным предложением, и это может создать сложности, особенно если вы хотите загружаться на компьютерах с включенной безопасной загрузкой.

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