Main differences between fsck and chkdsk?
Apart from the link that fluteflute mentions the main difference for the end user is that chkdsk only checks the filesystems that are supported in windows, Fat32 and NTFS as the main ones.
fsck checks, Fat32, NTFS (Via ntfs-3g), ext2, ext3, ext4, reiser, xfs and a whole bunch of other ones. doing a man fsck
wil give you the details. But the thing is that fsck actually uses another program to run the check depending on the filesystem that is going to be checked, so for example, if the filesystem is ext4, then it will use fsck.ext4, if the filesystem is btrfs, then it will use fsck.btrfs.
So basically chkdsk is limited and optimized for ntfs while fsck is not only opened to several fylesystems but it receives far greater optimizations and features than the windows counterpart in the same time frame. And because of this, it does some quick checks and some deep checks to a filesystem depending on the actual fylesystem, error detected, flags on the fylesystem and other attributes that are active on the system.
The tools that look like chkdsk when the NTFS filesystem is involved are several of the ntfs-3g collections of tools that in some cases surpass what chkdsk (And even scandisk) can do, for example:
ntfsfix - Forces Windows to check NTFS at boot time
ntfsresize - Resize an NTFS volume
ntfsundelete - Find files that have been deleted and recover them
ntfsdefrag - Defragment files, directories and the MFT
ntfsck - Perform consistency checks on a volume
This gives into some new ways of doing software recovery, maintenance, and repair. For example, in cases where a problem arises that the Windows system does not load, you could load up your Ubuntu and fix some of the problems with a quick fsck/ntfs-3g on the partition/disk. Or undelete something, defragment, etc.. Gives you an additional solution to several problems.