文件系统的各指标计算方法(参考df和sar)_f_frsize f_blocks f_bfree_不闻窗外事的博客-程序员秘密

技术标签: df  linux资源信息  linux  文件系统  

df的基本打印信息如下:

文件系统           1K-块      已用      可用 已用% 挂载点
udev               10240         0     10240    0% /dev
tmpfs           26371504    323096  26048408    2% /run
/dev/sda1       47929224   6618744  38852728   15% /
tmpfs           65928756       156  65928600    1% /dev/shm
tmpfs               5120         0      5120    0% /run/lock
tmpfs           65928756         0  65928756    0% /sys/fs/cgroup
/dev/sda5      513289816     71536 487121592    1% /home

包括文件系统名字、总量、已用量、可用量、已用百分比和挂载点。通过对于df和sar相关代码的一些分析,大体的计算方法如下:

首先,通过读取“/proc/self/mountinfo”文件或者“/etc/mtab”获取文件系统基本信息,其中df使用的是前者,sar使用的是后者,以前者举例:

43 22 8:5 / /home rw,relatime shared:27 - ext4 /dev/sda5 rw,data=ordered

这是其中的一条信息,其中可以获取磁盘分区/dev/sda5和其挂载点/home,8:5是major:minor,设备的主辅ID号。知道了挂载点后,就可以使用linux系统调用statvfs获取其他信息,其中path就是挂载点,该接口的基本信息:

int statvfs(const char *path, struct statvfs *buf);
struct statvfs {
    unsigned long  f_bsize;    /* filesystem block size */
    unsigned long  f_frsize;   /* fragment size */
    fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */
    fsblkcnt_t     f_bfree;    /* # free blocks */
    fsblkcnt_t     f_bavail;   /* # free blocks for unprivileged users */
    fsfilcnt_t     f_files;    /* # inodes */
    fsfilcnt_t     f_ffree;    /* # free inodes */
    fsfilcnt_t     f_favail;   /* # free inodes for unprivileged users */
    unsigned long  f_fsid;     /* filesystem ID */
    unsigned long  f_flag;     /* mount flags */
    unsigned long  f_namemax;  /* maximum filename length */
};

这里对主要参数做一些说明:

f_bsize、f_frsize:对于绝大多数Linux系统而言,f_bsize和f_frsize的取值是相同的。然而,某些文件系统支持块片段的概念,在无需使用完整数据块的情况下,可在文件尾部分配较小的存储单元,从而避免因分配完整块而导致的空间浪费。在此类文件系统上,f_frsize和f_bsize分别表示块片段和整个块的大小。(在sar和df中,都是使用的f_frsize表示的块大小)

f_bfree、f_bavail:都表示空闲的块,但是有一些区别。许多原生UNIX和Linux文件系统,都支持为超级用户预留一部分文件系统块,如此一来,即便在文件系统空间耗尽的情况下,超级用户仍可以登录系统解决故障。如果文件系统中确有预留块,那么f_bfree和f_bavail字段间的差值则为预留块。也就是说f_bfree是root可以使用的空闲块总量,包含了f_bavail,而f_bavail是非特权用户能够使用的,是f_bfree去掉预留块。

f_files、f_ffree:与inode相关的参数,意思比较简单,就是总的inodes和空闲的inodes,f_favail参数好像不需要,只使用f_ffree就可以

下面解析df的各项打印,打印的单位的KB,说明中单位是字节,注意区别:

文件系统:从“/proc/self/mountinfo”文件或者“/etc/mtab”获取的,在上面的那条信息中就是/dev/sda5

总量(字节):f_blocks * f_frsize

已用(字节):(f_blocks - f_bfree) * f_frsize

可用(字节):f_bavail, df中的可用量不计算预留块

已用(%):(f_blocks - f_bfree)   / (f_blocks - f_bfree + f_bavail)* 100,注意该项,分母并不是总量,而是总量去掉了预留块

挂载点:从“/proc/self/mountinfo”文件或者“/etc/mtab”获取的,在上面的例子中就是/home

 

在上面的各项中,主要注意的是可用和已用的百分比,可以看到,df认为文件系统的可用量是不算预留块的,所以这两个参数都不计算预留块。但是总量却计算了预留块,这个地方比较容易产生困惑。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qu1993/article/details/105699648

智能推荐

用U盘或移动硬盘安装Windows7 (超简单制作Win7安装U盘方法)_生产的驴的博客-程序员秘密

