public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* bootloader only see first disk
@ 2018-09-15 16:36 Aurélien
  2018-09-16 10:04 ` Laszlo Ersek
  0 siblings, 1 reply; 5+ messages in thread
From: Aurélien @ 2018-09-15 16:36 UTC (permalink / raw)
  To: edk2-devel

Hi,

I don't know if it is the right place to report a bug, sorry if not.

I'm a Promox user and the last version (5.2) has a package versionned
20180612-1 actually  (
https://git.proxmox.com/?p=pve-edk2-firmware.git;a=summary ) which is
based on 5a56c0493955cf55e7eef96dbba815cfbb067d7d  commit of edk2. A
build from the current master a few days ago has the same problem.
The previous Promox version (5.1 whith this pve-qemu-kvm package) use a
edk2 version dating from 2017 or before (it could be from before
September 2016 but I'm not sure), which has no problem. I tested on my
workstation running gentoo which has a version based on UDK2017 branch
with source code from February 11, 2018 and it's working too.
So I think the problem is located in  the OVMF_CODE.fd code from 2018
(but without any certainty).


Actual behaviour (with all the various Linux distribution: Debian 9,
Ubuntu 18.04, Centos 7.5 ...) with a VM which has EFI enabled:
- grub is loaded and only see the first disk (where it is installed),
the "ls" command in the grub shell return: "(hd0) (hd0,gpt1) (cd0)"  
and  there is also hd1 and hd2 and in my case this is problematic as
/boot is on hd1.
- when pressing "escape" on the boot to go the the setup screen and just
chose "continue" it's ok (grub sees all the disks), my current
workaround to boot the installed OS.
- when installing an OS like Ubuntu, CentOS ... on the first reboot it's
ok (I thinks something in the installation, like seting a new boot entry
with grub-install, efibootmgr)

Expected behaviour:
- grub see all the disk (the ls command return hd0, hd1 hd2 ....) and
not the first one (where the EFI boot partition is located).
(sorry, I haven't tried any other boot loader)

- Step to reproduce:
 start a VM with 3 disks and EFI enabled (OVMF_CODE), install a Linux on
the 2nd disk (/ & swap) and the EFI boot partition on the first disk
(/boot/efi on "sda1"), cold start the VM.

I can help by testing with specific version (or another boot loader),
tell me.

Regards

Aurélien

ps: typical command line to start the VM:
/usr/bin/kvm \
  -id 20 \
  -name testvm.mydomain \
  -chardev 'socket,id=qmp,path=/var/run/qemu-server/20.qmp,server,nowait' \
  -mon 'chardev=qmp,mode=control' \
  -pidfile /var/run/qemu-server/20.pid \
  -daemonize \
  -smbios 'type=1,uuid=88dc4e6b-34b8-46a7-a573-26596c34855d' \
  -drive
'if=pflash,unit=0,format=raw,readonly,file=/usr/share/pve-edk2-firmware//OVMF_CODE.fd'
\
  -drive
'if=pflash,unit=1,format=raw,id=drive-efidisk0,file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-4.raw'
\
  -smp '8,sockets=1,cores=8,maxcpus=8' \
  -nodefaults \
  -boot
'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg'
\
  -vga qxl \
  -vnc unix:/var/run/qemu-server/20.vnc,x509,password \
  -cpu host,+kvm_pv_unhalt,+kvm_pv_eoi \
  -m 512 \
  -object 'memory-backend-ram,id=ram-node0,size=512M' \
  -numa 'node,nodeid=0,cpus=0-7,memdev=ram-node0' \
  -k fr \
  -object 'iothread,id=iothread-virtioscsi1' \
  -object 'iothread,id=iothread-virtioscsi2' \
  -machine 'type=pc-i440fx-2.9' \
  -device 'pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5' \
  -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
  -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
  -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
  -chardev 'socket,path=/var/run/qemu-server/20.qga,server,nowait,id=qga0' \
  -device 'virtio-serial,id=qga0,bus=pci.0,addr=0x8' \
  -device 'virtserialport,chardev=qga0,name=org.qemu.guest_agent.0' \
  -spice
'tls-port=61004,addr=127.0.0.1,tls-ciphers=HIGH,seamless-migration=on' \
  -device 'virtio-serial,id=spice,bus=pci.0,addr=0x9' \
  -chardev 'spicevmc,id=vdagent,name=vdagent' \
  -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
  -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
  -iscsi 'initiator-name=iqn.1993-08.org.debian:01:f9e4631950da' \
  -drive 'if=none,id=drive-ide2,media=cdrom,aio=threads' \
  -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=100' \
  -device 'virtio-scsi-pci,id=virtioscsi0,bus=pci.3,addr=0x1' \
  -drive
'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-1.raw,if=none,id=drive-scsi0,format=raw,cache=none,aio=native,detect-zeroes=on'
\
  -device
'scsi-hd,bus=virtioscsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=200'
\
  -device
'virtio-scsi-pci,id=virtioscsi1,bus=pci.3,addr=0x2,iothread=iothread-virtioscsi1'
\
  -drive
'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-2.raw,if=none,id=drive-scsi1,format=raw,cache=none,aio=native,detect-zeroes=on'
\
  -device
'scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1'
\
  -device
'virtio-scsi-pci,id=virtioscsi2,bus=pci.3,addr=0x3,iothread=iothread-virtioscsi2'
\
  -drive
'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-3.raw,if=none,id=drive-scsi2,format=raw,cache=none,aio=native,detect-zeroes=on'
\
  -device
'scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2'
\
  -netdev
'type=tap,id=net0,ifname=tap20i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on'
\
  -device
'virtio-net-pci,mac=4A:63:6D:11:11:11,netdev=net0,bus=pci.0,addr=0x12,id=net0'





^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: bootloader only see first disk
  2018-09-15 16:36 bootloader only see first disk Aurélien
@ 2018-09-16 10:04 ` Laszlo Ersek
  2018-09-17  8:34   ` Thomas Lamprecht
  2018-09-17 10:28   ` Aurelien
  0 siblings, 2 replies; 5+ messages in thread
