Wait, did you check the size of the file after you created it,
Code:
dd if=/dev/zero of=floppy.img count=1440 bs=1k
(It should have been a 1.44M file filled with zeroes at this point)
but before you inserted to boot image?
Code:
dd if=your-mbr.bin of=floppy.img bs=512 count=1 conv=notrunc
If it was 1.44M before insertion, but was reduced to 512 bytes afterwards, check to make sure that you remembered the
conv=notrunc argument in the second shell command. I would actually add
nocreat and
fdatasync as well, to give you a sanity check on the file name (it would give an error message if the file doesn't already exist) and force it to write immediately rather than (potentially) cache the output. If that doesn't do it, I would further use the
nocache flags for both the input and output files - while the chances that it would be a caching issue are negligible when working on a local fixed medium, IMAO it would be worth going belt-and-suspenders in this case just to see if it makes a difference.
Code:
dd if=your-mbr.bin iflag=nocache of=floppy.img oflag=nocache bs=512 count=1 conv=notrunc,nocreat,fdatasync
Beyond that, if you could paste the exact shell commands and/or shell scripts you are using, we might be able to double check them for you. It is all too easy for even an experience shell user to make less than obvious mistake, and getting more eyes on it might help.