Ticket #959 (closed defect: fixed)
problems with BIOS reals beyond LBA boundary?
|Reported by:||therp||Owned by:|
|Version:||VirtualBox 1.5.2||Keywords:||bios read broken|
I observe the following problems with VirtualBox. An explanation that fits this problem patterns is that there is a problem with BIOS initiated reads beyond the LBA boundary of a disk.
- Problem: My VMware based installation (on VMDK) does not boot properly. It fails to find NTLDR.
- Problem: Using the VMware installation from above (=uncleaned partition, partially filled) and doing a separate installation into the typical C:\WINDOWS.0 fails too (installation done under VirtualBox). Again the boot loader is not able to load NTLDR.
- No problem: Installing a fresh copy of windows (under VBox) onto the same partition but this time reformat. NTLDR works, Windows boot, world is fine.
- Problem: The image from the installation is modified and I dump all my old vmware stuff into C:\. Replacing the folders Program Files, Windows, etc.etc. Result after reboot: NTLDR found, boot menu, but launching Windows fails with STOP 0x0007b (or similar), the error that indicates that it can't access the boot device.
Here is an explanation that fits the above problem pattern: in real mode, reads from disks that are beyond the LBA boundary (separate interface INT 0x10,AH=0x42 IIRC) is broken. FAT/NTFS MBR uses the AH=0x02 interface for everything beyond sector 1024*255*63.
This fits all problem/no problems:
- my existing installation has an NTLDR beyond the LBA boundary sector: 1024*255*63. The loader tries to access NTLDR, loads some rubbish, signature verification fails. boot loader dies.
- the fresh windows installation on the half-filled disk dumps new data to disk beyond the LBA boundary. situation doesn't change. boot loader dies.
- a fresh installation to an empty disk fills up the disk but does not reach the LBA boundary (around 8GB). Hence, NTLDR is placed below this boundary, also all DLLs neccessary for booting are placed beload this boundary.
- modifying the fresh installation from above and putting DLLs beyond the LBA boundary gets the boot loader into trouble. NTLDR is unmodified, hence it loads, but after that no driver dlls can be accessed.
Side notes: Vmware is able to boot into ALL of the 3 cases were virtual box isn't able. For problem 4, I made sure to add the necessary drivers into the criticaldevice section of the windows registry. I'm not sure if I did that correctly, but what really indicates that there is a problem at a much lower level (bios level) is that, in problem 3 I'm not only unable to boot into windows, but also unable to boot into the recovery console. the recovery console refuses to load because HAL.dll is not found (as I said HAL.dll is likely to reside after the LBA boundary).
My next test case is: format a plain NTFS disk, fill it up with to 8GB, and do a fresh win xp install. The result (if my thesis is correct) should be that NTLDR is not found, and booting dies. (will do that in about a week, I just filed this bug now so that this issues is known, and this knowledge isn't lost if for some reason I forget to do this)
Of course, if you have further insight you are free to provide it.