В настоящее время я создаю файл образа диска (используя mtools и parted), который включает grub, файловую систему и загружает ядро Linux.
Используемый мной для этого grub.cfg выглядит так:
insmod part_gpt
menuentry "test image" {
linux (hd0,gpt1)/bzImage.efi root=/dev/sda1 console=tty console=ttyS0,115200 primary
initrd (hd0,gpt1)/fs.cpio.gz
}
Но это всегда предполагает, что устройство (hd0,gpt1) является правильным устройством. Вот почему я хотел бы добавить UUID в файл img, чтобы загрузочное устройство всегда могло быть одним и тем же.
Как добавить UUID в таблицу разделов? Я не могу использовать права root.
решение1
Таблицы разделов GPT уже имеют один. У вашей корневой файловой системы тоже есть один. Запустите, blkid disk.img
чтобы получить их список – он покажет UUID файловой системы как UUID=
и UUID раздела как PARTUUID=
.
К сожалению, похоже, что текущие версии GRUBпока не поддерживаютс использованием UUID разделов. Когда поддержка будет добавлена, она будет доступна по search.partuuid
команде.
Между тем вам, вероятно, придется использовать вместо этого UUID файловой системы:
search.fs_uuid --no-floppy --set=root e9ad79d7-...-e3c445c7f4e9
Теперь вы можете ссылаться на пути как ($root)/bzImage.efi
или просто как , /bzImage.efi
поскольку $root автоматически применяется ко всем ссылкам на пути.
Не забудьте обновить root=
параметр Linux соответствующим образом. При использовании initramfs, это должен быть формат, который понимает ваш initramfs. (Когданетпри использовании initramfs единственный вариант — root=PARTUUID=
.)