Maybe your card is a fake sd card, menaing that its capacity is fake : each write overlaps previously writes.
In this case, the real capacity is less than the capacity exposed by the card to OS.
There is several products to test real capacity. The principe is simple: this softs writes as many files as they can containing some random data. Then they read those files; and checks that the read data corresponds to previousmy written data (md5sum).
Many non open-source and windows-only (bad) softs exists, like those :
- H2TESTW (the more often mentionned)
- Check Flash
- (and maybe others)
Some open-source and multi-plateforms exists (goood !) :
- F3 (my personal choice)
- FileReadTest (I didn't test it, mainly because it's written in Java)
I noticed also the existence of a windows-only but open-source one : USB Memory Stick Tester (usbmst). Didn't tested cause I'm under Linux (and I can't post the link to this soft due to a limitation of link number per parge because I'm new here ...)