0

I'm trying to prepare an image that I can dd into disk or boot using PXE.

Some context: I create an image, partition it using sfdisk (MBR), create loop devices for the whole disk and main partition, format the main partition as ext4, mount it and install a base system + kernel and grub-pc packages using debootstrap, then generate initramfs, mount dev, proc and sys into partition root directory and install grub.

Output of fdisk -l for /dev/loop0 (loop device for the whole image):

Disk /dev/loop0: 1,1 GiB, 1211572224 bytes, 2366352 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfdf8e68d

Device       Boot   Start     End Sectors  Size Id Type
/dev/loop0p1 *       2048 2097151 2095104 1023M 83 Linux
/dev/loop0p2      2097152 2359295  262144  128M 82 Linux swap / Solaris

Grub install commands:

chroot $ROOT grub-install --target=i386-pc /dev/loop0
chroot $ROOT update-grub

Grub config seems to be generated correctly with kernel and initramfs detected. But when I'm trying to boot system using the resulting image, grub2 can't find any partition:

Loading boot sector... booting...
error: no such device: some-file-system-UUID
error: unknown filesystem.
Entering rescue mode...
grub rescue> ls
(hd0)
grub rescue> insmod ext2
grub rescue> ls
(hd0)

What could be wrong in my grub installation steps? How grub2 can't see a partition that is present in fdisk output?

PS: BIOS is set up for legacy mode. I also tested my image with kvm and have exactly the same result.

sknaumov
  • 101
  • 2

1 Answers1

0

This is probably too late, but for me it turned out I needed to mount the /dev/loopX partition using

losetup -P -n /dev/loop0 test.img

That created a /dev/loop0p1 that I was able to mount and install grub on top of. You should also make sure that you've installed a linux kernel inside the image with

sudo chroot /mnt apt-get install linux-image

Then you can re-install grub on /dev/loop0 and run update-grub successfully.