tome
驱动中牛
驱动中牛
  • 注册日期2002-02-21
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1159回复:12

请LINUX高手指点(200分)

楼主#
更多 发布于:2003-02-25 20:59


本贴本想发在技术论坛,但怕没人注意,斗胆发在水坛,请斑竹见谅。

小弟的测试环境如下: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???

   请各位高手指点!!!
不错 ,不错,真不错。
猪爸爸
论坛版主
论坛版主
  • 注册日期2001-08-15
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望438点
  • 贡献值0点
  • 好评度129点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-02-25 22:12
tome你可知罪? :D
顶啊。灌~~~~~~~~~~
俺是[color=red]猪爸爸[/color] [img]http://bbs.zndev.com/image/post/smile/mrgreen.gif[/img] 【[url=http://shop33397538.taobao.com][color=red]猪爸爸本本美容[/color][/url]】 BELKIN贝尔金核心代理
liuyan1
驱动老牛
驱动老牛
  • 注册日期2001-08-27
  • 最后登录2023-04-18
  • 粉丝0
  • 关注0
  • 积分1031分
  • 威望477点
  • 贡献值0点
  • 好评度187点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-02-25 22:18
不熟悉,帮您鼎鼎,出点力
楼上的客,楼下的客,听我老坎说明白,要苛屎有草纸,不要扯我的麦席子,要苛尿有夜壶,不要在床上划地图。
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-26 09:38
 不知道偶能不能得到这200分, 唉, 口水滴答了
下面偶还是试试看嫩不能得到啊:
LINUX的文件系统采用的是VFS(Virtual FileSytem) 你所说的操作实际上是VFS的外部接口, 这些本身要具体到实际的文件系统中, 显然, 从你的描述来看, 你的LINUX至少存在这样几个实际的文件系统: ext2, proc, fat, 那么对不同的文件系统最后的实际文件操作是不一样, 比如应用级看到的unlink, 实际上先是调用LIBC中提供的WRAPPER函数, 这个函数然后用INT 0X80来调用SYS_UNLINK, SYS_UNLINK然后调用current -> files -> fd[fd] -> f_op -> unlink(参见linuxroot/include/sched.h 和 linuxroot/include/fs.h中的相关数据结构)。 基本上把文件的操作给描述了一下, 现在来看你的问题, 从你的程序跑的过程中, 你实际上操作了FAT文件系统, 就是说你可能在你的机器上装了MICROSOFT的操作系统和LINUX, 而且在LINUX上你MOUNT了MICROSOFT的操作系统。 可能你没有手工做这个MOUNT的操作, 但是有几个是值得注意的:
1)安装的时候, 你把装有MICORSOFT操作系统的磁盘分区指定为LINUX下的一个文件目录, 比如C盘, 你可能指定为/HOME/HARDDISK/HDA1等
2)在LINUX系统(核心)初始化后, 你在系统的启动脚本中加入了MOUNT指令的SHELL表达式, 在REDHAT下, 你可以看看/etc/rc/下的脚本文件, 如sysinit, rc_local等
3)在超级用户下, 你手工MOUNT了MICROSOFT操作系统的文件系统
注意到这样一些情况, 在这个错误发生时, 是因为你是用只读方式来进行MOUNT的。
就我个人的经验, 除了在MICROSOFT操作系统的分区上不能进行软连接的建立外, 别的文件操作都是可以完成的。

不知道偶说的对不对~, 也不知道有没有帮助。 如有, 给偶分; 如没有, 敬请指正 :D :D :D :D ;) ;) ;) ;)
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-26 09:44
忘了说了, 从你的出错看, 显然是MOUNT了C盘(MICORSOFT操作系统下)~~
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
tome
驱动中牛
驱动中牛
  • 注册日期2002-02-21
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-26 10:56
hometown老大说的很是到位,我对文件的操作的确是在DOS分区上,
但我是 MOUNT -T VFAT /DEV/HDA1 /MNT  这个操作我是作的,然后我才对文件进行了一些读写操作, 我把DOS分区MOUNT到/MNT 这个目录下,是有读写权限的的(手工的命令mv cp 等是正常),可在极少数的情况下,文件系统发生了异常, 可是为什么这样的错误不能重现??  再请老大指点!!!
不错 ,不错,真不错。
tome
驱动中牛
驱动中牛
  • 注册日期2002-02-21
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-26 11:25
hometown老大,分我是照单全给了,还是请你多多指点,毕竟,你说的这几个可能性,我都作过,可不能不管我了



 ;) ;) ;) ;) ;) ;) ;) ;) ;) ;) ;) ;)
不错 ,不错,真不错。
tome
驱动中牛
驱动中牛
  • 注册日期2002-02-21
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-26 15:11
自己顶一下!!!
不错 ,不错,真不错。
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-02-26 16:38
自己顶一下!!!
不知道你有没有对shell做删除, 这个原因不是太明白, 不过通常来说, 不可重复的错误一般是软件的原因, 就这个来看, 很有可能是FAT的接口实现有BUG。 我还没有研究FAT在LINUX底下提供的接口, 不好意思白要了你200分啦~, 不过如果可以描述的清楚的话, 我可以把那些代码看看, 看能不能找到原因 :( :( :( :(
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-26 16:46
觉得不应该是AP中的问题, 应该KERNEL中的问题, 如果你不MOUNT上FAT, 我想这个问题出现的可能性会更小, 或者就不会出现
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
tome
驱动中牛
驱动中牛
  • 注册日期2002-02-21
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分99分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-26 17:39
[quote]自己顶一下!!!
不知道你有没有对shell做删除, 这个原因不是太明白, 不过通常来说, 不可重复的错误一般是软件的原因, 就这个来看, 很有可能是FAT的接口实现有BUG。 我还没有研究FAT在LINUX底下提供的接口, 不好意思白要了你200分啦~, 不过如果可以描述的清楚的话, 我可以把那些代码看看, 看能不能找到原因 :( :( :( :( [/quote]

我的确是对SHELL作了删除,hometown兄真是一针见血,我也怀疑是我的软件错误,hometown兄对我的指点,小弟不胜感激,hometown兄再说见外的话,小弟可愧不敢当!!

我会再仔细的查一遍程序,相信会找到的, hometown兄的指点,小弟再次表示感谢!!
不错 ,不错,真不错。
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-02-26 19:02
客气了, 希望能共同提高~~ :D :D :D :D
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
飞天猩猩
驱动巨牛
驱动巨牛
  • 注册日期2001-09-24
  • 最后登录2008-06-17
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-02-26 19:21
小狗我好崇拜你啊。
游客

返回顶部