免费注册 查看新帖 |

Chinaunix

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

可不可以从/proc里获取文件系统空间使用情况 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-23 17:07 |只看该作者 |倒序浏览
比如df的输出,能不能直接从/proc里获取到呢

论坛徽章:
0
2 [报告]
发表于 2009-02-23 17:21 |只看该作者
去看coreutils-6.9 的源代码,你就知道df怎么取出的数据了。

论坛徽章:
0
3 [报告]
发表于 2009-02-23 17:25 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2009-02-23 22:56 |只看该作者

回复 #1 infernor 的帖子

可以的看看/proc/diskstats

论坛徽章:
0
5 [报告]
发表于 2009-02-24 09:20 |只看该作者
谢谢ls的几位。
/proc/diskstats 我之前看过,好像没有。下面的哪几个字段是表示文件系统空间使用情况的?


   3    0 hda 43784 11703 805005 415245 906324 1708294 20917152 63117424 0 5395341 63532623
   3    1 hda1 53846 802882 2614644 20917152
   3    2 hda2 1577 1587 0 0

df结果
df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda1              9158060   2870884   5814468  34% /
tmpfs                   257744         0    257744   0% /dev/shm

论坛徽章:
0
6 [报告]
发表于 2009-02-28 12:43 |只看该作者
要些脚本监控磁盘空间使用量,但是不想调用df

论坛徽章:
0
7 [报告]
发表于 2009-02-28 14:23 |只看该作者

回复 #6 infernor 的帖子

为什么不使用df呢?

论坛徽章:
0
8 [报告]
发表于 2009-02-28 14:42 |只看该作者

回复 #7 我是DBA 的帖子

我觉得,可能是更快,而且占用资料少吧

论坛徽章:
0
9 [报告]
发表于 2009-02-28 14:44 |只看该作者
在网上找到的,看看合用不
第一行参数(major minor name rio rmerge rsect ruse wio wmerge wsect wuse running use aveq)的值是通过genhd.c中的diskstats_show()来获得,具体解释如下:
值 变量 描述
3 major 主设备号。3 代表 had
0 minor 次设备号。7 代表 第7 分区
hda name 设备名称
32618 rio 自系统启动以来,完成的读 I/O 设备总次数。这里指真正向 I/O 设备发起并完成的读操作数目,也就是那些放到 I/O 队列中的读请求,并不是每个 read() 调用都引起一个 I/O 请求,很多进程发起的读操作(read())很可能会和其它的读操作进行 merge。
4686 rmerge 自系统启动以来,进行了 merge 读操作的次数
1280392 rsect 自系统启动以来,一共读的扇区总数 (512 bytes/sector)
369680 ruseT 自系统启动以来,全部的从进入读队列到读操作完成的时间总和 (毫秒)。上面的例子显示从开机开始,读 hda 操作共享了约369680秒
52350 Wio 自系统启动以来,完成的写 I/O 设备总次数
18007 wmerge 自系统启动以来,进行了 merge 写操作的次数
8192864 Wsect 自系统启动以来,一共写的扇区总数
19727372 wuseT 自系统启动以来,全部的从进入写队列到写操作完成的时间累积 (毫秒)
0 running 采样时,已进入 I/O 请求队列的正等待进行设备操作的请求总数。上面的例子显示 hda 上的请求队列长度为 0。
303656 useT 自系统启动以来,等待I/O操作完成的等待时间(毫秒)。扣除重复等待时间的净等待时间 (毫秒)。一般比 (ruseT+wuseT) 要小。比如 10 个读请求同时等待了 1 毫秒,那么 ruseT值为10ms, 而 useT值为1ms。因此useT可以理解为I/O队列处于不为空状态的总时间。hda的I/O队列非空时间为 303656 秒,大约5分钟。
20097096 queueT 自系统启动以来,在队列中总的等待时间累积 (毫秒) (约等于ruseT+wuseT)。为什么是“约等于”而不是等于呢?让我们看看queueT, ruseT, wuseT的计算方式,这些量一般是在I/O完成后进行更新的:
queueT += in_flight * (now - disk->stamp);
ruseT += jiffies - req->start_time; // 如果是读操作的话
wuseT += jiffies - req->start_time; // 如果是写操作的话
注意aveq计算中的in_flight,这是当前还在队列中的I/O请求数目。这些I/O还没有完成,所以不能计算到ruseT或wuseT中。理论上,只有在I/O全部完成后,queueT才会等于ruseT+wuseT。

第二行参数(3 3 hda3 35145 1265570 69915 8133232)的解释如下:
3 major 主设备号。3 代表 had
3 minor 次设备号。7 代表 第7 分区
hda3 name 设备名称
35145 rio 自系统启动以来,该扇区完成的读 I/O 设备总次数。
1265570 read sectors 自系统启动以来,一共从该扇区读的总数
69915 write 自系统启动以来,该扇区完成的写I/O 设备总次数。
8133232 write sectors 自系统启动以来,一共从该扇区写的总数

论坛徽章:
0
10 [报告]
发表于 2009-02-28 17:03 |只看该作者

回复 #9 haimming 的帖子

这个不错,学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP