Opened 6 years ago

Last modified 5 years ago

#14475 new bug

Boot from VMWare ESXi: PANIC: did not find any boot partitions!

Reported by: markh Owned by: nobody
Priority: normal Milestone: Unscheduled
Component: System/Kernel Version: R1/Development
Keywords: Cc:
Blocked By: Blocking:
Platform: x86

Description

I am trying to boot Haiku from a 32 bit virtual machine on VMWare ESXi 6.7, but during booting an error occurs: PANIC: did not find any boot partitions!

Curiously, this error does not occur when I remove the virtual disk I wanted to install Haiku on. I tried it with the virtual disk on the SATA controller of ESXi, but it also fails if I try it with IDE. I attached the serial output of the boot attempt with the disk on the SATA controller

Attachments (3)

serial.out (91.0 KB ) - added by markh 6 years ago.
serial_singledisk.out (83.9 KB ) - added by markh 6 years ago.
serial output without USB stick attached
serial_nodisk.out (124.9 KB ) - added by markh 6 years ago.
Serial output without harddisk

Download all attachments as: .zip

Change History (13)

by markh, 6 years ago

Attachment: serial.out added

comment:1 by waddlesplash, 6 years ago

Total guess of what's going on, by reading the code: You have two BFS partitions, the one from the anyboot and another on a disk. The partition scanner (http://xref.plausible.coop/source/xref/haiku/src/system/kernel/fs/vfs_boot.cpp#276) checks if a partition is bootable by calling IsBootDevice with strict=false, which returns true, so that function returns true, so the calling function thinks it's found a boot device and so halts the search.

Then it http://xref.plausible.coop/source/xref/haiku/src/system/kernel/fs/vfs_boot.cpp#403 calls IsBootDevice now with strict=true, which http://xref.plausible.coop/source/xref/haiku/src/system/kernel/fs/vfs_boot.cpp#223 probably returns false, and so it doesn't have any partitions.

So there are two potential solutions here:

1) Don't call IsBootDevice with strict=false and then strict=true; pick one or the other.

2) Don't stop searching for boot partitions after we found one candidate (unknown performance impact?)

I vote for # 1, but, I'm not an expert here.

Last edited 6 years ago by waddlesplash (previous) (diff)

comment:2 by markh, 6 years ago

I did not notice that VMWare picked up the USB stick that was still inserted into the machine, so I unplugged it and tried it again. I still got the same error, so there might be something more going on. I will upload the new serial output.

by markh, 6 years ago

Attachment: serial_singledisk.out added

serial output without USB stick attached

comment:3 by waddlesplash, 6 years ago

That is really, really weird; there is clearly a boot partition in that syslog output but somehow the kernel does not think it's bootable.

This is the extent of my knowledge though, someone else will have to help from here :/

comment:4 by korli, 6 years ago

field: "booted from image" (BOOL): true
1196	  field: "partition offset"  (LLNG): 0 (0x0)
1197	  field: "boot method"       (LONG): 0 (0x0)
1198	  field: "boot drive number" (LLNG): 0 (0x0)
1199	  field: "disk identifier"   (RAWT): data at 0x82008be4, 79 bytes
1200	get_boot_partitions(): boot method type: 0

boot method is hard disk. It would nice to also dump the field disk_identifier when found at https://github.com/haiku/haiku/blob/master/src/system/kernel/fs/vfs_boot.cpp#L333

comment:5 by korli, 6 years ago

can't get "booted from image" true, while booting off the hard disk. Dunno how to reproduce.

by markh, 6 years ago

Attachment: serial_nodisk.out added

Serial output without harddisk

comment:6 by markh, 6 years ago

I attached another serial output. This time of a successful boot if I remove the hard disk in ESXi. If this still does not help, I am willing to do some debugging if I can get some pointers on where in the code I need to be.

comment:7 by diver, 6 years ago

Possibly a dupe of #6558.

comment:8 by markh, 6 years ago

I played around a bit with the code and it seems that when a disk is included, Haiku no longer sees the CDROM drive as a CDROM drive and tries to boot as if it is a harddisk. This then fails to execute some code, so the boot fails.

The code that fails to recognize the CDROM drive is check_cd_boot at: https://github.com/haiku/haiku/blob/master/src/system/boot/platform/bios_ia32/devices.cpp#L168

I think the part where it fails is the check of the carry flag after the bios has been called. I don't know yet why this is a problem when a harddisk is configured. I added some debugging and did see that the driveid is 0.

comment:9 by waddlesplash, 6 years ago

Please retest after hrev53082.

comment:10 by markh, 5 years ago

Apologies for the late reply. I had time to retest today, but unfortunately it gives the same result.

Note: See TracTickets for help on using tickets.