From: Laszlo Ersek @ 2018-09-16 10:04 UTC (permalink / raw)
  To: Aurélien; +Cc: edk2-devel, Thomas Lamprecht

Hello Aurélien,

adding Thomas to the CC list, and commenting at the bottom:

On 09/15/18 18:36, Aurélien wrote:
> Hi,
>
> I don't know if it is the right place to report a bug, sorry if not.
>
> I'm a Promox user and the last version (5.2) has a package versionned
> 20180612-1 actually  (
> https://git.proxmox.com/?p=pve-edk2-firmware.git;a=summary ) which is
> based on 5a56c0493955cf55e7eef96dbba815cfbb067d7d  commit of edk2. A
> build from the current master a few days ago has the same problem. The
> previous Promox version (5.1 whith this pve-qemu-kvm package) use a
> edk2 version dating from 2017 or before (it could be from before
> September 2016 but I'm not sure), which has no problem. I tested on my
> workstation running gentoo which has a version based on UDK2017 branch
> with source code from February 11, 2018 and it's working too. So I
> think the problem is located in  the OVMF_CODE.fd code from 2018 (but
> without any certainty).
>
> Actual behaviour (with all the various Linux distribution: Debian 9,
> Ubuntu 18.04, Centos 7.5 ...) with a VM which has EFI enabled:
> - grub is loaded and only see the first disk (where it is installed),
>   the "ls" command in the grub shell return: "(hd0) (hd0,gpt1)
>   (cd0)"   and  there is also hd1 and hd2 and in my case this is
>   problematic as /boot is on hd1.
> - when pressing "escape" on the boot to go the the setup screen and
>   just chose "continue" it's ok (grub sees all the disks), my current
>   workaround to boot the installed OS.
> - when installing an OS like Ubuntu, CentOS ... on the first reboot
>   it's ok (I thinks something in the installation, like seting a new
>   boot entry with grub-install, efibootmgr)
>
> Expected behaviour:
> - grub see all the disk (the ls command return hd0, hd1 hd2 ....) and
>   not the first one (where the EFI boot partition is located).
>   (sorry, I haven't tried any other boot loader)
>
> - Step to reproduce:
>   start a VM with 3 disks and EFI enabled (OVMF_CODE), install a Linux
>   on the 2nd disk (/ & swap) and the EFI boot partition on the first
>   disk (/boot/efi on "sda1"), cold start the VM.
>
> I can help by testing with specific version (or another boot loader),
> tell me.
>
> Regards
>
> Aurélien
>
> ps: typical command line to start the VM:
> /usr/bin/kvm \
>   -id 20 \
>   -name testvm.mydomain \
>   -chardev 'socket,id=qmp,path=/var/run/qemu-server/20.qmp,server,nowait' \
>   -mon 'chardev=qmp,mode=control' \
>   -pidfile /var/run/qemu-server/20.pid \
>   -daemonize \
>   -smbios 'type=1,uuid=88dc4e6b-34b8-46a7-a573-26596c34855d' \
>   -drive 'if=pflash,unit=0,format=raw,readonly,file=/usr/share/pve-edk2-firmware//OVMF_CODE.fd' \
>   -drive 'if=pflash,unit=1,format=raw,id=drive-efidisk0,file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-4.raw' \
>   -smp '8,sockets=1,cores=8,maxcpus=8' \
>   -nodefaults \
>   -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
>   -vga qxl \
>   -vnc unix:/var/run/qemu-server/20.vnc,x509,password \
>   -cpu host,+kvm_pv_unhalt,+kvm_pv_eoi \
>   -m 512 \
>   -object 'memory-backend-ram,id=ram-node0,size=512M' \
>   -numa 'node,nodeid=0,cpus=0-7,memdev=ram-node0' \
>   -k fr \
>   -object 'iothread,id=iothread-virtioscsi1' \
>   -object 'iothread,id=iothread-virtioscsi2' \
>   -machine 'type=pc-i440fx-2.9' \
>   -device 'pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5' \
>   -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
>   -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
>   -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
>   -chardev 'socket,path=/var/run/qemu-server/20.qga,server,nowait,id=qga0' \
>   -device 'virtio-serial,id=qga0,bus=pci.0,addr=0x8' \
>   -device 'virtserialport,chardev=qga0,name=org.qemu.guest_agent.0' \
>   -spice 'tls-port=61004,addr=127.0.0.1,tls-ciphers=HIGH,seamless-migration=on' \
>   -device 'virtio-serial,id=spice,bus=pci.0,addr=0x9' \
>   -chardev 'spicevmc,id=vdagent,name=vdagent' \
>   -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
>   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
>   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:f9e4631950da' \
>   -drive 'if=none,id=drive-ide2,media=cdrom,aio=threads' \
>   -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=100' \
>   -device 'virtio-scsi-pci,id=virtioscsi0,bus=pci.3,addr=0x1' \
>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-1.raw,if=none,id=drive-scsi0,format=raw,cache=none,aio=native,detect-zeroes=on' \
>   -device 'scsi-hd,bus=virtioscsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=200' \
>   -device 'virtio-scsi-pci,id=virtioscsi1,bus=pci.3,addr=0x2,iothread=iothread-virtioscsi1' \
>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-2.raw,if=none,id=drive-scsi1,format=raw,cache=none,aio=native,detect-zeroes=on' \
>   -device 'scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1' \
>   -device 'virtio-scsi-pci,id=virtioscsi2,bus=pci.3,addr=0x3,iothread=iothread-virtioscsi2' \
>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-3.raw,if=none,id=drive-scsi2,format=raw,cache=none,aio=native,detect-zeroes=on' \
>   -device 'scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2' \
>   -netdev 'type=tap,id=net0,ifname=tap20i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
>   -device 'virtio-net-pci,mac=4A:63:6D:11:11:11,netdev=net0,bus=pci.0,addr=0x12,id=net0'

This is a very good issue report, thank you for it. The amount of detail
you provided allows me to explain the status & behavior to you.

(1) Originally, OVMF used to connect all drivers to all devices in the
system. In a sense this was convenient, however it resulted in a lot of
wasted work too -- if you had tens or hundreds of devices, the boot
could take extremely long. And again, most of that work was wasted,
since you almost never want to actually attempt booting off of tens or
hundreds of devices. You only really want to connect those devices that
you reasonably want to attempt booting off of as well.

(In the above, "connect" is used in the sense "bind" or "probe". Esp.
with a Linux background, "probe" is the most fitting word, probably.)


(2) Because the set of devices connected at boot is platform policy
(i.e., UEFI platforms are at liberty to decide what devices they
connect), we changed the above behavior to a minimalistic approach, in
the following patch series:

  [edk2] [PATCH 0/6] OvmfPkg, ArmVirtQemu: leaner platform BDS policy for connecting devices
  http://mid.mail-archive.com/20180313212233.19215-1-lersek@redhat.com

This was then pushed as commit range 12957e56d26d..ff1d0fbfbaec, in
March 2018.

With this set in place, if you provided *some* devices with the
'bootindex=N' property, then OVMF would no longer connect all devices in
the system, it would connect only those that you marked with the
bootindex property. (And then OVMF would auto-generate UEFI boot options
for those only, as well.)

In other words, the bootindex property was promoted from its previous
"boot option filtering/reordering only" role to a "steering of device
probing" role as well.


(3) The EFI build of grub most likely doesn't find your disks -- after
(2) -- because it doesn't connect devices itself, it relies on the
platform firmware to connect disks.


(4) If you interrupt the boot process and enter the setup utility, the
latter will connect all devices, regardless of (2). This is your current
workaround, IIUC.


(5) There are many classes of devices, and some of those should be
connected even if they are not "bootable" at all. The series in (2)
caused a regression for them, and we had to fix them up gradually. See
the following commits:

- OvmfPkg/PlatformBootManagerLib: add USB keyboard to ConIn
- OvmfPkg/PlatformBootManagerLib: connect consoles unconditionally
- OvmfPkg/PlatformBootManagerLib: connect Virtio RNG devices again

However, the disks that you mention are *not* like this; they should
indeed *not* be connected unless you mark them for booting.


(6) The solution is either to instruct grub (I don't know how) to
connect the disks in question itself, *or* to add the "bootindex=N"
properties (with some suitable N values) to the disk devices that you
want OVMF to connect for you (even if they contain no EFI system
partition and/or a UEFI boot loader application). Given your current
command line, the latter option translates to the "scsi-hd" devices with
identifiers "scsi1" and "scsi2". For example:

  -device scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,bootindex=201 \
  -device scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,bootindex=202 \

Hope this helps,
Laszlo


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: bootloader only see first disk
  2018-09-16 10:04 ` Laszlo Ersek
@ 2018-09-17  8:34   ` Thomas Lamprecht
  2018-09-17 10:44     ` Aurelien Minet
  2018-09-17 10:28   ` Aurelien
  1 sibling, 1 reply; 5+ messages in thread
From: Thomas Lamprecht @ 2018-09-17  8:34 UTC (permalink / raw)
  To: Laszlo Ersek, Aurélien; +Cc: edk2-devel

Hi Laszlo,

On 9/16/18 12:04 PM, Laszlo Ersek wrote:
> Hello Aurélien,
> 
> adding Thomas to the CC list, and commenting at the bottom:

thanks for CC'ing and thanks to you Aurélien for writing your report.

> 
> On 09/15/18 18:36, Aurélien wrote:
>> Hi,
>>
>> I don't know if it is the right place to report a bug, sorry if not.
>>
>> I'm a Promox user and the last version (5.2) has a package versionned
>> 20180612-1 actually  (
>> https://git.proxmox.com/?p=pve-edk2-firmware.git;a=summary ) which is
>> based on 5a56c0493955cf55e7eef96dbba815cfbb067d7d  commit of edk2. A
>> build from the current master a few days ago has the same problem. The
>> previous Promox version (5.1 whith this pve-qemu-kvm package) use a
>> edk2 version dating from 2017 or before (it could be from before
>> September 2016 but I'm not sure), which has no problem. I tested on my
>> workstation running gentoo which has a version based on UDK2017 branch
>> with source code from February 11, 2018 and it's working too. So I
>> think the problem is located in  the OVMF_CODE.fd code from 2018 (but
>> without any certainty).
>>
>> Actual behaviour (with all the various Linux distribution: Debian 9,
>> Ubuntu 18.04, Centos 7.5 ...) with a VM which has EFI enabled:
>> - grub is loaded and only see the first disk (where it is installed),
>>   the "ls" command in the grub shell return: "(hd0) (hd0,gpt1)
>>   (cd0)"   and  there is also hd1 and hd2 and in my case this is
>>   problematic as /boot is on hd1.
>> - when pressing "escape" on the boot to go the the setup screen and
>>   just chose "continue" it's ok (grub sees all the disks), my current
>>   workaround to boot the installed OS.
>> - when installing an OS like Ubuntu, CentOS ... on the first reboot
>>   it's ok (I thinks something in the installation, like seting a new
>>   boot entry with grub-install, efibootmgr)
>>
>> Expected behaviour:
>> - grub see all the disk (the ls command return hd0, hd1 hd2 ....) and
>>   not the first one (where the EFI boot partition is located).
>>   (sorry, I haven't tried any other boot loader)
>>
>> - Step to reproduce:
>>   start a VM with 3 disks and EFI enabled (OVMF_CODE), install a Linux
>>   on the 2nd disk (/ & swap) and the EFI boot partition on the first
>>   disk (/boot/efi on "sda1"), cold start the VM.
>>
>> I can help by testing with specific version (or another boot loader),
>> tell me.
>>
>> Regards
>>
>> Aurélien
>>
>> ps: typical command line to start the VM:
>> /usr/bin/kvm \
>>   -id 20 \
>>   -name testvm.mydomain \
>>   -chardev 'socket,id=qmp,path=/var/run/qemu-server/20.qmp,server,nowait' \
>>   -mon 'chardev=qmp,mode=control' \
>>   -pidfile /var/run/qemu-server/20.pid \
>>   -daemonize \
>>   -smbios 'type=1,uuid=88dc4e6b-34b8-46a7-a573-26596c34855d' \
>>   -drive 'if=pflash,unit=0,format=raw,readonly,file=/usr/share/pve-edk2-firmware//OVMF_CODE.fd' \
>>   -drive 'if=pflash,unit=1,format=raw,id=drive-efidisk0,file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-4.raw' \
>>   -smp '8,sockets=1,cores=8,maxcpus=8' \
>>   -nodefaults \
>>   -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
>>   -vga qxl \
>>   -vnc unix:/var/run/qemu-server/20.vnc,x509,password \
>>   -cpu host,+kvm_pv_unhalt,+kvm_pv_eoi \
>>   -m 512 \
>>   -object 'memory-backend-ram,id=ram-node0,size=512M' \
>>   -numa 'node,nodeid=0,cpus=0-7,memdev=ram-node0' \
>>   -k fr \
>>   -object 'iothread,id=iothread-virtioscsi1' \
>>   -object 'iothread,id=iothread-virtioscsi2' \
>>   -machine 'type=pc-i440fx-2.9' \
>>   -device 'pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5' \
>>   -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
>>   -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
>>   -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
>>   -chardev 'socket,path=/var/run/qemu-server/20.qga,server,nowait,id=qga0' \
>>   -device 'virtio-serial,id=qga0,bus=pci.0,addr=0x8' \
>>   -device 'virtserialport,chardev=qga0,name=org.qemu.guest_agent.0' \
>>   -spice 'tls-port=61004,addr=127.0.0.1,tls-ciphers=HIGH,seamless-migration=on' \
>>   -device 'virtio-serial,id=spice,bus=pci.0,addr=0x9' \
>>   -chardev 'spicevmc,id=vdagent,name=vdagent' \
>>   -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
>>   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
>>   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:f9e4631950da' \
>>   -drive 'if=none,id=drive-ide2,media=cdrom,aio=threads' \
>>   -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=100' \
>>   -device 'virtio-scsi-pci,id=virtioscsi0,bus=pci.3,addr=0x1' \
>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-1.raw,if=none,id=drive-scsi0,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>   -device 'scsi-hd,bus=virtioscsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=200' \
>>   -device 'virtio-scsi-pci,id=virtioscsi1,bus=pci.3,addr=0x2,iothread=iothread-virtioscsi1' \
>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-2.raw,if=none,id=drive-scsi1,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>   -device 'scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1' \
>>   -device 'virtio-scsi-pci,id=virtioscsi2,bus=pci.3,addr=0x3,iothread=iothread-virtioscsi2' \
>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-3.raw,if=none,id=drive-scsi2,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>   -device 'scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2' \
>>   -netdev 'type=tap,id=net0,ifname=tap20i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
>>   -device 'virtio-net-pci,mac=4A:63:6D:11:11:11,netdev=net0,bus=pci.0,addr=0x12,id=net0'
> 
> This is a very good issue report, thank you for it. The amount of detail
> you provided allows me to explain the status & behavior to you.
> 
> (1) Originally, OVMF used to connect all drivers to all devices in the
> system. In a sense this was convenient, however it resulted in a lot of
> wasted work too -- if you had tens or hundreds of devices, the boot
> could take extremely long. And again, most of that work was wasted,
> since you almost never want to actually attempt booting off of tens or
> hundreds of devices. You only really want to connect those devices that
> you reasonably want to attempt booting off of as well.
> 
> (In the above, "connect" is used in the sense "bind" or "probe". Esp.
> with a Linux background, "probe" is the most fitting word, probably.)
> 
> 
> (2) Because the set of devices connected at boot is platform policy
> (i.e., UEFI platforms are at liberty to decide what devices they
> connect), we changed the above behavior to a minimalistic approach, in
> the following patch series:
> 
>   [edk2] [PATCH 0/6] OvmfPkg, ArmVirtQemu: leaner platform BDS policy for connecting devices
>   http://mid.mail-archive.com/20180313212233.19215-1-lersek@redhat.com
> 
> This was then pushed as commit range 12957e56d26d..ff1d0fbfbaec, in
> March 2018.
> 
> With this set in place, if you provided *some* devices with the
> 'bootindex=N' property, then OVMF would no longer connect all devices in
> the system, it would connect only those that you marked with the
> bootindex property. (And then OVMF would auto-generate UEFI boot options
> for those only, as well.)
> 
> In other words, the bootindex property was promoted from its previous
> "boot option filtering/reordering only" role to a "steering of device
> probing" role as well.
> 

Ah yes, I should have figured that out, I even mentioned the faster boot
on multiple devices in the package changelog but never wondered about what
this implies for setups like Aurélien has, argh!

> 
> (3) The EFI build of grub most likely doesn't find your disks -- after
> (2) -- because it doesn't connect devices itself, it relies on the
> platform firmware to connect disks.
> 
> 
> (4) If you interrupt the boot process and enter the setup utility, the
> latter will connect all devices, regardless of (2). This is your current
> workaround, IIUC.
> 
> 
> (5) There are many classes of devices, and some of those should be
> connected even if they are not "bootable" at all. The series in (2)
> caused a regression for them, and we had to fix them up gradually. See
> the following commits:
> 
> - OvmfPkg/PlatformBootManagerLib: add USB keyboard to ConIn
> - OvmfPkg/PlatformBootManagerLib: connect consoles unconditionally
> - OvmfPkg/PlatformBootManagerLib: connect Virtio RNG devices again
> 
> However, the disks that you mention are *not* like this; they should
> indeed *not* be connected unless you mark them for booting.
> 
> 
> (6) The solution is either to instruct grub (I don't know how) to
> connect the disks in question itself, *or* to add the "bootindex=N"
> properties (with some suitable N values) to the disk devices that you
> want OVMF to connect for you (even if they contain no EFI system
> partition and/or a UEFI boot loader application). Given your current
> command line, the latter option translates to the "scsi-hd" devices with
> identifiers "scsi1" and "scsi2". For example:
> 
>   -device scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,bootindex=201 \
>   -device scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,bootindex=202 \

So we probably want to add a per-disk 'bootable' flag in our frontend,
which adds a higher bootindex (= lower priority) to all marked disks.
This would allow to still boot faster with lots of disks but allows
setups like yours, Aurélien.

> 
> Hope this helps,

Yes, it helps a lot! Much thanks for your explanation, appreciated!

cheers,
Thomas




^ permalink raw reply	[flat|nested] 5+ messages in thread

* bootloader only see first disk
  2018-09-16 10:04 ` Laszlo Ersek
  2018-09-17  8:34   ` Thomas Lamprecht
@ 2018-09-17 10:28   ` Aurelien
  1 sibling, 0 replies; 5+ messages in thread
From: Aurelien @ 2018-09-17 10:28 UTC (permalink / raw)
  To: Laszlo Ersek, edk2-devel; +Cc: Thomas Lamprecht

Hi Laszlo,

On 16/09/2018 12:04, Laszlo Ersek wrote:
> Hello Aurélien,
> 
> adding Thomas to the CC list, and commenting at the bottom:
> 
> On 09/15/18 18:36, Aurélien wrote:
>> Hi,
>>
>> I don't know if it is the right place to report a bug, sorry if not.
>>
>> I'm a Promox user and the last version (5.2) has a package versionned
>> 20180612-1 actually  (
>> https://git.proxmox.com/?p=pve-edk2-firmware.git;a=summary ) which is
>> based on 5a56c0493955cf55e7eef96dbba815cfbb067d7d  commit of edk2. A
>> build from the current master a few days ago has the same problem. The
>> previous Promox version (5.1 whith this pve-qemu-kvm package) use a
>> edk2 version dating from 2017 or before (it could be from before
>> September 2016 but I'm not sure), which has no problem. I tested on my
>> workstation running gentoo which has a version based on UDK2017 branch
>> with source code from February 11, 2018 and it's working too. So I
>> think the problem is located in  the OVMF_CODE.fd code from 2018 (but
>> without any certainty).
>>
>> Actual behaviour (with all the various Linux distribution: Debian 9,
>> Ubuntu 18.04, Centos 7.5 ...) with a VM which has EFI enabled:
>> - grub is loaded and only see the first disk (where it is installed),
>>   the "ls" command in the grub shell return: "(hd0) (hd0,gpt1)
>>   (cd0)"   and  there is also hd1 and hd2 and in my case this is
>>   problematic as /boot is on hd1.
>> - when pressing "escape" on the boot to go the the setup screen and
>>   just chose "continue" it's ok (grub sees all the disks), my current
>>   workaround to boot the installed OS.
>> - when installing an OS like Ubuntu, CentOS ... on the first reboot
>>   it's ok (I thinks something in the installation, like seting a new
>>   boot entry with grub-install, efibootmgr)
>>
>> Expected behaviour:
>> - grub see all the disk (the ls command return hd0, hd1 hd2 ....) and
>>   not the first one (where the EFI boot partition is located).
>>   (sorry, I haven't tried any other boot loader)
>>
>> - Step to reproduce:
>>   start a VM with 3 disks and EFI enabled (OVMF_CODE), install a Linux
>>   on the 2nd disk (/ & swap) and the EFI boot partition on the first
>>   disk (/boot/efi on "sda1"), cold start the VM.
>>
>> I can help by testing with specific version (or another boot loader),
>> tell me.
>>
>> Regards
>>
>> Aurélien
>>
>> ps: typical command line to start the VM:
>> /usr/bin/kvm \
>>   -id 20 \
>>   -name testvm.mydomain \
>>   -chardev 'socket,id=qmp,path=/var/run/qemu-server/20.qmp,server,nowait' \
>>   -mon 'chardev=qmp,mode=control' \
>>   -pidfile /var/run/qemu-server/20.pid \
>>   -daemonize \
>>   -smbios 'type=1,uuid=88dc4e6b-34b8-46a7-a573-26596c34855d' \
>>   -drive 'if=pflash,unit=0,format=raw,readonly,file=/usr/share/pve-edk2-firmware//OVMF_CODE.fd' \
>>   -drive 'if=pflash,unit=1,format=raw,id=drive-efidisk0,file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-4.raw' \
>>   -smp '8,sockets=1,cores=8,maxcpus=8' \
>>   -nodefaults \
>>   -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
>>   -vga qxl \
>>   -vnc unix:/var/run/qemu-server/20.vnc,x509,password \
>>   -cpu host,+kvm_pv_unhalt,+kvm_pv_eoi \
>>   -m 512 \
>>   -object 'memory-backend-ram,id=ram-node0,size=512M' \
>>   -numa 'node,nodeid=0,cpus=0-7,memdev=ram-node0' \
>>   -k fr \
>>   -object 'iothread,id=iothread-virtioscsi1' \
>>   -object 'iothread,id=iothread-virtioscsi2' \
>>   -machine 'type=pc-i440fx-2.9' \
>>   -device 'pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5' \
>>   -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
>>   -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
>>   -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
>>   -chardev 'socket,path=/var/run/qemu-server/20.qga,server,nowait,id=qga0' \
>>   -device 'virtio-serial,id=qga0,bus=pci.0,addr=0x8' \
>>   -device 'virtserialport,chardev=qga0,name=org.qemu.guest_agent.0' \
>>   -spice 'tls-port=61004,addr=127.0.0.1,tls-ciphers=HIGH,seamless-migration=on' \
>>   -device 'virtio-serial,id=spice,bus=pci.0,addr=0x9' \
>>   -chardev 'spicevmc,id=vdagent,name=vdagent' \
>>   -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
>>   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
>>   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:f9e4631950da' \
>>   -drive 'if=none,id=drive-ide2,media=cdrom,aio=threads' \
>>   -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=100' \
>>   -device 'virtio-scsi-pci,id=virtioscsi0,bus=pci.3,addr=0x1' \
>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-1.raw,if=none,id=drive-scsi0,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>   -device 'scsi-hd,bus=virtioscsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=200' \
>>   -device 'virtio-scsi-pci,id=virtioscsi1,bus=pci.3,addr=0x2,iothread=iothread-virtioscsi1' \
>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-2.raw,if=none,id=drive-scsi1,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>   -device 'scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1' \
>>   -device 'virtio-scsi-pci,id=virtioscsi2,bus=pci.3,addr=0x3,iothread=iothread-virtioscsi2' \
>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-3.raw,if=none,id=drive-scsi2,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>   -device 'scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2' \
>>   -netdev 'type=tap,id=net0,ifname=tap20i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
>>   -device 'virtio-net-pci,mac=4A:63:6D:11:11:11,netdev=net0,bus=pci.0,addr=0x12,id=net0'
> 
> This is a very good issue report, thank you for it. The amount of detail
> you provided allows me to explain the status & behavior to you.
> 
> (1) Originally, OVMF used to connect all drivers to all devices in the
> system. In a sense this was convenient, however it resulted in a lot of
> wasted work too -- if you had tens or hundreds of devices, the boot
> could take extremely long. And again, most of that work was wasted,
> since you almost never want to actually attempt booting off of tens or
> hundreds of devices. You only really want to connect those devices that
> you reasonably want to attempt booting off of as well.
> 
> (In the above, "connect" is used in the sense "bind" or "probe". Esp.
> with a Linux background, "probe" is the most fitting word, probably.)
> 
> 
> (2) Because the set of devices connected at boot is platform policy
> (i.e., UEFI platforms are at liberty to decide what devices they
> connect), we changed the above behavior to a minimalistic approach, in
> the following patch series:
> 
>   [edk2] [PATCH 0/6] OvmfPkg, ArmVirtQemu: leaner platform BDS policy for connecting devices
>   http://mid.mail-archive.com/20180313212233.19215-1-lersek@redhat.com
> 
> This was then pushed as commit range 12957e56d26d..ff1d0fbfbaec, in
> March 2018.
> 
> With this set in place, if you provided *some* devices with the
> 'bootindex=N' property, then OVMF would no longer connect all devices in
> the system, it would connect only those that you marked with the
> bootindex property. (And then OVMF would auto-generate UEFI boot options
> for those only, as well.)
> 
> In other words, the bootindex property was promoted from its previous
> "boot option filtering/reordering only" role to a "steering of device
> probing" role as well.
> 
> 
> (3) The EFI build of grub most likely doesn't find your disks -- after
> (2) -- because it doesn't connect devices itself, it relies on the
> platform firmware to connect disks.
> 
> 
> (4) If you interrupt the boot process and enter the setup utility, the
> latter will connect all devices, regardless of (2). This is your current
> workaround, IIUC.
> 
> 
> (5) There are many classes of devices, and some of those should be
> connected even if they are not "bootable" at all. The series in (2)
> caused a regression for them, and we had to fix them up gradually. See
> the following commits:
> 
> - OvmfPkg/PlatformBootManagerLib: add USB keyboard to ConIn
> - OvmfPkg/PlatformBootManagerLib: connect consoles unconditionally
> - OvmfPkg/PlatformBootManagerLib: connect Virtio RNG devices again
> 
> However, the disks that you mention are *not* like this; they should
> indeed *not* be connected unless you mark them for booting.
> 
> 
> (6) The solution is either to instruct grub (I don't know how) to
> connect the disks in question itself, *or* to add the "bootindex=N"
> properties (with some suitable N values) to the disk devices that you
> want OVMF to connect for you (even if they contain no EFI system
> partition and/or a UEFI boot loader application). Given your current
> command line, the latter option translates to the "scsi-hd" devices with
> identifiers "scsi1" and "scsi2". For example:
> 
>   -device scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,bootindex=201 \
>   -device scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,bootindex=202 \
> 
> Hope this helps,
> Laszlo
> 


Thank you very much for you detailed answer, it helps a lot.
Now I fully understand what's going on and the new behaviour:
"minimalistic approach", introduced during march.
Effectively no need to have all devices connected by the platform
firmware but just a few of them (in my case the first 2 disks).
I thought that bootindex was a bit legacy while using EFI, and
was limited to choose boot order between CD, Hard drives or PXE.
I tested the solution you point in [6] with adding bootindex=202 to the
second disk and it works perfectly.


Best Regards

Aurélien


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: bootloader only see first disk
  2018-09-17  8:34   ` Thomas Lamprecht
@ 2018-09-17 10:44     ` Aurelien Minet
  0 siblings, 0 replies; 5+ messages in thread
From: Aurelien Minet @ 2018-09-17 10:44 UTC (permalink / raw)
  To: Thomas Lamprecht; +Cc: edk2-devel

Hi Thomas,

Le 17/09/2018 à 10:34, Thomas Lamprecht a écrit :
> Hi Laszlo,
>
> On 9/16/18 12:04 PM, Laszlo Ersek wrote:
>> Hello Aurélien,
>>
>> adding Thomas to the CC list, and commenting at the bottom:
> thanks for CC'ing and thanks to you Aurélien for writing your report.
>
>> On 09/15/18 18:36, Aurélien wrote:
>>> Hi,
>>>
>>> I don't know if it is the right place to report a bug, sorry if not.
>>>
>>> I'm a Promox user and the last version (5.2) has a package versionned
>>> 20180612-1 actually  (
>>> https://git.proxmox.com/?p=pve-edk2-firmware.git;a=summary ) which is
>>> based on 5a56c0493955cf55e7eef96dbba815cfbb067d7d  commit of edk2. A
>>> build from the current master a few days ago has the same problem. The
>>> previous Promox version (5.1 whith this pve-qemu-kvm package) use a
>>> edk2 version dating from 2017 or before (it could be from before
>>> September 2016 but I'm not sure), which has no problem. I tested on my
>>> workstation running gentoo which has a version based on UDK2017 branch
>>> with source code from February 11, 2018 and it's working too. So I
>>> think the problem is located in  the OVMF_CODE.fd code from 2018 (but
>>> without any certainty).
>>>
>>> Actual behaviour (with all the various Linux distribution: Debian 9,
>>> Ubuntu 18.04, Centos 7.5 ...) with a VM which has EFI enabled:
>>> - grub is loaded and only see the first disk (where it is installed),
>>>   the "ls" command in the grub shell return: "(hd0) (hd0,gpt1)
>>>   (cd0)"   and  there is also hd1 and hd2 and in my case this is
>>>   problematic as /boot is on hd1.
>>> - when pressing "escape" on the boot to go the the setup screen and
>>>   just chose "continue" it's ok (grub sees all the disks), my current
>>>   workaround to boot the installed OS.
>>> - when installing an OS like Ubuntu, CentOS ... on the first reboot
>>>   it's ok (I thinks something in the installation, like seting a new
>>>   boot entry with grub-install, efibootmgr)
>>>
>>> Expected behaviour:
>>> - grub see all the disk (the ls command return hd0, hd1 hd2 ....) and
>>>   not the first one (where the EFI boot partition is located).
>>>   (sorry, I haven't tried any other boot loader)
>>>
>>> - Step to reproduce:
>>>   start a VM with 3 disks and EFI enabled (OVMF_CODE), install a Linux
>>>   on the 2nd disk (/ & swap) and the EFI boot partition on the first
>>>   disk (/boot/efi on "sda1"), cold start the VM.
>>>
>>> I can help by testing with specific version (or another boot loader),
>>> tell me.
>>>
>>> Regards
>>>
>>> Aurélien
>>>
>>> ps: typical command line to start the VM:
>>> /usr/bin/kvm \
>>>   -id 20 \
>>>   -name testvm.mydomain \
>>>   -chardev 'socket,id=qmp,path=/var/run/qemu-server/20.qmp,server,nowait' \
>>>   -mon 'chardev=qmp,mode=control' \
>>>   -pidfile /var/run/qemu-server/20.pid \
>>>   -daemonize \
>>>   -smbios 'type=1,uuid=88dc4e6b-34b8-46a7-a573-26596c34855d' \
>>>   -drive 'if=pflash,unit=0,format=raw,readonly,file=/usr/share/pve-edk2-firmware//OVMF_CODE.fd' \
>>>   -drive 'if=pflash,unit=1,format=raw,id=drive-efidisk0,file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-4.raw' \
>>>   -smp '8,sockets=1,cores=8,maxcpus=8' \
>>>   -nodefaults \
>>>   -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
>>>   -vga qxl \
>>>   -vnc unix:/var/run/qemu-server/20.vnc,x509,password \
>>>   -cpu host,+kvm_pv_unhalt,+kvm_pv_eoi \
>>>   -m 512 \
>>>   -object 'memory-backend-ram,id=ram-node0,size=512M' \
>>>   -numa 'node,nodeid=0,cpus=0-7,memdev=ram-node0' \
>>>   -k fr \
>>>   -object 'iothread,id=iothread-virtioscsi1' \
>>>   -object 'iothread,id=iothread-virtioscsi2' \
>>>   -machine 'type=pc-i440fx-2.9' \
>>>   -device 'pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5' \
>>>   -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
>>>   -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
>>>   -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
>>>   -chardev 'socket,path=/var/run/qemu-server/20.qga,server,nowait,id=qga0' \
>>>   -device 'virtio-serial,id=qga0,bus=pci.0,addr=0x8' \
>>>   -device 'virtserialport,chardev=qga0,name=org.qemu.guest_agent.0' \
>>>   -spice 'tls-port=61004,addr=127.0.0.1,tls-ciphers=HIGH,seamless-migration=on' \
>>>   -device 'virtio-serial,id=spice,bus=pci.0,addr=0x9' \
>>>   -chardev 'spicevmc,id=vdagent,name=vdagent' \
>>>   -device 'virtserialport,chardev=vdagent,name=com.redhat.spice.0' \
>>>   -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
>>>   -iscsi 'initiator-name=iqn.1993-08.org.debian:01:f9e4631950da' \
>>>   -drive 'if=none,id=drive-ide2,media=cdrom,aio=threads' \
>>>   -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=100' \
>>>   -device 'virtio-scsi-pci,id=virtioscsi0,bus=pci.3,addr=0x1' \
>>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-1.raw,if=none,id=drive-scsi0,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>>   -device 'scsi-hd,bus=virtioscsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=200' \
>>>   -device 'virtio-scsi-pci,id=virtioscsi1,bus=pci.3,addr=0x2,iothread=iothread-virtioscsi1' \
>>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-2.raw,if=none,id=drive-scsi1,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>>   -device 'scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1' \
>>>   -device 'virtio-scsi-pci,id=virtioscsi2,bus=pci.3,addr=0x3,iothread=iothread-virtioscsi2' \
>>>   -drive 'file=/mnt/pve/pve-nfs-sas/images/20/vm-20-disk-3.raw,if=none,id=drive-scsi2,format=raw,cache=none,aio=native,detect-zeroes=on' \
>>>   -device 'scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2' \
>>>   -netdev 'type=tap,id=net0,ifname=tap20i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
>>>   -device 'virtio-net-pci,mac=4A:63:6D:11:11:11,netdev=net0,bus=pci.0,addr=0x12,id=net0'
>> This is a very good issue report, thank you for it. The amount of detail
>> you provided allows me to explain the status & behavior to you.
>>
>> (1) Originally, OVMF used to connect all drivers to all devices in the
>> system. In a sense this was convenient, however it resulted in a lot of
>> wasted work too -- if you had tens or hundreds of devices, the boot
>> could take extremely long. And again, most of that work was wasted,
>> since you almost never want to actually attempt booting off of tens or
>> hundreds of devices. You only really want to connect those devices that
>> you reasonably want to attempt booting off of as well.
>>
>> (In the above, "connect" is used in the sense "bind" or "probe". Esp.
>> with a Linux background, "probe" is the most fitting word, probably.)
>>
>>
>> (2) Because the set of devices connected at boot is platform policy
>> (i.e., UEFI platforms are at liberty to decide what devices they
>> connect), we changed the above behavior to a minimalistic approach, in
>> the following patch series:
>>
>>   [edk2] [PATCH 0/6] OvmfPkg, ArmVirtQemu: leaner platform BDS policy for connecting devices
>>   http://mid.mail-archive.com/20180313212233.19215-1-lersek@redhat.com
>>
>> This was then pushed as commit range 12957e56d26d..ff1d0fbfbaec, in
>> March 2018.
>>
>> With this set in place, if you provided *some* devices with the
>> 'bootindex=N' property, then OVMF would no longer connect all devices in
>> the system, it would connect only those that you marked with the
>> bootindex property. (And then OVMF would auto-generate UEFI boot options
>> for those only, as well.)
>>
>> In other words, the bootindex property was promoted from its previous
>> "boot option filtering/reordering only" role to a "steering of device
>> probing" role as well.
>>
> Ah yes, I should have figured that out, I even mentioned the faster boot
> on multiple devices in the package changelog but never wondered about what
> this implies for setups like Aurélien has, argh!
>
>> (3) The EFI build of grub most likely doesn't find your disks -- after
>> (2) -- because it doesn't connect devices itself, it relies on the
>> platform firmware to connect disks.
>>
>>
>> (4) If you interrupt the boot process and enter the setup utility, the
>> latter will connect all devices, regardless of (2). This is your current
>> workaround, IIUC.
>>
>>
>> (5) There are many classes of devices, and some of those should be
>> connected even if they are not "bootable" at all. The series in (2)
>> caused a regression for them, and we had to fix them up gradually. See
>> the following commits:
>>
>> - OvmfPkg/PlatformBootManagerLib: add USB keyboard to ConIn
>> - OvmfPkg/PlatformBootManagerLib: connect consoles unconditionally
>> - OvmfPkg/PlatformBootManagerLib: connect Virtio RNG devices again
>>
>> However, the disks that you mention are *not* like this; they should
>> indeed *not* be connected unless you mark them for booting.
>>
>>
>> (6) The solution is either to instruct grub (I don't know how) to
>> connect the disks in question itself, *or* to add the "bootindex=N"
>> properties (with some suitable N values) to the disk devices that you
>> want OVMF to connect for you (even if they contain no EFI system
>> partition and/or a UEFI boot loader application). Given your current
>> command line, the latter option translates to the "scsi-hd" devices with
>> identifiers "scsi1" and "scsi2". For example:
>>
>>   -device scsi-hd,bus=virtioscsi1.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi1,id=scsi1,bootindex=201 \
>>   -device scsi-hd,bus=virtioscsi2.0,channel=0,scsi-id=0,lun=2,drive=drive-scsi2,id=scsi2,bootindex=202 \
> So we probably want to add a per-disk 'bootable' flag in our frontend,
> which adds a higher bootindex (= lower priority) to all marked disks.
> This would allow to still boot faster with lots of disks but allows
> setups like yours, Aurélien.

As actually it is only possible to chose one drive (which add "d"  to
boot property and drive id to bootdisk property).
I was thinking of just being able to chose another drive in the GUI (for
"boot device 3") which would result by adding this drive after the first
one (and a coma) to the bootdisk property.
So your proposition sounds good to me :)  and would be wonderful as it
will support  more possibilities.

Best regards

Aurélien



>
>> Hope this helps,
> Yes, it helps a lot! Much thanks for your explanation, appreciated!
>
> cheers,
> Thomas
>
>



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-09-17 10:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-15 16:36 bootloader only see first disk Aurélien
2018-09-16 10:04 ` Laszlo Ersek
2018-09-17  8:34   ` Thomas Lamprecht
2018-09-17 10:44     ` Aurelien Minet
2018-09-17 10:28   ` Aurelien

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox