阅读:1165回复:12
请LINUX高手指点(200分)本贴本想发在技术论坛,但怕没人注意,斗胆发在水坛,请斑竹见谅。 小弟的测试环境如下:LINUX 6.2 内核2.2.14 。 在这种测试环境下,小弟作了对文件的一些读写和删除操作,也就是(fread, fwrite,unlink)等一些很弱的编程。本来这是极简单的,小弟写了测试程序来测试,跑了一天,正常情况下没问题。 可在极少数的情况下(这样的情况小弟无法重现,极偶然),文件系统发生了异常!!!!出错信息如下: Filesystem panic (dev 03:01) fat_free : deleting beyond EOF File system has been set read_only 小弟再用vi或cp,mv等命令操作时,系统会报错,说文件是只读属性,无法编辑。 小弟十分困惑,重启计算机后,vi或cp,mv等命令操作时,一切正常,再用我写的对文件操作程序来测试, 一切正常,这种异常情况,不能重现,不知道什么时候发生异常,当然这种情况很少见,但时不时出现,一直是我程序中隐含的大问题。 出现这种情况后,小弟查了LINUX内核源程序,发现一些迹象,在 /usr/src/linux/fs/fat 目录下misc.c程序找到了这样一个函数 void fat_fs_panic(struct super_block *s,const char *msg) { int not_ro; not_ro = !(s->s_flags & MS_RDONLY); if (not_ro) s->s_flags |= MS_RDONLY; printk(\"Filesystem panic (dev %s).\\n %s\\n\", kdevname(s->s_dev), msg); if (not_ro) printk(\" File system has been set read-only\\n\"); } 小弟认为操作系统的报错信息是这个函数产生的,可是小弟对LINUX内核程序不是熟悉,不知道这种错误是怎样产生的,在什么情况下产生? 小弟对这个错误十分不解:为什么这样的问题不能频繁重现;是不是我在编译内核时留下的隐患;还是用户层程序中的BUGS??? 请各位高手指点!!! |
|
|
沙发#
发布于:2003-02-26 10:56
hometown老大说的很是到位,我对文件的操作的确是在DOS分区上,
但我是 MOUNT -T VFAT /DEV/HDA1 /MNT 这个操作我是作的,然后我才对文件进行了一些读写操作, 我把DOS分区MOUNT到/MNT 这个目录下,是有读写权限的的(手工的命令mv cp 等是正常),可在极少数的情况下,文件系统发生了异常, 可是为什么这样的错误不能重现?? 再请老大指点!!! |
|
|
板凳#
发布于:2003-02-26 11:25
hometown老大,分我是照单全给了,还是请你多多指点,毕竟,你说的这几个可能性,我都作过,可不能不管我了
;) ;) ;) ;) ;) ;) ;) ;) ;) ;) ;) ;) |
|
|
地板#
发布于:2003-02-26 15:11
自己顶一下!!!
|
|
|
地下室#
发布于:2003-02-26 17:39
[quote]自己顶一下!!!不知道你有没有对shell做删除, 这个原因不是太明白, 不过通常来说, 不可重复的错误一般是软件的原因, 就这个来看, 很有可能是FAT的接口实现有BUG。 我还没有研究FAT在LINUX底下提供的接口, 不好意思白要了你200分啦~, 不过如果可以描述的清楚的话, 我可以把那些代码看看, 看能不能找到原因 :( :( :( :( [/quote] 我的确是对SHELL作了删除,hometown兄真是一针见血,我也怀疑是我的软件错误,hometown兄对我的指点,小弟不胜感激,hometown兄再说见外的话,小弟可愧不敢当!! 我会再仔细的查一遍程序,相信会找到的, hometown兄的指点,小弟再次表示感谢!! |
|
|