This is not normal... it suggests catastrophic failure. 512 MB is tiny so maybe the hardware is dying of old age now?
FAT is pretty crude, I suggest you cut your losses and interrupt the fsck. It's not re-balancing b-trees or something intricate like that. Ctrl+c /
kill -SIGINT is the gentlest approach, so it probably won't work. You can escalate to
kill -9 (of the corresponding numeric process ID seen in
ps) followed by
...to be honest I'm not sure how to see if requests are finished before you remove the drive. You could try the "safely remove"-type options ("stop"?) in GNOME Disks, hidden somewhere behind the cryptic icons. Then unplug the drive and let it cool if it's hot.
If you have any data to recover, "ddrescue" the whole device (
/dev/sdb or so, corresponding to the device that appears in
dmesg|tail -n 20). You can then mount the output file (
mount -oloop DDRESCUE.OUT /mnt). Or copy it and try
fsck again (good luck!). Or resort to
photorec which recovers most document types from corrupt filesystems, sans filenames.
If you still think the device is worth trusting, you could then try to test it... Reformat the filesystem (e.g. GNOME Disks) and fill it. You can fill a 512 MB filesystem, right? Unmount, replug, test reading all the files back.