This is one of the most common problems that one might encounter these days. This can be due to hardware of software.
If the issue is because of software we can fix it using below mentioned ways..
First print out the output of the command dmesg and see if there are any errors printed in red color which does symbolize that you have a file system error.
Note: sda5 means the disk that you want to check for errors. You can see the name of your disk by using the command df -h
Install smartctl a tool to check your hard disk for errors.
After installing smartctl run the following command.
smartctl -t long /dev/sda5
Then carefully see the output of above command it displays the time it will take to complete the test you have just started. To view the test run the below command.
smartctl -l selftest /dev/sda5
Now run below commands to check the health of your hard disk.
smartctl -a /dev/sda5
smartctl -H /dev/sda5
You can also add a line to your grub file located at /etc/default/grub or modify the line if it already exists.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash libata.force=noncq"
This will make sure that while rebooting you run a force check for errors in your file system. Be careful because you might need to back up your data as you may lose some of it.
Another way to go into recovery mode is to press ESC while rebooting and choose recovery mode. This will make sure to fix file system errors also you can choose to run fsck/resume normal boot in the options provided.