You might be able to mount the file on the loopback interface and fsck it. From the site www.ingent.net/en/tag/kvm/ , use:
...to see that loop0 here is the next free device, then assign the disk image to that point.
losetup /dev/loop0 disk.raw
kpartx is used to create devices to access it.
kpartx -av /dev/loop0
Then you should be able to use fsck.
fsck.ext3 -f /dev/mapper/loop0p1
fsck.ext3 -f /dev/mapper/loop0p2
...and so on. The page is about converting systems to run on KVM, but this part cited above may put you on track to do an fsck repair; I'd add the caution that you should do this with a copy of your image file instead of the base image file, just in case something goes wrong.