Thanks, Pascal, that helped a bit.
But now there is another problem:
error: attempt to read or write outside of partition.
So grub see partition and its content, it can even load some modules from
(hd0,msdos1)/boot/grub/i386-pc.
But when I'm trying to load some other modules, like "normal", I see this
error:
grub rescue> ls
(hd0) (hd0,msdos2) (hd0,msdos1)
grub rescue> ls (hd0,msdos1)/boot/grub
./ ../ gfxblacklist.txt unicode.pf2 i386-pc/ locale/ fonts/ grubenv
grub.cfg
grub rescue> set root=(hd0,msdos1)
grub rescue> set prefix=(hd0,msdos1)/boot/grub
grub rescue> insmod normal
error: attempt to read or write outside of partition.
What is also interesting, if I use --modules=part_msdos,ext2 instead of
--modules=part_msdos, then grub tries to load a system, but neither
succeeds nor emits rescue shell - it just hangs.
As to your question - I used "losetup -o 1M -f image.img" to create loop
device that I can format with mkfs.ext4.
Thanks,
Sergey.
2018-07-17 21:12 GMT+03:00 Pascal Hambourg <address@hidden>:
Hello,
Le 17/07/2018 à 18:09, Sergey Naumov a écrit :
I'm trying to prepare an image that I can dd into disk or boot using PXE,
so I install basic system + kernel + grub-pc into directory, then create
an
image file, partition it using sfdisk, mount main partiton (ext4), copy
content of the rootfs into it, and then run grub-install and update-grub
under chroot.
Everything seems OK, grub.cfg detected kernel and initramfs installed
into
created image, but when I try to boot this image either on real system or
using kvm, grub2 can't find device partitions. What could be a reason of
it?
I posted the question with more detailed explanation here:
https://serverfault.com/questions/922319/grub2-fails-to-dete
ct-partitions-if-it-was-installed-into-file
You really could have copied all the relevant information in your post to
the list, so subscribers do not have to fetch them on the web.
How did you make the ext4 partition in the image appear as a block device
so that it can be mounted ?
AFAIK, GRUB looking for the filesystem containing /boot/grub by UUID
means that grub-install believes that it is on a different drive from the
boot+core image. So maybe grub-install did not care to embed the MSDOS
partition table driver into the core image. You can try to force it with
grub-install --modules=part_msdos <other parameters>