用U盘或移动硬盘安装Windows7 (超简单制作Win7安装U盘方法)[ 系统工具 ] 最近很多人想要安装 Windows7 ,下载回去后的ISO镜像文件很多人都是使用 Nero 或 IMGBurn 等工具刻录成光盘来安装的。但实际上,不需刻盘安装Win7的方法还是有不少的。例如使用 Daemon Tools 等虚拟光驱软件直接通过硬盘来安装...

php mysql预约_php实现预约购买mysql怎样规划?_高杉峻的博客-程序员秘密

现在有个客户需求是这样的,用户在网站可以,预定购买商品。用户可以修改设置每7天,买一次,金额是多少也可以设置每8天,买一次,金额是多少还可以设置9天,买一次,金额是多少还可以设置10天,买一次。金额是多少同时用户可以设置,是否开启,预约购买(定时购买)。这种需求怎么实现的比较好。我想了好几天,终于有点想明白了。设置一个->预约表有,用户id,预约金额(冗余),预约日期,状态再弄一个->...

[LeetCode] 290. Word Pattern 单词模式_weixin_30375427的博客-程序员秘密

Given apatternand a stringstr, find ifstrfollows the same pattern.Herefollowmeans a full match, such that there is a bijection between a letter inpatternand anon-emptyword instr.Exam...

使用Visual Studio Code终端执行命令,提示“因为在此系统上禁止运行脚本“报错-程序员秘密

发生情景:当我安装好Vue-cli脚手架后,在Visual Studio Code终端运行“vue init webpack ww”进行创建名为ww的项目,结果报错:解决方案:1.以管理员身份打开Visual Studio Code:2.在终端执行两条命令:get-ExecutionPolicy返回结果会是 Restrictedset-ExecutionPolicy RemoteSigned整个过程如下: 成功创建ww项目!...

如何正确使用机器学习中的训练集、验证集和测试集?_nkwshuyi的博客-程序员秘密

王树义读完需要19分钟速读仅需7分钟训练集、验证集和测试集,林林总总的数据集合类型,到底该怎么选、怎么用?看过这篇教程后,你就能游刃有余地处理它们了。1 问题审稿的时...

Android酱油笔记之左右滑动的ListView实现_android左右滑动列表带标题_缓行者的博客-程序员秘密

转载请注明出处http://blog.csdn.net/slow_liao思考:ListView自身是个上下滑动的view,当我们在Activity监听左右滑动事件时,很多时候我们会发现,会在ListView中没有达到理想效果,但是否就没有解决的办法呢?当然不是,没有实现不了的效果,只有实现不了的程序员。案例:网易新闻借鉴:网上有很多种解决思

随便推点

多路转接IO :select的基本使用_select接口_小 琛的博客-程序员秘密

作者:小 琛欢迎转载,请标明出处文章目录多路转接IO的意义select作用接口函数poll用法多路转接IO的意义select作用接口函数poll用法

vue input 中文输入法回车_vue input 回车_stu_yiliang的博客-程序员秘密

vue input 中文输入法回车 <input type="text" class="tc-15-input-text" placeholder="请和Bot进行聊天" v-model="cilentText" @keydown.13="doInputText" @keydown.229="() => {}">中文输入法时所有的键盘按钮触发的 keydown 事件 key...

韦东山--关于嵌入式学习_生而有用的博客-程序员秘密

还有一个比较好的文章,写的是具体的怎么按照韦东山的书和视频进行学习的。网址https://www.zhihu.com/question/47881392很早以前在网上看到的韦东山老师写的文章,复制到自己的博客,方便自己以后看。在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如

JAVA 验证码生成。SimpleCaptcha_ufo2910628的博客-程序员秘密

去官方网站下载Jar包:http://simplecaptcha.sourceforge.net/Javadocs:http://simplecaptcha.sourceforge.net/javadocs/index.html自己书写工具类:/* * To change this license header, choose License Headers in

Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探_ble test_刘某人程序员的博客-程序员秘密

Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便写下这篇博客心得Google API:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html#terms

springboot如何解决重复提交,接口短时间重复调用_接口重复调用_zhige@的博客-程序员秘密

springboot如何解决重复提交,接口短时间重复调用在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交….重复提交字面意思就是提交了很多次,这种情况一般都是前端给你挖的坑….前段时间在开发中遇到一个这样的问题;前端小哥哥调用接口的时候存在 循环调用 的问题,正常情况下发送一个请求添加一条数据,结果变成了同一时刻并发的发送了 N 个请求,服务端瞬间懵.

推荐文章

热门文章

相关标签