On 20/04/2025 at 23:03, Richard Allen wrote:
What led up to the situation? I've setup two operating system disks. Windows 10 is on the primary boot disk with its own bootloader(HD0 below). Debian12+Grub2.06 is on another disk which I select from the BIOS(HD1 below). Once a baremetal OS is booted, I boot the other disk under VirtualBox. What exactly did you do (or not do) that was effective (or ineffective)? I attempted to boot my Grub2.06+Debian/12 disk inside of VirtualBox on Windows 10. However, I looked away and grub timed out and chose Windows10(whose disk is not visible in the VM) What was the outcome of this action? Grub reported: error: no such device: ${Win10_DISK_ID}
UUID search fails as expected, $root remains hd0,msdos1 (Debian partition).
setting partition type to 0x83
parttool ($root) hidden- sets the partition type to 0x83 (Linux filesystem, same as previously, so no change). It is the only command which writes to the MBR. I acknowledge that GRUB should be smart and not rewrite the MBR if there is no change.
error:disk `hd0,msdos1’ not found
GRUB does not see the partition any more.
I have attached the MBRs of both disks, before and after this point.
It appears that the contents of hd1_debian.after was shifted by one byte, which makes it totally unrecogizable by the BIOS, fdisk or any other tool. This is really surprising. I could not reproduce it in a QEMU+SeaBIOS virtual machine. Could it be a bug with VirtualBox ?
A possible workaround is to remove the parttool command in /etc/grub.d/30_os-prober and rebuild grub.cfg with update-grub. This command is not needed here, use cases which require it are very rare nowadays.
*********************** BEGIN /boot/grub/grub.cfg
(...)
menuentry 'Windows 10 (on /dev/sdc1)' --class windows --class os $menuentry_id_option 'osprober-chain-7460727360723BC4' { insmod part_msdos insmod ntfs set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd2,msdos1 --hint-efi=hd2,msdos1 --hint-baremetal=ahci2,msdos1 --hint='hd0,msdos1' 7460727360723BC4 else search --no-floppy --fs-uuid --set=root 7460727360723BC4 fi parttool ${root} hidden- drivemap -s (hd0) ${root} chainloader +1 }