I have an embedded linux system. I use grub2 for the boot loader. I would like to run an fsck -y /dev/sda on /dev/sda every time it boots--even when the system had a power loss and the reboot command was not used. How can I do this?
-
Have you considered using a different boot medium like a flash device with jffs2 or ubi (if you could mod the hardware)?– ott--Dec 1, 2011 at 21:29
-
It is a transcend industrial 44pin flash module. I have the journaling setup and have the write caching turned off. I still get orphaned nodes sometimes though.– Jonathan HensonDec 2, 2011 at 2:21
2 Answers
Are you using a particular distribution? On Debian based distributions it would be as simple as adjusting /etc/default/rcS
and set FSCKFIX
to yes.
If you want to force a full fsck after every boot, then you could simply write create an empty file named /forcefsck
. Though I do not suggest you actually do this.
-
It is debian based. This will cause it to happen before mounting each time? Dec 1, 2011 at 17:49
-
-
fsck is ran at every boot already, if the filesystem was unmounted correctly it runs very quickly. This change simply makes it so that the system will auto-repair anything that can be auto-repaired. Look at
/etc/init.d/(checkfs.sh|checkroot.sh)
to see the full details. Dec 1, 2011 at 17:53 -
-
will this clear orphaned nodes and fix datetime errors? fsck -y always does. Dec 1, 2011 at 18:01
If there had been a power loss fsck will run anyway since the filesystem will not be marked as "clean". You can use tune2fs -c 1 /dev/sda
to set the check-interval for ext2/3 to one. IMHO that should force an fsck on every boot.
-
+1, this is the correct way to do it. The system will be forced into a fsck on every restart, but that's pretty much what you're asking for. Dec 1, 2011 at 21:33
-
-
@Nils I will try this, because Zoredache's solution still didn't work. Dec 2, 2011 at 0:25
-
Will this perform the check and fix all errors without user interaction? Dec 2, 2011 at 0:26
-
Normally not. in most distributions there are possibilities to pass extra options to fsck. For this you have to find the place where to put these. In CentOS/RH5 the script responsible for running fsck at boot is located at /etc/rc.sysinit - there are a number of hooks one could use there - but this is proably dependent on the distribution. My best bet is to do
grep -Iw fsck /etc
to find the script responsible for running fsck. If you found that, please post the script in your question.– NilsDec 2, 2011 at 11:18