@matrix Try fsck -w -r -l -a -v -t /dev/sdX1
-w means write to disk immediately.
-r means to do disk check interactively (ask you what to do to when encountering errors). On newer versions of dosfsck this is the default.
-l means to list the filenames processed.
-a means automatically fix errors. Do not use it, if You want to have more control over fixing possible errors.
-v means verbose mode. Generates slightly more output.
-t means mark unreadable clusters as bad.