df使用百分比神秘

2024-10-03 00:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我很困惑Unix df命令是如何达到文件系统使用百分比的。下面是我编写的一个小脚本,用于运行df并独立地计算出相同的信息:

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.0 (Santiago)
$ cat dftest.py
#! /usr/bin/python

import sys
import os
import subprocess 

def reportUsage(label, total, free):
  used = total - free
  print "%s=%dK, used=%dK (%d%%)" % (label, free, used, used*100/total)

p = subprocess.Popen(["df", "-k", "."], stdout=subprocess.PIPE)
print p.stdout.read()
rc = p.wait()

stat = os.statvfs(".")
total = (stat.f_bsize * stat.f_blocks) / 1024
free = (stat.f_bsize * stat.f_bfree) / 1024
avail = (stat.f_bsize * stat.f_bavail) / 1024

print "Total=%dK" % total
reportUsage("Free", total, free)
reportUsage("Avail", total, avail)
$ ./dftest.py
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda4             20158332   3930688  15203644  21% /home

Total=20158332K
Free=16227644K, used=3930688K (19%)
Avail=15203644K, used=4954688K (24%)
$ 

因此,总字节数、可用空间(未驱动)匹配和已用空间(基于空闲空间)都匹配。精彩的!那么,df报告的21%是怎么被使用的呢?我认为应该报告19%,因为这是使用量。我错过了什么?这不仅仅是一个舍入误差,是吗??在


Tags: importfreedfrelease空间statcatused
3条回答

加上zhujs注释的内容,造成这种差异的原因是文件系统创建期间分配的保留空间。您可以运行以下命令来查看保留空间和fs块大小

$ sudo tune2fs  -l /dev/sda4 | grep -iE  'reserved block count|block size'

这取决于你的fs,但我想你的系统的输出是这样的

^{pr2}$

这意味着保留了1024000个1K块。df已用空间下报告,因为保留空间对普通用户不可用。在

totalfree和{}都是使用整数而不是浮点除法来计算的。试试看

total = (stat.f_bsize * stat.f_blocks) / 1024.0

强制浮点除法。比较

^{pr2}$

(这只是Python2中不使用from __future__ import division时的问题。)

{306,在你的系统中,{1024}占你的系统指令的百分比,因为这个指令占了你的系统指令。在python代码中,只需计算3930688/20158332=19%的使用百分比。在

相关问题 更多 >