免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5374 | 回复: 7
打印 上一主题 下一主题

[Linux] linux下使用df命令或者使用statfs函数获取U盘大小的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-23 17:31 |只看该作者 |倒序浏览
本帖最后由 aiyu2199 于 2012-11-26 13:15 编辑

问题1.在Windows下把U盘格式化为Fat32格式之后,查看U盘大小时,已使用4K  谁能解释一下这4K从哪里来???

问题2.使用刚格式化好的U盘。在Linux下,Mount成功之后,使用df查看U盘大小的时候,会阻塞在那里,4G的U盘会阻塞20秒左右。   这是为什么?

问题3.如果在刚格式化好的U盘,随便放一个文件,空的也行(必须在windows下操作),这时再按问题2的步骤进行,不会再出现阻塞,就算是把U盘中的文件再删除掉,也是一样的顺利,不会阻塞。   但是,格式化完U盘,在linux上mount完之后,再往U盘中写入一个文件或者mkdir一个文件夹,再去执行df,一样还是很慢。

问题4.把U盘格式化为Fat的格式的时候,也是不会出现阻塞现象。

问题5.谁清楚statfs是如何实现的呢?


以上问题,在程序中也会遇到,在程序中使用statfs函数的时候也一样会阻塞。

有没有高手解释一下啊。。。
大家也可以试试看,我换了几个U盘了,都是一样的问题。

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
2 [报告]
发表于 2012-11-24 23:15 |只看该作者
1.  fat32也是一种文件系统好么,也需要有信息存储的哈~
2. 可以strace看看阻塞在哪一步上了

论坛徽章:
0
3 [报告]
发表于 2012-11-26 13:12 |只看该作者
回复 2# crazyhadoop

感谢回答!~~~

使用strace发现,还样是卡在了statfs函数这里,df命令也是使用statfs函数来统计的。

最新发现:
1. 格式化U盘的时候,给U盘加上卷标,随意的就行。这时,再mount 后,使用df查看大小,就很顺利。
2. 格式化U盘时,设置簇大小为16K,默认为4K,格式为FAT32。这个时候再执行mount 后,df查看 阻塞的时间会缩短。。

以上格式化都是在windows系统下进行,再到linux 系统下mount

个人感觉:
当U盘在windows下格式化完成之后,是把U盘中的FAT表也清掉了, statfs函数在获取U盘大小的时候,是把整个U盘扫描一次,因为没有fat表,所以就按簇大小,一个一个计算。所以很慢。
格式化的时候加上卷标,感觉就像是写在FAT表中的。所以是有FAT表,只不过里边没有文件。

这个只是猜测,但是我没有依据,希望知道的人能给 解释一下。

大家也可以这样试试看。
还有,我在服务器上测试的时候,没有这个问题,我感觉是服务器配置高,计算的时间也就很短。

论坛徽章:
0
4 [报告]
发表于 2012-11-27 08:43 |只看该作者
沒有高手了嗎??

论坛徽章:
0
5 [报告]
发表于 2012-11-30 15:38 |只看该作者
没人加答了吗?快来人啊。

论坛徽章:
0
6 [报告]
发表于 2012-12-14 09:38 |只看该作者
有人试过吗????

论坛徽章:
0
7 [报告]
发表于 2012-12-18 09:25 |只看该作者

昨天刚回也在解决这个问题。

statfs操作FAT32后需要同步一下,调用sync()。另外,EXT3则不能同步,否则内核可能会崩溃。

论坛徽章:
0
8 [报告]
发表于 2012-12-19 11:01 |只看该作者
回复 7# kasonpt
是执行完statfs之后调用 吗?   初次执行的时候很慢的,主要这慢的问题。

最后我是这样解决的。在windows下格式化的时候加一个卷标就行了。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP