Установка пользовательского 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 в это имя и оставили бы имя GRUBgrubx64.efi
, но вEFI/BOOT
каталог. - Разными другими способами. Существуют и другие способы загрузки, такие как загрузка по сети или в BIOS/CSM/ устаревшем режиме. Это не относится к вашему вопросу.
Установщик Ubuntu предназначен для установки на жесткий диск. Если вы хотите установить на съемный диск, вы должны либо переместить / переименовать файлы загрузчика после установки, либо установить GRUB (или другой загрузчик) вручную. Вы можете сделать это, переименовав EFI/ubuntu
в EFI/BOOT
а затем переименование shimx64.efi
в этом каталоге bootx64.efi
или путем копирования файлов для достижения аналогичного эффекта. В качестве альтернативы, вы можете полностью установить другой загрузчик, хотя это может быть более утомительным предложением, и это может создать сложности, особенно если вы хотите загружаться на компьютерах с включенной безопасной загрузкой.