hi-

i'd recently posted this to help-grub, but was asked to post here as well.

i'm attempting to install grub to an esp partition on an nbd device, but it 
fails, and says "error: cannot find a GRUB drive for /dev/nbd0p1" [see below].  
this is a qcow2 image, presented to the system as /dev/nbd0 [e.g. qemu-nbd 
--connect ...].  i also have another "traditional" disk connected as /dev/vdd, 
partitioned identically, and this works as expected.

i've tried --removable, --no-nvram, with and without device.map files, all with 
the same result.  i did find that if i run kpartx against the device, it 
creates devices in /dev/mapper/, and those work, but i don't understand why.  
with or without running kpartx, it seems to me the kernel has awareness of the 
device partitions, since i can work with them as expected in any other way 
using the traditional /dev/ nodes.  it seems to just be grub that has an issue.

i've also tested this with just a simple raw image file, and a loop device 
[below as well].  i get the same result there.  this is just another example of 
the same problem though, and not what i'm aiming to do.

what makes grub decide it's not a grub drive?

here's some hopefully relevant info - thanks!:

=== with an nbd device ===
>parted /dev/nbd0 print
Model: Unknown (unknown)
Disk /dev/nbd0: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size   File system  Name  Flags
1      1049kB  105MB   104MB  fat32        esp   boot, esp
2      105MB   1073MB  968MB               pv1   lvm

>cat 
>/opt/build/operating_systems/alpine/work/imagetest-c5676f32-412a-4ef4-b617-962b932b8ef2/boot/grub/device.map
(hd0)                   /dev/nbd0

>grub-install \
--verbose \
--removable \
--target=x86_64-efi \
--bootloader-id=alpine \
"--efi-directory=/opt/build/operating_systems/alpine/work/imagetest-c5676f32-412a-4ef4-b617-962b932b8ef2/boot/efi"
 \
"--boot-directory=/opt/build/operating_systems/alpine/work/imagetest-c5676f32-412a-4ef4-b617-962b932b8ef2/boot"
Installing for x86_64-efi platform.
grub-install: info: cannot open 
`/opt/build/operating_systems/alpine/work/imagetest-c5676f32-412a-4ef4-b617-962b932b8ef2/boot/grub/device.map':
 No such file or directory.
grub-install: info: /dev/nbd0p1 is not present.
grub-install: info: Looking for /dev/nbd0p1.
grub-install: info: /dev/nbd0 is a parent of /dev/nbd0p1.
grub-install: info: /dev/nbd0p1 is present.
grub-install: info: Looking for /dev/nbd0p1.
grub-install: info: /dev/nbd0 is a parent of /dev/nbd0p1.
grub-install: info: /dev/nbd0p1 is present.
grub-install: info: Looking for /dev/nbd0p1.
grub-install: info: /dev/nbd0 is a parent of /dev/nbd0p1.
grub-install: error: cannot find a GRUB drive for /dev/nbd0p1.  Check your 
device.map.

=== with a loop device ===
>qemu-img create -f raw grubtest.img '500m'
>losetup --verbose /dev/loop0 grubtest.img

>parted /dev/loop0 print
Model: Loopback device (loopback)
Disk /dev/loop0: 524MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name  Flags
 1      1049kB  105MB  104MB  fat32        esp   boot, esp
 2      105MB   523MB  418MB  ext4         root

>grub-install \
>   --verbose \
>   --removable \
>   --target=x86_64-efi \
>   --bootloader-id=alpine
Installing for x86_64-efi platform.
grub-install: info: cannot open `/boot/grub/device.map': No such file or 
directory.
grub-install: info: /dev/loop0p1 is not present.
grub-install: info: Looking for /dev/loop0p1.
grub-install: info: /dev/loop0 is a parent of /dev/loop0p1.
grub-install: info: /dev/loop0p1 is present.
grub-install: info: Looking for /dev/loop0p1.
grub-install: info: /dev/loop0 is a parent of /dev/loop0p1.
grub-install: info: /dev/loop0p1 is present.
grub-install: info: Looking for /dev/loop0p1.
grub-install: info: /dev/loop0 is a parent of /dev/loop0p1.
grub-install: error: cannot find a GRUB drive for /dev/loop0p1.  Check your 
device.map.

=== with a virtio device ===
>grub-install \
--removable \
--target=x86_64-efi \
--bootloader-id=alpine \
"--efi-directory=/opt/build/operating_systems/alpine/work/imagetest-1e909864-b820-4939-9dff-b4918184c632/boot/efi"
 \
"--boot-directory=/opt/build/operating_systems/alpine/work/imagetest-1e909864-b820-4939-9dff-b4918184c632/boot"
Installing for x86_64-efi platform.
File descriptor 4 (/dev/vdd1) leaked on vgs invocation. Parent PID 10249: 
grub-install
You have a memory leak (not released memory pool):
[0x7fcace1b3f80] dtree
Internal error: Unreleased memory pool(s) found.
File descriptor 4 (/dev/vdd1) leaked on vgs invocation. Parent PID 10249: 
grub-install
You have a memory leak (not released memory pool):
[0x7fcace1b3f80] dtree
Internal error: Unreleased memory pool(s) found.
Installation finished. No error reported.
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to