Are you sure you didn't get a counterfeit flash, like the 16gb that's actually a 2gb that has been modified?
h2testw will tell you if it is fake (windows program).
If you want to recertify the flash, you can write test patterns to it, which should make the drive detect and mark bad areas and use spare sectors if needed. Linux's badblocks command will write the patterns, and also test that they were written correctly.
0. (don't have important stuff on the flash drive, duh)
1. Get
gparted ISO and burn to CD
2. unplug all HDD and other storage devices for safety
3. Boot off CD, use default boot options, and launch terminal when done booting
4. Verify expected USB device is detected with:
lsusb4. find flash device with:
dmesg | grep -i "SCSI device" (or "SCSI disk" - it's likely [sda] if you have no other drives)
5. Then write patterns with:
sudo badblocks -b 16384 -w -s -t0 -t0 -t255 -t255 /dev/sdaFor the best surface verify and reset, this command line does two passes of 0s (-t0) and then two passes of 1s (-t255). No errors should be reported, or if they were, they should be fixed after another test pass. All 1s is the erase/blank state of flash.
You want to access the raw /dev/sda device, not a mounted partition. This completely wipes the drive too, you'll need to reformat it FAT32 when you are done.
If you are super awesome, you can just boot the ISO in virtualbox, and create a USB device filter so the virtual machine can see your USB flash directly and nothing else.