ある時 LANDISK (HDL-160U) に保存したファイルがおかしいことに気づきました. まぁ数年使ってるとそろそろイカれ出しているのでしょう. fsck でもかけてみるかと思ったのですが, mount 中だから出来ないと言われました. んじゃ umount して... と思ったのですが, いろんなデーモンを停めなくてはいけなくてなかなか上手くいきません. 無改造の LANDISK なら cgi で簡単に出来るかもしれないんですが, 私のはアレコレ改造しているため cgi ではできません.
まぁリブートすればいいわけであまり難しく考えてもしかたありません.
ところで, tune2fs で /dev/hda3 を覗くと Maximum mount count より Mount count の方が大きいことに気づきました. リブートしても定期的に fsck をかけてくれないようです. /home/LANDISK/script/mounthdd.sh を覗くと, nocheck オプションを付けて mount しています.
これが原因かもと, /etc/rc.d/rcS の頭の方で
mount -t ext2 /dev/hda3 /mnt/hda3 umount /mnt/hda3 |
まぁリブートなんて滅多にしないから, rcS で直接
/sbin/e2fsck -p /dev/hda3 |
tune2fs の出力を sed や awk を駆使して fsck を行う時期を知るとか, tune2fs のソースを改造して時期を知る方法とかも考えたのですが, ちょっと面倒くさそうです. そこで正直美しさに欠けますが, 直接 fsck を書くよりマシということで 以下のようにしました (root 様になって, / を r/w モードでリマウントする必要が あります).
if [ -f /etc/fsck.ts ];then at=`cat /etc/fsck.ts` ct=`date +%s` if [ $at -le $ct ];then /sbin/e2fsck -p /dev/hda3 at=$((ct+2592000)) echo $at > /etc/fsck.ts fi fi |
echo 0 > /etc/fsck.ts |