Newzheimer's Syndrome
Kent Forschmiedt
kent at happym.UUCP
Sun Sep 18 14:30:18 AEST 1988
In article <576 at mbph.UUCP> hybl at mbph.UUCP (Albert Hybl Dept of Biophysics SM)
relates how he has discovered that his system has the SYSV inode cache bug.
I was going to reply by mail, but this hasn't been explained in public
lately, so I'll give it a go.
There is a boundary error in many System V's which causes a file system
to fail to refill its inode cache when it runs out under a certain
(internal) condition. The problem is not likely to occur except when
hundreds or thousands of files are created with no intervening
deletions. News, processing batches, does that routinely, so it tends
to trigger the bug.
The problem causes no file system damage, and fsck refills the inode
cache. Since filling the cache defers the problem, using fsck frequently
enough prevents it. My spool/news lives on its own partition, and my
daily news demon unmounts, cleans, and remounts it before doing the rest
of its business. Before I started dong this, my file system screwed up
about 3 or 4 times a month. Now it almost never happens.
# @(#) newsdemon.sh
#
TZ=PST8PDT
PATH=$HOME:$PATH
cd $HOME
# This needs to be setuid root, so it is not done in line...
# do it before running expire; there might be news queued up.
# If it fails, rnews is probably running. If so, it probably
# isn't broken anyway. I hope.
/usr/lib/news/fixnewsfs
trap "rm -f tmp$$" 0
DAY=`date +%d`
ODD=`expr $DAY / 2`
WD=`date +%w`
if [ $WD -eq 1 ]; then
expire -n all,all.all -e 26 -E 32
rm -f o.Log-WEEK.Z
mv Log-WEEK o.Log-WEEK
compress o.Log-WEEK
elif [ $ODD -eq 1 ]; then
expire -n junk,control,rec.all,soc.all,talk.all -e 5 -E 32
else
expire -n misc.all,alt.all -e 14 -E 32
fi
mv log tmp$$
>log
cat tmp$$ >>Log-WEEK
echo "-------------------- `date`" >>Log-WEEK
# END newsdemon.sh
/* fixnewsfs.c */
/* this is a binary instead of a script because setuid
scripts don't work on my system */
main()
{
/* euid is already 0... */
setuid(0);
system("/etc/umount /dev/dsk/m320_1s2")
||
system("/etc/fsck -y /dev/dsk/m320_1s2")
||
system("/etc/mount /dev/dsk/m320_1s2 /u/spool/news");
}
--
kent at happym.UUCP, tikal!camco!happym!kent, Happy Man Corp. USA 206-282-9598
More information about the Comp.unix.questions
mailing list