Я использую debootstrap для создания пользовательского Гостеприимного дистрибутива, который может затем быть записан во вторичный загрузочный диск от хост-машины. (Целью является Intel NUC.), Когда я поместил диск в целевой ПК и включаюсь, EFI распознает загрузочный диск, но не может загрузить его (он сразу возвращается к меню начальной загрузки EFI.)
Таким образом, я не полагаю, что на самом деле добираюсь до запуска личинки. Я предполагаю, что это - проблема установки/конфигурации личинки.
Соответствующая часть моего сценария:
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
Я могу загрузиться от диска! Однако я получаю подсказку личинки... Предположение я до проблем конфигурации личинки теперь.
Я использовал эти документы в качестве своих основных источников:
Чтобы быть ясным, я пытаюсь установить Linux kernel/rootfs/bootloader на диске, подключенном к хост-машине. Тот загрузочный диск затем помещается в целевую машину и загружается. Это не сценарий двойной загрузки.
Сделайте я должен сделать что-то с efibootmgr
на цели?
Я подозреваю, что проблемой является одно из именования загрузчика. Под EFI компьютер может загрузиться в любом количестве путей:
gdisk
; "флаг начальной загрузки" и "особенно отмечает" набор parted
, GParted или связанные инструменты). Загрузчик можно назвать чем-либо, но традиционно помещают в подкаталог EFI
названный в честь ОС или загрузчика. Для Ubuntu это EFI/ubuntu/shimx64.efi
, хотя это - на самом деле программа контейнера, которая называет GRUB в EFI/ubuntu/grubx64.efi
, и GRUB может быть установлен запуститься непосредственно, если Защищенная загрузка отключена. Компьютер знает, какую программу запустить, потому что та информация хранится в NVRAM.EFI/BOOT/bootx64.efi
для x86-64/AMD64/X64 компьютеров. Это часто называют именем файла нейтрализации. Вы поместили Контейнер в это имя файла и сохраняете GRUB названным grubx64.efi
, но в EFI/BOOT
каталог.Установщик Ubuntu разработан для установки на жестком диске. Если Вы хотите установить на съемном диске, необходимо или переместиться/переименовать файлы загрузчика после установки или установить GRUB (или другой загрузчик) вручную. Можно сделать это путем переименования EFI/ubuntu
кому: EFI/BOOT
и затем переименование shimx64.efi
в рамках того каталога к bootx64.efi
, или путем копирования файлов для достижения подобного эффекта. С другой стороны, можно установить другой загрузчик полностью, хотя это, вероятно, будет более утомительным суждением, и он может создать сложности, особенно если Вы хотите загрузиться на компьютерах с включенной Защищенной загрузкой.