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

Я использую 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 на цели?

0
задан 14 November 2017 в 03:49

1 ответ

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

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

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

1
ответ дан 2 November 2019 в 04:05

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

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