Ok, the disk image (I'll call it c.img since that's what you're using apparently) is an image of a hard disk,
including the MBR.
Mounting using the loop flag is the equivalent of doing:
losetup /dev/loop0 /path/to/c.img
mount -twhatever /dev/loop0 /mnt/lb
It should be obvious that this isn't going to work.
Mount is used to mount
partitions, not complete disks.
What you need to do is correct for the MBR and patition size during mounting, ie just mount the parition, not the whole disk.
In Linux, I'll run through from scratch (Single partition because playing with multiple partitions is a bit more complicated).
Figure out roughly how big you want your disk to be.
Geometry you'll use is #cylinders, 16 heads, 63 sectors/track, 512 bytes/sector. This gives you 516096 bytes per cylinder (16*63*512). Choose an even number of cylinders sufficient to give you the disk space you want, try to keep it an even number.
First make the empty image file.
dd if=/dev/zero of=/path/to/c.img bs=516096c count=#cylinders
(This gives you an empty file where #cylinders is the number of cylinders you want to use)
losetup /dev/loop0 /path/to/c.img
(This sets up /dev/loop0 to point to c.img as though it were a physical hard disk...kinda
)
fdisk /dev/loop0
(Build the 'disk' MBR using the following instructions)
o - Create new empty DOS parition table
x - Switch to expert mode
h - Set number of heads to 16
s - Set sectors/track to 63
c - Set cylinders to #cylinders
r - Return to normal mode
n - Create one primary partition that fills the whole 'disk'
p - Dump the parition table to the screen.
At this point check a couple of things. Make sure cylinders, heads, sectors/track are correct. Make sure that your brand new partition starts at cylinder 1 (It will do if you haven't screwed around with the defaults when making the partion). If you're using FAT then you may want to change the disk id now, but since AFAIK GRUB ignores the partition table id it's not hugely important.
w - Write partition table to 'disk'
(That's fdisk done with)
losetup -d /dev/loop0
(Take the image off the loopback device)
Ok, now the choice is up to you how you go from here. I don't have mtools lying around atm so I can't format into fat under Linux, perhaps you can. I'll show you how it's done for ext2fs.
losetup -o32256 /dev/loop0 /path/to/c.img
(Ok, notice the 32256 here. This says setup the loopback device starting 32256 bytes into the file. The reason it is 32256 bytes is because that is precisely 1 cylinder into the file (63*512 bytes) which we know is the start of our partition.)
mke2fs /dev/loop0
(Formats the 'partition')
mount -text2 /dev/loop0 /mnt/wherever
If you check /mnt/wherever you'll now have a perfectly functioning ext2 partition that you can pretty much treat as though it were a normal physical partition (You'll know this because there'll be a lost+found directory on it).
From here on out use:
umount /mnt/wherever
losetup -d /dev/loop0
When unmounting the partition, and:
losetup -o32256 /dev/loop0 /path/to/c.img
mount /dev/loop0 /mnt/wherever
When mounting it.
Example Bochs line for this image would be:
ata0-master: type=disk, path=/path/to/c.img, cylinders=#cylinders,heads=16,spt=63
Have a nice day
.