Hi,
I would like to ask for help on a particular failure I am observing.
I have this boot flow:
OVMF -> bootx64.efi (GRUB) ---chainloads--> vmlinux.efi
1. Grub updates a variable grub.env in the EFI partition (sector 7283/7284)
virtio_blk_handle_write vdev 0x5e72efe06150 req 0x5e72ef435910 sector 7283 nsectors 1
virtio_blk_rw_complete vdev 0x5e72efe06150 req 0x5e72ef435910 ret 0
virtio_blk_req_complete vdev 0x5e72efe06150 req 0x5e72ef435910 status 0
virtio_blk_handle_write vdev 0x5e72efe06150 req 0x5e72ef435910 sector 7284 nsectors 1
virtio_blk_rw_complete vdev 0x5e72efe06150 req 0x5e72ef435910 ret 0
virtio_blk_req_complete vdev 0x5e72efe06150 req 0x5e72ef435910 status 0
save_env --file (hd0,gpt2)/EFI/foo/grub.env BOOT
2. The vmlinux EFI stub results in a write area which includes the grub env block
virtio_blk_handle_write vdev 0x5e72efe06150 req 0x5e72ef435910 sector 4097 nsectors 1
virtio_blk_rw_complete vdev 0x5e72efe06150 req 0x5e72ef435910 ret 0
virtio_blk_req_complete vdev 0x5e72efe06150 req 0x5e72ef435910 status 0
virtio_blk_handle_write vdev 0x5e72efe06150 req 0x5e72ef435910 sector 4128 nsectors 64
virtio_blk_rw_complete vdev 0x5e72efe06150 req 0x5e72ef435910 ret 0
virtio_blk_req_complete vdev 0x5e72efe06150 req 0x5e72ef435910 status 0
virtio_blk_handle_write vdev 0x5e72efe06150 req 0x5e72ef435910 sector 5704 nsectors 64
virtio_blk_rw_complete vdev 0x5e72efe06150 req 0x5e72ef435910 ret 0
virtio_blk_req_complete vdev 0x5e72efe06150 req 0x5e72ef435910 status 0
virtio_blk_handle_write vdev 0x5e72efe06150 req 0x5e72ef435910 sector 7280 nsectors 128 ## <====
virtio_blk_rw_complete vdev 0x5e72efe06150 req 0x5e72ef435910 ret 0
virtio_blk_req_complete vdev 0x5e72efe06150 req 0x5e72ef435910 status 0
virtio_blk_handle_write vdev 0x5e72efe06150 req 0x5e72ef435910 sector 8304 nsectors 128
The end result of this is that the grub.env file is reset to its original value, with the change written by grub reverted.
This pattern seen during the EFI stub preamble is also seen during OVMF startup, so it seems this is some common EFI VAR ? related code. At OVMF startup this seems to repeat a number of times before Grub starts.
===> If I move OVMF to pflash disks for code + vars, this issue does not happen.
DETAILS:
I am using Ubuntu Noble (24.04) packages for the test environment.
QEMU:
----
qemu-system-x86_64 \
-trace "virtio_blk*" \
-accel kvm \
-bios /usr/share/ovmf/OVMF.fd \
-drive format=raw,file=disk.img,if=virtio \
-device virtio-rng-pci \
-netdev user,id=net0,hostfwd=tcp::8888-:8888 \
-device virtio-net-pci,netdev=net0 \
-m 1G \
-serial mon:stdio \
-nodefaults \
-nographic
DISK:
-----
fdisk -l disk.img
Disk disk.img: 600 MiB, 629145600 bytes, 1228800 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: gpt
Disk identifier: 8984DCD3-7190-1246-A4BB-980CEE0EB65A
Device Start End Sectors Size Type
disk.img1 2048 4095 2048 1M BIOS boot
disk.img2 4096 208895 204800 100M EFI System ## EFI PARTITION
disk.img3 208896 618495 409600 200M Microsoft basic data ## BOOT PARTITION
disk.img4 618496 1028095 409600 200M Microsoft basic data
disk.img5 1028096 1030143 2048 1M Linux filesystem
disk.img6 1030144 1228766 198623 97M Linux filesystem
EFI PARTITION:
--------------
.:
total 22
drwxr-xr-x 3 root root 512 Jan 1 1970 ./
drwxrwxr-x 5 flotter flotter 13 Sep 26 11:30 ../
drwxr-xr-x 4 root root 512 Sep 25 22:02 EFI/
-rwxr-xr-x 1 root root 11375 Sep 26 11:01 NvVars*
./EFI:
total 2
drwxr-xr-x 4 root root 512 Sep 25 22:02 ./
drwxr-xr-x 3 root root 512 Jan 1 1970 ../
drwxr-xr-x 2 root root 512 Sep 25 22:02 boot/
drwxr-xr-x 2 root root 512 Sep 25 22:02 foo/
./EFI/boot:
total 557
drwxr-xr-x 2 root root 512 Sep 25 22:02 ./
drwxr-xr-x 4 root root 512 Sep 25 22:02 ../
-rwxr-xr-x 1 root root 569344 Sep 25 22:02 bootx64.efi*
./EFI/foo:
total 6
drwxr-xr-x 2 root root 512 Sep 25 22:02 ./
drwxr-xr-x 4 root root 512 Sep 25 22:02 ../
-rwxr-xr-x 1 root root 3151 Sep 25 22:02 grub.cfg*
-rwxr-xr-x 1 root root 1024 Sep 25 22:02 grub.env*
BOOT PARTITION:
--------------
vmlinux.efi ## EFI STUB binary (Linux + initramfs)
Kind Regards,
Fred Lotter