The OpenBSD and NetBSD code is appearantly incorrect, from my tests. I modifed boot.c to dump the blocks to a file, then dissected them with python (yay python). What I found, at least in my case, is that the blocks are identical up to bye 430. From there to 6 bytes to the end (ie until byte 512-6) they differ (well, ignoring the nulls just there for padding). All they contain is error messages to display to the user (one is "Remove disks or other media.\xFF\r\nDisk error\xFF\r\nPress any key to restart\r\n" and the other is "NTLDR is missing\xFF\r\nDisk error\xFF\r\nPress any key to restart\r\n").
So I submit this patch which is hard codes these limits (ick, I know, but other parts of the code already hard code locations) by only checking [:430] and [DOSBOOTBLOCKSIZE-6:], skipping the string space. I might be off by 1 somewhere, so a second pair of eyes doing a quick check would be good. 159c159,161 < if (memcmp(block, backup, DOSBOOTBLOCKSIZE)) { --- > if (memcmp(block, backup, 429) || > memcmp(block+(DOSBOOTBLOCKSIZE-4), backup+(DOSBOOTBLOCKSIZE-4), 4)) { > //used to be: DOSBOOTBLOCKSIZE, changed to accomodate scandisk.exe stashing > error messages near the end of the boot block without updating the backup > fully