2

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?

Jonathan Henson
  • 889
  • 2
  • 10
  • 16
  • Have you considered using a different boot medium like a flash device with jffs2 or ubi (if you could mod the hardware)? – ott-- Dec 01 '11 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 Henson Dec 02 '11 at 02:21

2 Answers2

5

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.

Zoredache
  • 128,755
  • 40
  • 271
  • 413
4

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.

Nils
  • 7,657
  • 3
  • 31
  • 71
  • +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. – Avery Payne Dec 01 '11 at 21:33
  • But does this work for non ext2/3/4 filesystems? – 84104 Dec 02 '11 at 00:15
  • @Nils I will try this, because Zoredache's solution still didn't work. – Jonathan Henson Dec 02 '11 at 00:25
  • Will this perform the check and fix all errors without user interaction? – Jonathan Henson Dec 02 '11 at 00: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. – Nils Dec 02 '11 at 11:18