There's a tutorial on how to deal with bad blocks detected by Smart checks (click here to see). Unfortunately, it uses some tools only available on Linux (fdisk, etc). I'd like to know if there is Windows equivalents for these tools?
You can ignore the filesystem specific bits in that guide as they are irrelevant. The important part is identifying the bad block and writing to it. This is done with